在k8s中部署應用程式流程

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檔案建立資源對象
建立應用:
釋出應用:
标簽定義:
标簽:标記、過濾(-L) 、關聯(主要展現在deployment、pod、service、三者标簽保持一緻)
官網建立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
通過已有資源用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、微服務
Deployment:應用生命周期管理
第一步:部署應用
方法一:編寫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
ReplicaSet控制器
ReplicaSet:
- 副本集,主要維護Pod副本數量, 不斷對比目前Pod數量與期望Pod數量。
ReplicaSet用途:
- Deployment每次釋出都會建立一個RS作為記錄,用于實作滾動更新和復原。
檢視RS記錄
kubectl get rs
版本對應RS記錄
kubectl rolout history deployment web
Deployment:應用執行個體擴容和縮容
水準擴容(啟動多執行個體,提高并發)
修改yaml裡replicas值,再apply
kubectl scale deployment web --replicas=10
注意:replicas參數控制Pod副本數量
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