【云原生】K8s 管理工具 kubectl 详解(三)

金丝雀发布/灰度发布(Canary Release)

一、金丝雀发布简介

Deployment控制器**支持自定义控制更新过程中的滚动节奏,**如"暂停(pause)"或"继续(resume)"更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,在筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

二、更新deployment的版本,并配置暂停deployment

2.1、创建pods

css 复制代码
kubectl create deployment nginx-test --image=nginx:1.14 --replicas=3
kubectl get pods,deploy -o wide

2.2、发布服务

css 复制代码
kubectl expose deploy nginx-test --port=80 --target-port=80 --name=nginx-service --type=NodePort
kubectl get svc -o wide

2.3、查看nginx版本

css 复制代码
curl -I 192.168.10.103:31027
kubectl describe deployments nginx-test | grep Image

2.4、定义版本change-cause

2.4.1 查看历史版本

在不定义CHANGE-CAUSE的情况下,缺省值为,当历史版本较多时,不便于咱们回滚时辨认版本号。因此,建议定义CHANGE-CAUSE为服务版本以帮助咱们辨认当前服务。

css 复制代码
kubectl rollout history deployment/nginx-test

2.4.2 定义版本

一般通过修改配置的方式定义change-cause

css 复制代码
[root@master ~]# kubectl edit deploy/nginx-test

......
kind: Deployment
metadata:
  annotations:
#下行可定义历史版本revision
    deployment.kubernetes.io/revision: "1"
#在Deployment的matadata项下的annotations中如下行定义change-cause
    kubernetes.io/change-cause: "nginx1.14"
......

2.4.3 再次查看历史版本

css 复制代码
kubectl rollout history deployment/nginx-test

2.4.4 更新nginx版本为1.15并配置暂停

css 复制代码
kubectl set image deployment/nginx-test nginx=nginx:1.15 && kubectl rollout pause deployment/nginx-test

2.4.5 观察更新状态

css 复制代码
kubectl rollout status deployment/nginx-test

2.4.6 监控更新的过程

可以看到已经新增了一个pod,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

css 复制代码
kubectl get pods -w

2.4.7 查看nginx版本

css 复制代码
kubectl get pod -o wide

2.4.8 查看并更新历史版本change-cause

css 复制代码
kubectl rollout history deploy/nginx-test
css 复制代码
[root@master ~]# kubectl edit deploy/nginx-test

kind: Deployment
metadata:
  annotations:
#下行的revison自动更新为2
    deployment.kubernetes.io/revision: "2"
#修改下行的change-cause为nginx1.15
    kubernetes.io/change-cause: nginx1.15

2.4.9 resume继续更新

css 复制代码
kubectl rollout resume deploy/nginx-test

2.4.10 查看最后的更新情况

css 复制代码
kubectl get pods -w
相关推荐
会飞的小蛮猪1 小时前
K8s-1.29.2二进制安装-第二章(K8s及ETCD下载及安装)
云原生·容器·kubernetes·etcd
Gold Steps.1 小时前
Alloy+Loki+Minio+Grafana云原生K8S日志收集方案
云原生·kubernetes·grafana
会飞的小蛮猪9 小时前
K8s-1.29.2二进制安装-第一章
云原生·容器·kubernetes
树下水月14 小时前
docker 启动后 如何通过对应的进程 找docker-compose.yaml 编排文件
运维·docker·容器
平行云14 小时前
实时云渲染支持在网页上运行UE5开发的3A大作Lyra项目
unity·云原生·ue5·webgl·虚拟现实·实时云渲染·像素流送
凯子坚持 c14 小时前
Docker 网络管理深度解析与实践指南
运维·docker·容器
kevin_水滴石穿14 小时前
在镜像生成时从内网获取字体安装包并配置
linux·docker·容器
阿里云云原生15 小时前
AI 原生落地成果获认可,阿里云云原生多项案例入选信通院「AI 云」典型示范
云原生
LILR_15 小时前
简单学docker
运维·docker·容器
阿里云云原生16 小时前
阿里云可观测 2025 年 11 月产品动态
阿里云·云原生·云计算·可观测