天天看點

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

在k8s中部署應用程式流程

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

1、使用Deployment部署Java應用

kubectl create deployment web --image=XXX/java-demo

kubectl get deployment,pods
           

2、使用Service釋出Pod

kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web

kubectl get service
           

服務編排:YAML檔案格式說明

    縮進表示層級關系

    不支援制表符“tab”縮進,使用空格縮進

    通常開頭縮進2個空格

    字元後縮進1個空格

    字元後縮進1個空格,如冒号、逗号等

    “---”表示YAML格式,一個資源(檔案) 的開始

    "#" 注釋

服務編排:YAML檔案建立資源對象

建立應用:

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

釋出應用:

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

标簽定義:

标簽:标記、過濾(-L) 、關聯(主要展現在deployment、pod、service、三者标簽保持一緻)

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

官網建立Deployment應用案例

Deployments | Kubernetes

kubectl create     #隻建立

kubectl apply      #建立、更新



kubectl apply -f xxx.yaml    #部署

kubectl delete -f xxx.yaml    #解除安裝
           

生成yaml檔案方法

用create指令生成

kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

通過已有資源用get指令導出

kubectl get deployment  nginx -o yaml > my-deploy.yaml
           

Pod容器的字段拼寫題詩

kubectl explain pods.spec.containers

kubectl explain deployment
           

Deployment:介紹

Deployment是最常用的K8s工作負載控制器(Workload Controllers),是K8s的一個抽象概念,用于更進階層級對象,部署和管理Pod。

其他控制器還有DaemonSet、StatefulSet等。

Deployment的主要功能

管理Pod和ReplicaSet

具有上線部署、副本設定、滾動更新、復原等功能

應用場景:網站、API、微服務

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

Deployment:應用生命周期管理

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

第一步:部署應用

方法一:編寫yaml檔案部署:kubectl apply -f xxx.yaml

方法二:kubectl create deployment web --image=nginx:1.6 --replicas=3

第二步:應用更新

kubectl apply -f xxx.yaml

kubectl set image deployment/web nginx=nginx:1.17

kubectl edit deployment/web    #使用系統編輯器打開
           

應用更新分類

滾動釋出    #批量分級

藍綠釋出    #進行分組更新

灰階釋出:金絲雀、A/B    #逐漸更新

滾動更新:

    滾動釋出是指每次隻生級一個或多個服務,更新完成後加入生産環境,不斷執行這個過程,直到叢集中的全部舊版本更新新版本。

滾動更新在k8s中的實作:

1個Deployment

2個ReplicaSet

ReplicaSet控制器

ReplicaSet:副本集,主要維護Pod副本數量,不斷對比目前Pod數量與期望Pod數量。

主要用途:Deployment每次釋出都會建立一個RS作為記錄,用于實作滾動更新和復原

檢視滾動更新過程

kubectl describe deployment web

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

ReplicaSet控制器

ReplicaSet:

  • 副本集,主要維護Pod副本數量, 不斷對比目前Pod數量與期望Pod數量。

ReplicaSet用途:

  • Deployment每次釋出都會建立一個RS作為記錄,用于實作滾動更新和復原。

檢視RS記錄

kubectl get rs
           

版本對應RS記錄

kubectl rolout history deployment web
           
K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

Deployment:應用執行個體擴容和縮容

水準擴容(啟動多執行個體,提高并發)

修改yaml裡replicas值,再apply

kubectl scale deployment web --replicas=10
           

注意:replicas參數控制Pod副本數量

K8s管理應用生命周期-Deployment篇在k8s中部署應用程式流程Deployment:介紹Deployment的主要功能應用更新分類滾動更新:檢視RS記錄

Deployment:應用釋出失敗復原

復原(項目更新失敗恢複到正常版本)

kubectl rollout history deployment/web    #檢視曆史釋出版本

kubectl rollout undo deployment/web    #復原上一個版本

kubectl rollout undo deployment/web --to-revision=2    #復原曆史指定版本
           

注:復原是重新部署某一次部署時的狀态,即當時版本所有配置

rollout 檢視曆史版本

rs 可以看到曆史版本号與rs對應關系,從rs可以再得知目前對應的鏡像

# 擷取釋出版本與對應鏡像

kubectl describe $(kubectl get rs -o name -n test |grep "web1-") -n test |grep -E "revision:|Image:"
           

# 復原到上一個版本或者指定版本

kubectl rollout undo deployment web1 -n test

kubectl rollout undo deployment web1 --to-revision=1 -n test
           

正常健康檢查方法:端口監聽、運作程序、HTTP狀态碼、端口探測

Deployment:删除

kubectl delete deploy/web

kubect delete svc/web