K8S- Deployment 的滚动更新 Rolling Update

在这里插入图片描述

滚动更新

这里的更新指的不是更新deployment 本身的属性(label/ replicas)等, 而是更新POD 的container 的版本

更新方法通常有两种

  1. 是直接update deployment配置, 注意只有update了template中的内容(与container相关) 才会触发更新
  2. 用kubectl set image 命令




构造新版本的service

为了更好地测试,
我们构造1个新的版本的spring boot的service

更新很简单
直接更新pom里面的version就好, 由1.1.1 to 1.1.2

    <groupId>com.home</groupId>
    <artifactId>bq_api</artifactId>
    <version>1.1.2</version>
    <name>bq-api-service</name>

里面已经利用springboot actuator 构造了1个接口/actuator/info 可以获得当前版本

[gateman@manjaro-x13 ~]$ curl 127.0.0.1:8080/actuator/info
{
   "app":"Sales API","version":"1.1.2","description":"This is a simple Spring Boot application to demonstrate the use of BigQuery in GCP."}

当把docker image 推送到GAR后
可以用下面命令确认

[gateman@manjaro-x13 ~]$ gcloud artifacts docker images list europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo --include-tags
Listing items under project jason-hsbc, location europe-west2, repository my-docker-repo.

IMAGE                                                                 DIGEST                                                                   TAGS            CREATE_TIME          UPDATE_TIME          SIZE
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:30fb2cebd2bf82863608037ce41048114c061acbf1182261a748dadefff2372f                  2024-03-18T02:45:02  2024-03-18T02:45:02  366980350
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:55737b9c2efc7115d878c8b8b036dd0fe8ae5e66b2154fe05ba015b28a31c7aa  1.0.0           2024-03-18T01:40:34  2024-03-18T01:40:34  366980348
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:569397b5d13264988800ad5af15359b4ab085eaca209484e6d859fc2a9e6b6ab  1.1.1           2024-03-31T12:03:57  2024-03-31T12:03:57  366981699
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:648920b7aba0b5cdeeca9e1237d9eeb62ee29188801a95adf7619bcee94e9eb1                  2024-03-15T02:29:55  2024-03-15T02:29:55  367470655
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:6c4129c5a6938004b14cc555518b52a18e8177ce6940b52db7c514783ef9325b  1.1.2           2024-04-04T21:08:09  2024-04-04T21:08:09  366981681
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:7db14476085376db27a2814f8348fdbe002516c576d396c02030094c859f279c                  2024-03-15T20:51:58  2024-03-15T20:51:58  367470658
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:88c7f68df0dd0508b551d53ad22cf4395fea233b5e77be016f13ce9c8c4401fa                  2024-03-30T00:12:15  2024-03-30T00:12:15  366981231
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:a42cd0cd3a3483599b17d94022d1ccd234003491db217b4055f64997478149e1                  2024-03-15T00:03:21  2024-03-15T00:03:21  367470619
europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service  sha256:f1e5a8064b134aedd1a5840c16af85633e98a9649c830b6a3f6788a8b00bf16f                  2024-03-25T00:35:48  2024-03-25T00:35:48  366980337

可以看见到1.1.2 的image 已经在GAR了




update deployment配置 测试

先看当前的状态

root@k8s-master:~# kubectl get deploy -o wide --show-labels
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS                 IMAGES                                                                       SELECTOR             LABELS
bq-api-service-deploy-sample   10/10   10           10          3h27m   bq-api-service-container   europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1   app=bq-api-service   app=bq-api-service
root@k8s-master:~# kubectl get rs -o wide --show-labels
NAME                                     DESIRED   CURRENT   READY   AGE     CONTAINERS                 IMAGES                                                                       SELECTOR                                         LABELS
bq-api-service-deploy-sample-9f8d9c988   10        10        10      3h27m   bq-api-service-container   europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1   app=bq-api-service,pod-template-hash=9f8d9c988   app=bq-api-service,pod-template-hash=9f8d9c988
root@k8s-master:~# kubectl get pods -o wide --show-labels
NAME                                           READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES   LABELS
bq-api-service-deploy-sample-9f8d9c988-25tqr   1/1     Running   0          3h27m   10.244.1.20   k8s-node1   <none>           <none>            app=bq-api-service,pod-template-hash=9f8d9c988
bq-api-service-deploy-sample-9f8d9c988-67psf   1/1     Running   0          3h27m   10.244.3.30   k8s-node3   <none>           <none>            app=bq-api-service,pod-template-hash=9f8d9c988
bq-api-service-deploy-sample-9f8d9c988-cvm4z   1/1     Running   0          3h27m   10.244.3.32   k8s-node3   <none>           <none>            app=bq-api-service,pod-template-hash=9f8d9c988
bq-api-service-deploy-sample-9f8d9c988-f77tx   1/1     Running   0          3h27m   10.244.1.23   k8s-node1   <none>           <none>            app=bq-api-service,pod-template-hash=9f8d9c988
bq-api-service-deploy-sample-9f8d9c988-f98s6   1/1     Running   0          3h27m   10.244.2.82   k8s-node0   <none>           <none>            app=bq-api-service,pod-template-hash=
### Kubernetes 滚动更新机制及其实现方式 Kubernetes 中的滚动更新是一种平滑升级应用程序实例的方法,通过逐步替换旧版本的应用程序 Pod 来实现零停机时间的更新。以下是关于滚动更新的核心概念及其具体实现方法: #### 1. Deployment 控制器与滚动更新 DeploymentKubernetes 提供的一种高级抽象资源对象,用于管理无状态应用的工作负载。它支持滚动更新功能,允许用户定义期望的状态并自动调整实际状态以匹配该目标。 当执行滚动更新时,Deployment 控制器会依次创建新的 ReplicaSet 和对应的 Pods,并逐渐减少旧 ReplicaSet 的副本数直到完全移除[^3]。这一过程中,Pods 被逐批替换,从而确保服务始终可用。 #### 2. 更新策略配置 在 YAML 文件中可以通过 `strategy` 字段指定滚动更新的行为参数。常见的字段包括: - **maxUnavailable**: 定义每次更新期间不可用的最大 Pod 数量比例。 - **maxSurge**: 设置额外启动的新 Pod 数量相对于当前规模的比例。 下面是一个典型的 Deployment 配置示例,展示了如何启用滚动更新: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example-container image: nginx:latest ``` 上述配置表示,在更新过程中最多有一个 Pod 不可用 (`maxUnavailable`) 并且可以超出原有数量一个新 Pod (`maxSurge`)[^4]。 #### 3. 执行滚动更新命令 要手动触发滚动更新操作,可使用以下 kubectl 命令来修改镜像或其他属性: ```bash kubectl set image deployment/example-deployment example-container=nginx:newversion --record=true ``` 其中 `--record=true` 参数记录此次变更历史以便后续回滚操作。 验证滚动更新进度可通过如下指令完成: ```bash kubectl rollout status deployment/example-deployment ``` #### 4. 版本管理和回滚 每当成功部署一次更改后,Kubernetes 将保存其修订版信息至内部存储中。如果遇到问题,则能够轻松恢复到之前的稳定版本。例如: ```bash kubectl rollout undo deployment/example-deployment ``` 这一步骤利用了之前提到过的 Deployment 对象内置的历史追踪能力。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值