我们在做部署软件的时候经常会遇到软件升级与回退。
根据k8s 官网示例,创建一个yaml文件
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
创建deployment 实例
root@k8s-master:~# kubectl create -f label28.yaml
deployment.apps/nginx-deployment created
root@k8s-master:~# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 14s
root@k8s-master:~# kubectl get deployments.apps -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 21s nginx nginx:1.14.2 app=nginx
ouput:
升级软件版本
将 nginx:1.14.2 升级到 1.21.6
root@k8s-master:~# kubectl edit deployments.apps nginx-deployment
deployment.apps/nginx-deployment edited
ouput:
从结果可以看出nginx已经升级成功
如果升级的版本有问题,经常会有回退的动作
root@k8s-master:~# kubectl rollout history deployment nginx-deployment --show-managed-fields
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1
2 root@k8s-master:~# kubectl rollout history deployment nginx-deployment --revision 1
deployment.apps/nginx-deployment with revision #1
Pod Template:Labels: app=nginxpod-template-hash=6595874d85Containers:nginx:Image: nginx:1.14.2Port: 80/TCPHost Port: 0/TCPEnvironment: Mounts: Volumes: root@k8s-master:~# kubectl rollout history deployment nginx-deployment --revision 2
deployment.apps/nginx-deployment with revision #2
Pod Template:Labels: app=nginxpod-template-hash=6494477f49Containers:nginx:Image: nginx:1.21.6Port: 80/TCPHost Port: 0/TCPEnvironment: Mounts: Volumes:
查看当前版本信息,现在需要从当前版本2回退到版本1.
root@k8s-master:~# kubectl describe deployments.apps nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Mon, 20 Mar 2023 04:39:37 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 2
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: app=nginxContainers:nginx:Image: nginx:1.21.6Port: 80/TCPHost Port: 0/TCPEnvironment: Mounts: Volumes:
Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable
OldReplicaSets:
NewReplicaSet: nginx-deployment-6494477f49 (3/3 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 19m deployment-controller Scaled up replica set nginx-deployment-6595874d85 to 3Normal ScalingReplicaSet 13m deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 1Normal ScalingReplicaSet 13m deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 2Normal ScalingReplicaSet 13m deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 2Normal ScalingReplicaSet 13m deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 1Normal ScalingReplicaSet 13m deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 3Normal ScalingReplicaSet 13m deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 0
root@k8s-master:~#
root@k8s-master:~# kubectl rollout history deployment nginx-deployment --revision=1
deployment.apps/nginx-deployment with revision #1
Pod Template:Labels: app=nginxpod-template-hash=6595874d85Containers:nginx:Image: nginx:1.14.2Port: 80/TCPHost Port: 0/TCPEnvironment: Mounts: Volumes:
root@k8s-master:~# kubectl rollout undo deployment nginx-deployment --to-revision=1
deployment.apps/nginx-deployment rolled back
root@k8s-master:~# k describe deployments.apps nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Mon, 20 Mar 2023 05:08:59 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 3
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:Labels: app=nginxContainers:nginx:Image: nginx:1.14.2Port: 80/TCPHost Port: 0/TCPEnvironment: Mounts: Volumes:
Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailable
OldReplicaSets:
NewReplicaSet: nginx-deployment-6595874d85 (3/3 replicas created)
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 5m19s deployment-controller Scaled up replica set nginx-deployment-6595874d85 to 3Normal ScalingReplicaSet 4m37s deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 1Normal ScalingReplicaSet 4m36s deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 2Normal ScalingReplicaSet 4m36s deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 2Normal ScalingReplicaSet 4m35s deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 1Normal ScalingReplicaSet 4m35s deployment-controller Scaled up replica set nginx-deployment-6494477f49 to 3Normal ScalingReplicaSet 4m34s deployment-controller Scaled down replica set nginx-deployment-6595874d85 to 0Normal ScalingReplicaSet 8s deployment-controller Scaled up replica set nginx-deployment-6595874d85 to 1Normal ScalingReplicaSet 7s deployment-controller Scaled down replica set nginx-deployment-6494477f49 to 2Normal ScalingReplicaSet 5s (x4 over 7s) deployment-controller (combined from similar events): Scaled down replica set nginx-deployment-6494477f49 to 0
root@k8s-master:~# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2
3
output:
可以看到这里执行版本回退之后,之前的版本1被版本3替代了。