kubernetes pod版本升级与回滚

创建应用

depoly-demoapp-v10.yaml

apiVersion: v1
kind: Namespace
metadata:
    name: demoapp
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: demoappv10
  name: demoappv10
  namespace: demoapp
spec:
  ports:
  - name: http-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: demoapp
    version: v1.0
  type: ClusterIP

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demoappv10
    version: v1.0
  name: demoappv10
  namespace: demoapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demoapp
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: demoapp
        version: v1.0
    spec:
      containers:
      - image: ikubernetes/demoapp:v1.0
        name: demoapp
        env:
        - name: PORT
          value: "8080"
        resources: {}

创建deployment资源

# kubectl apply -f depoly-demoapp-v10.yaml
namespace/demoapp created
deployment.apps/demoappv10 created

访问服务

# curl `kubectl get svc/demoappv10 -n demoapp -o jsonpath="{.spec.clusterIP}"`:8080
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoappv10-69f6cf9477-v9m6g, ServerIP: 172.20.154.216!

查看deployment资源

# kubectl get deploy -n demoapp
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
demoappv10   2/2     2            2           104s

查看 Deployment 滚动更新状态 

# kubectl rollout status deploy/demoappv10 -n demoapp
deployment "demoappv10" successfully rolled out

查看ReplicaSet 

# kubectl get rs -n demoapp
NAME                    DESIRED   CURRENT   READY   AGE
demoappv10-78b6586d58   2         2         2       4m59s

查看pod 标签

# kubectl get pods -n demoapp --show-labels
NAME                          READY   STATUS    RESTARTS   AGE     LABELS
demoappv10-78b6586d58-64hq4   1/1     Running   0          6m48s   app=demoapp,pod-template-hash=78b6586d58,version=v1.0
demoappv10-78b6586d58-f72jw   1/1     Running   0          6m48s   app=demoapp,pod-template-hash=78b6586d58,version=v1.0

查看Deployment 修订历史

# kubectl rollout history deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
1         <none>

Deployment 添加注解

# kubectl annotate deployment/demoappv10 kubernetes.io/change-cause="kubectl apply -f depoly-demoapp-v10.yaml" -n demoapp
deployment.apps/demoappv10 annotated

确认Deployment 添加注解

# kubectl rollout history deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
1         kubectl apply -f depoly-demoapp-v10.yaml

应用更新

仅当 Deployment Pod 模板(即 .spec.template)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 更新。其他更新(如对 Deployment 执行扩缩容的操作)不会触发更新动作。

更新操作

# kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp
deployment.apps/demoappv10 image updated
deployment/demoappv10表明 Deployment 的名称,demoapp表明需要进行更新的容器,ikubernetes/demoapp:v1.1则表示镜像的新版本以及它的标签。

查看滚动更新过程

# kubectl rollout status deploy demoappv10 -n demoapp
deployment "demoappv10" successfully rolled out

查看rs控制器

# kubectl get rs -n demoapp
NAME                    DESIRED   CURRENT   READY   AGE
demoappv10-6d99f44649   2         2         2       62s
demoappv10-78b6586d58   0         0         0       85s

查看deployment日志

