antony@notes:~/kubernetes$ cat "Kubernetes-Deployment-1.md"
Kubernetes Deployment
Kubernetes Deployment
前言
透過 Kubernetes Deployment ,將一個網站服務進行進版或退版,且服務不中斷。
操作步驟
[TOC]
建立與檢視 Depolyment Object
編輯 nginx 網站的 yaml 檔
$ echo '
apiVersion: apps/v1
kind: Deployment
metadata:
name: depng
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: quay.io/cloudwalker/nginx:1.20
ports:
- containerPort: 80 '> ~/wulin/yaml/depng.yaml建立與檢視部屬狀態
建立網站命令
$ kubectl apply -f ~/wulin/yaml/depng.yaml螢幕輸出 :
deployment.apps/depng created檢視網站部屬後的狀態
$ kg all --selector app=nginxNAME READY STATUS RESTARTS AGE
pod/depng-6d7cd45868-5mnmv 1/1 Running 0 6s
pod/depng-6d7cd45868-bzdlg 1/1 Running 0 6s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/depng 2/2 2 2 6s
NAME DESIRED CURRENT READY AGE
replicaset.apps/depng-6d7cd45868 2 2 2 6s檢查事件
kubectl describe deployments depng螢幕輸出
...以上忽略
OldReplicaSets: <none>
NewReplicaSet: depng-6d7cd45868 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 25s deployment-controller Scaled up replica set depng-6d7cd45868 to 2網站進版
$ kubectl set image deployment.v1.apps/depng nginx=quay.io/cloudwalker/nginx:1.21 --record
deployment.apps/depng image updated- 將 image 換裝成新版 1.21
--record,記錄
$ kubectl rollout status deployment.v1.apps/depng
Waiting for deployment "depng" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "depng" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "depng" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "depng" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "depng" rollout to finish: 1 old replicas are pending termination...
deployment "depng" successfully rolled out- 這命令要再上一個命令做完後趕快執行,不然只會看到最後一行
- Deplyment 進版時,會先把新的 pod 建立起來,再把舊版本的 pod 刪除
檢查 image 是不是真的換裝城新版的
$ kubectl describe deployments depng
Name: dep1
............
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: quay.io/cloudwalker/nginx:1.21
Port: 80/TCP
Host Port: 0/TCP
進版流程驗證
OldReplicaSets:NewReplicaSet: depng-59475496dc (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 71s deployment-controller Scaled up replica set depng-6d7cd45868 to 2 Normal ScalingReplicaSet 23s deployment-controller Scaled up replica set depng-59475496dc to 1 Normal ScalingReplicaSet 19s deployment-controller Scaled down replica set depng-6d7cd45868 to 1 from 2 Normal ScalingReplicaSet 19s deployment-controller Scaled up replica set depng-59475496dc to 2 from 1 Normal ScalingReplicaSet 18s deployment-controller Scaled down replica set depng-6d7cd45868 to 0 from 1
- 可以看到先把新版的網站部屬一個以後,再將舊版的服務停掉一個,再把新版的網站擴充到設定的 2 個,最後舊版的全部退掉。
網站退版
將 Deployment 退回上一個版本
$ kubectl rollout undo deployment.v1.apps/depng --to-revision=1檢查是否符合預期
$ kubectl describe deployment depng
........
Containers:
nginx:
Image: quay.io/cloudwalker/nginx:1.20
Port: 80/TCP
Host Port: 0/TCP
.........
OldReplicaSets:
NewReplicaSet: depng-6d7cd45868 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m23s deployment-controller Scaled up replica set depng-6d7cd45868 to 2
Normal ScalingReplicaSet 95s deployment-controller Scaled up replica set depng-59475496dc to 1
Normal ScalingReplicaSet 91s deployment-controller Scaled down replica set depng-6d7cd45868 to 1 from 2
Normal ScalingReplicaSet 91s deployment-controller Scaled up replica set depng-59475496dc to 2 from 1
Normal ScalingReplicaSet 90s deployment-controller Scaled down replica set depng-6d7cd45868 to 0 from 1
Normal ScalingReplicaSet 9s deployment-controller Scaled up replica set depng-6d7cd45868 to 1 from 0
Normal ScalingReplicaSet 8s deployment-controller Scaled down replica set depng-59475496dc to 1 from 2
Normal ScalingReplicaSet 8s deployment-controller Scaled up replica set depng-6d7cd45868 to 2 from 1
Normal ScalingReplicaSet 6s deployment-controller Scaled down replica set depng-59475496dc to 0 from 1
- 看倒數四筆的事件,要建立的版本會先建立,等要建立的版本會先建立好後,之前的版本才會刪除
橫向擴充服務
將 Deployment 的 pod 擴充為 3 個
$ kubectl scale deployment.v1.apps/depng --replicas=3檢查是否符合預期
$ kubectl get deployment depng
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
dep1 3 3 3 3 46m
$ kubectl get pods | grep depng
dep1-66f7f56f56-2rf8p 1/1 Running 0 39s
dep1-66f7f56f56-bggcn 1/1 Running 0 71s
dep1-66f7f56f56-mn589 1/1 Running 0 69s
$ kubectl delete deployment depng