Deployment 爲 Pod 和 ReplicaSet 提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController 來方便的管理應用。典型的應用場景包括:
1. 定義Deployment來創建Pod和ReplicaSet
2. 滾動升級和回滾應用
3. 擴容和縮容
4. 暫停和繼續Deployment
RS 與 Deployment 的關聯
1. 部署一個Nginx應用
[root@k8s-master01 k8s-test]# cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: kone.com/library/nginx:latest
ports:
- containerPort: 80
kubectl apply -f nginx-deployment.yaml
[root@k8s-master01 k8s-test]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-69c69cf68d-7krsq 1/1 Running 0 4m43s
nginx-deployment-69c69cf68d-hzbfv 1/1 Running 0 4m31s
nginx-deployment-69c69cf68d-vvxcc 1/1 Running 0 4m43s
2. 擴容kubectl scale deployment nginx-deployment --replicas=6
[root@k8s-master01 k8s-test]# kubectl scale deployment nginx-deployment --replicas=6
deployment.extensions/nginx-deployment scaled
[root@k8s-master01 k8s-test]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-69c69cf68d-2bfrd 1/1 Running 0 6s
nginx-deployment-69c69cf68d-7krsq 1/1 Running 0 21m
nginx-deployment-69c69cf68d-9nsbk 1/1 Running 0 6s
nginx-deployment-69c69cf68d-hzbfv 1/1 Running 0 21m
nginx-deployment-69c69cf68d-vh9w6 1/1 Running 0 6s
nginx-deployment-69c69cf68d-vvxcc 1/1 Running 0 21m
3. 設置自動擴展
如果集羣支持 horizontal pod autoscaling 的話,還可以爲Deployment設置自動擴展
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
4. 更新鏡像,更新nginx版本
獲取當前nginx版本
[root@k8s-master01 k8s-test]# kubectl exec nginx-deployment-846fbcbb-gsrbx -- nginx -v
nginx version: nginx/1.9.1
執行命令更新版本kubectl set image deployment/nginx-deployment nginx=kone.com/library/nginx:latest
[root@k8s-master01 k8s-test]# kubectl set image deployment/nginx-deployment nginx=kone.com/library/nginx:latest
deployment.extensions/nginx-deployment image updated
查看當前版本
[root@k8s-master01 k8s-test]# kubectl exec nginx-deployment-69c69cf68d-4qvzn -- nginx -v
nginx version: nginx/1.17.8
5. 回滾kubectl rollout undo deployment/nginx-deployment
[root@k8s-master01 k8s-test]# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back
查看回滾狀態kubectl rollout status deployment/nginx-deployment
[root@k8s-master01 k8s-test]# kubectl rollout status deployment/nginx-deployment
deployment “nginx-deployment” successfully rolled out
查看當前版本
[root@k8s-master01 k8s-test]# kubectl exec nginx-deployment-846fbcbb-645tk -- nginx -v
nginx version: nginx/1.9.1
6. 查看歷史版本kubectl rollout history deployment/nginx-deployment
[root@k8s-master01 k8s-test]# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment
REVISION CHANGE-CAUSE
5 <none>
9 <none>
10 <none>
指定回滾到某個歷史版本kubectl rollout undo deployment/nginx-deployment --to-revision=2
暫停 deployment 的更新kubectl rollout pause deployment/nginx-deployment