# kubectl describe deployments -n demoapp
Name:                   demoappv10
Namespace:              demoapp
CreationTimestamp:      Fri, 16 Jun 2023 15:34:50 +0800
Labels:                 app=demoappv10
                        version=v1.0
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=demoapp
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=demoapp
           version=v1.0
  Containers:
   demoapp:
    Image:      ikubernetes/demoapp:v1.1
    Port:       <none>
    Host Port:  <none>
    Environment:
      PORT:  8080
    Mounts:  <none>
  Volumes:   <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   demoappv10-6d99f44649 (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  3m15s  deployment-controller  Scaled up replica set demoappv10-78b6586d58 to 2
  Normal  ScalingReplicaSet  2m52s  deployment-controller  Scaled up replica set demoappv10-6d99f44649 to 1
  Normal  ScalingReplicaSet  2m50s  deployment-controller  Scaled down replica set demoappv10-78b6586d58 to 1 from 2
  Normal  ScalingReplicaSet  2m50s  deployment-controller  Scaled up replica set demoappv10-6d99f44649 to 2 from 1
  Normal  ScalingReplicaSet  2m49s  deployment-controller  Scaled down replica set demoappv10-78b6586d58 to 0 from 1

访问服务

# curl `kubectl get svc/demoappv10 -n demoapp -o jsonpath="{.spec.clusterIP}"`:8080
iKubernetes demoapp v1.1 !! ClientIP: 172.20.151.128, ServerName: demoappv10-6d99f44649-q8cbc, ServerIP: 172.20.44.209!

Deployment 添加注解

# kubectl annotate deployment/demoappv10 kubernetes.io/change-cause="kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp" -n demoapp
deployment.apps/demoappv10 annotated

查看 Deployment 修订历史

# kubectl rollout history deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
1         kubectl apply -f depoly-demoapp-v10.yaml
2         kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp

应用回滚

有时,你可能想要回滚 Deployment;例如,当 Deployment 不稳定时(例如进入反复崩溃状态)。 默认情况下,Deployment 的所有上线记录都保留在系统中,以便可以随时回滚 (你可以通过修改修订历史记录限制来更改这一约束)。

检查 Deployment 上线历史

# kubectl rollout history deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
1         kubectl apply -f depoly-demoapp-v10.yaml
2         kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp

要查看修订历史的详细信息

# kubectl rollout history deployment/demoappv10 --revision=2 -n demoapp
deployment.apps/demoappv10 with revision #2
Pod Template:
  Labels:	app=demoapp
	pod-template-hash=6d99f44649
	version=v1.0
  Annotations:	kubernetes.io/change-cause: kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp
  Containers:
   demoapp:
    Image:	ikubernetes/demoapp:v1.1
    Port:	<none>
    Host Port:	<none>
    Environment:
      PORT:	8080
    Mounts:	<none>
  Volumes:	<none>

回滚到上一个版本

执行操作

# kubectl rollout undo deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 rolled back

访问服务

# curl `kubectl get svc/demoappv10 -n demoapp -o jsonpath="{.spec.clusterIP}"`:8080
iKubernetes demoapp v1.0 !! ClientIP: 172.20.151.128, ServerName: demoappv10-78b6586d58-c5n96, ServerIP: 172.20.89.151!

获取 Deployment 描述信息

# kubectl describe deployments -n demoapp
Name:                   demoappv10
Namespace:              demoapp
CreationTimestamp:      Fri, 16 Jun 2023 15:52:30 +0800
Labels:                 app=demoappv10
                        version=v1.0
Annotations:            deployment.kubernetes.io/revision: 3
                        kubernetes.io/change-cause: kubectl apply -f depoly-demoapp-v10.yaml
Selector:               app=demoapp
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=demoapp
           version=v1.0
  Containers:
   demoapp:
    Image:      ikubernetes/demoapp:v1.0
    Port:       <none>
    Host Port:  <none>
    Environment:
      PORT:  8080
    Mounts:  <none>
  Volumes:   <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   demoappv10-78b6586d58 (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  108s  deployment-controller  Scaled up replica set demoappv10-78b6586d58 to 1 from 0
  Normal  ScalingReplicaSet  106s  deployment-controller  Scaled down replica set demoappv10-6d99f44649 to 1 from 2
  Normal  ScalingReplicaSet  106s  deployment-controller  Scaled up replica set demoappv10-78b6586d58 to 2 from 1
  Normal  ScalingReplicaSet  105s  deployment-controller  Scaled down replica set demoappv10-6d99f44649 to 0 from 1

Deployment 添加注解

# kubectl annotate deployment/demoappv10 kubernetes.io/change-cause="kubectl rollout undo deployment/demoappv10 -n demoapp" -n demoapp
deployment.apps/demoappv10 annotated

查看 Deployment 修订历史

# kubectl rollout history deployment/demoappv10 -n demoapp
deployment.apps/demoappv10 
REVISION  CHANGE-CAUSE
2         kubectl set image deployment/demoappv10 demoapp=ikubernetes/demoapp:v1.1 -n demoapp
3         kubectl rollout undo deployment/demoappv10 -n demoapp

回滚到指定版本

# kubectl rollout undo deployment/demoappv10 --revision=2 -n demoapp

参考文档

https://kubernetes.io/zh-cn/docs/tutorials/kubernetes-basics/update/update-intro/

posted @ 2023-06-19 15:38  小吉猫  阅读(125)  评论(0编辑  收藏  举报