k8s-pod的镜像升级与回滚

k8s-pod的镜像升级与回滚


官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/#updating-a-deployment

一、滚动更新

deploy升级过程 --》滚动升级

一个一个去升级,无服务中断

  1. 只修改副本数量

    不会创建新的rs

  2. 修改副本数量和镜像文件版本或者名字

    会重新创建一个新的rs ,deploy名字不会改变

    新的rs会去创建新的pod

yaml 复制代码
[root@k8s-1 probe]# vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27
        ports:
        - containerPort: 80
[root@k8s-1 probe]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment configured

旧rs到新rs

bash 复制代码
[root@k8s-1 probe]# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     1            3           5d20h
[root@k8s-1 probe]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6bb46d885f   1         1         0       16s
nginx-deployment-8d545c96d    3         3         3       5d20h
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS        AGE
nginx-deployment-6bb46d885f-pksq5   0/1     ContainerCreating   0               73s
nginx-deployment-8d545c96d-5gb56    1/1     Running             1 (4d15h ago)   5d2h
nginx-deployment-8d545c96d-5kmtz    1/1     Running             1 (4d15h ago)   5d2h
nginx-deployment-8d545c96d-bjbmw    1/1     Running             1 (4d15h ago)   5d2h

# 手动删除旧rs
[root@k8s-1 probe]# kubectl delete rs nginx-deployment-8d545c96d
replicaset.apps "nginx-deployment-8d545c96d" deleted
[root@k8s-1 probe]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6bb46d885f   3         3         3       3m4s
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS         AGE
nginx-deployment-6bb46d885f-hfvdb   1/1     Running             0                31s
nginx-deployment-6bb46d885f-p2ckv   1/1     Running             0                63s
nginx-deployment-6bb46d885f-pksq5   1/1     Running             0                3m6s

变更镜像版本,rs也会变

bash 复制代码
[root@k8s-1 probe]# vim nginx.yaml
[root@k8s-1 probe]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment configured
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS         AGE
nginx-deployment-6bb46d885f-hfvdb   1/1     Running             0                3m5s
nginx-deployment-6bb46d885f-p2ckv   1/1     Running             0                3m37s
nginx-deployment-6bb46d885f-pksq5   1/1     Running             0                5m40s
nginx-deployment-8d545c96d-h4gmc    0/1     ContainerCreating   0                2s

[root@k8s-1 probe]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6bb46d885f   2         2         2       5m46s
nginx-deployment-8d545c96d    2         2         1       8s
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS         AGE
nginx-deployment-6bb46d885f-p2ckv   1/1     Running             0                3m45s
nginx-deployment-6bb46d885f-pksq5   1/1     Terminating         0                5m48s
nginx-deployment-8d545c96d-4znt2    1/1     Running             0                6s
nginx-deployment-8d545c96d-8zqqs    0/1     ContainerCreating   0                1s
nginx-deployment-8d545c96d-h4gmc    1/1     Running             0                10s

[root@k8s-1 probe]# kubectl get pod
NAME                               READY   STATUS      RESTARTS         AGE
nginx-deployment-8d545c96d-4znt2   1/1     Running     0                22s
nginx-deployment-8d545c96d-8zqqs   1/1     Running     0                17s
nginx-deployment-8d545c96d-h4gmc   1/1     Running     0                26s

二、版本回滚

回滚本质是 "反向滚动升级",也可直接修改yaml文件

bash 复制代码
[root@k8s-1 probe]# kubectl rollout history deployment
deployment.apps/nginx-deployment 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
[root@k8s-1 probe]# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.apps/nginx-deployment rolled back
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS       AGE
nginx-deployment-6bb46d885f-wqgd4   0/1     ContainerCreating   0              6s
nginx-deployment-8d545c96d-4znt2    1/1     Running             0              2m57s
nginx-deployment-8d545c96d-8zqqs    1/1     Running             0              2m52s
nginx-deployment-8d545c96d-h4gmc    1/1     Running             0              3m1s

[root@k8s-1 probe]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6bb46d885f   2         2         1       8m46s
nginx-deployment-8d545c96d    2         2         2       3m8s
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS              RESTARTS       AGE
nginx-deployment-6bb46d885f-2whgd   0/1     ContainerCreating   0              1s
nginx-deployment-6bb46d885f-c5rr4   1/1     Running             0              9s
nginx-deployment-6bb46d885f-wqgd4   1/1     Running             0              18s
nginx-deployment-8d545c96d-4znt2    1/1     Terminating         0              3m9s
nginx-deployment-8d545c96d-h4gmc    1/1     Running             0              3m13s

[root@k8s-1 probe]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6bb46d885f   3         3         3       9m9s
nginx-deployment-8d545c96d    0         0         0       3m31s
[root@k8s-1 probe]# kubectl get pod
NAME                                READY   STATUS             RESTARTS       AGE
nginx-deployment-6bb46d885f-2whgd   1/1     Running            0              22s
nginx-deployment-6bb46d885f-c5rr4   1/1     Running            0              30s
nginx-deployment-6bb46d885f-wqgd4   1/1     Running            0              39s
相关推荐
天天喝旺仔1 小时前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
小马同学-4 小时前
crictl实战:K8s容器运行时排障工具
容器·k8s·crictl
逐流人4 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
kuroomi15 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
闲云自留地15 小时前
Containerd 进阶教程:命名空间 Namespace、私有仓库 Harbor、容器管理全流程
容器
闲云自留地18 小时前
Containerd 是什么?架构、插件与安装实践一次讲清
容器
运维开发王义杰19 小时前
跨项目直连数据库:是架构反模式,还是现实的工程妥协?
云原生
闲云野鹤在人间19 小时前
docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解
运维·docker·容器·架构·云计算
闲云自留地21 小时前
告别敲命令!DockerUI 与 Portainer 可视化容器管理实战
docker·容器
wdfk_prog21 小时前
ROS教程10:从 gtest 到 rostest——Unit Test、Node 集成测试、rosbag 与 rqt 验证闭环
运维·缓存·docker·容器·ros