K8S中Pod的水平擴展,收縮
概念:更新Deployment的Pod模板,會滾動更新,依賴Kubernetes項目中的ReplicaSet。
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-set
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
通過副本數量的定義 replicas: 3和Pod模板組成,是Deployment的子集。
Deployment控制器實際操縱的是ReplicaSet對象,而不是Pod對象。
Deployment管理的Pod,其ownerReference是ReplicaSet。
Deployment ,ReplicaSet以及Pod的關係
水平擴展的命令:kubectl scale
事例:
$ kubectl scale deployment nginx-deployment --replicas=4 --record
deployment.apps/nginx-deployment scaled
--record 記錄每次操作所執行的命令,方便後面查看。
檢查Deployment的狀態信息
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 0 0 0 1s
實時查看狀態變化
kubectl rollout status;
查看ReplicaSet
kubectl get rs
滾動更新策略RollingUpdateStrategy
直接使用kubectl edit指令,打開API對象,修改Pod模板,保存退出會立即出發“滾動更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
...
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
也可以用百分比的方式表示,比如maxUnavailable=50%
版本回滾
$ kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment
如果是要回滾到比較早的版本
首先,我需要使用 kubectl rollout history 命令,查看每次 Deployment 變更對應的版本
通過這個 kubectl rollout history 指令,看到每個版本對應的 Deployment 的 API 對象的細節,具體命令如下所示
$ kubectl rollout history deployment/nginx-deployment --revision=2
然後,我們就可以在 kubectl rollout undo 命令行最後,加上要回滾到的指定版本的版本號,就可以回滾到指定版本了