CKAD-CN 考试知识点分享(17) 金丝雀部署
您必须连接到正确的主机。不这样做可能导致零分。
[candidate@base] $ ssh ckad00023
任务背景
在 goshawk
命名空间中,服务 chipmunk-service
当前由 current-chipmunk-deployment
部署的 5 个 Pod 提供支持。为测试新版本应用,需部署一个金丝雀(Canary)Deployment,并按指定比例分流流量。
目标:
- 创建名为
canary-chipmunk-deployment
的新 Deployment,使用相同配置;你可以在/ckad/goshawk/中找到 current-chipmunk-deployment 的清单文件。 - 确保
goshawk
命名空间中 Pod 总数不超过 10 个; - 使
chipmunk-service
将 40% 的流量导向金丝雀 Pod。
步骤一:查看 Service 的标签选择器
首先,确认 chipmunk-service
通过哪些标签选择后端 Pod:
kubectl -n goshawk get svc chipmunk-service -o wide
输出显示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
chipmunk-service ClusterIP 10.96.100.50 <none> 80/TCP 10m run=chipmunk
🔍 关键信息:Service 通过
run=chipmunk
标签路由流量。
这意味着只要 Pod 拥有run: chipmunk
标签,就会被纳入服务的负载均衡池中。
步骤二:创建金丝雀 Deployment
复制现有 Deployment 配置并创建新的 canary-chipmunk-deployment
:
cp /ckad/goshawk/current-chipmunk-deployment.yaml /ckad/goshawk/canary-chipmunk-deployment.yaml
编辑新文件:
vim /ckad/goshawk/canary-chipmunk-deployment.yaml
修改内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: canary-chipmunk-deploymentnamespace: goshawk
spec:replicas: 4 # 初始可设为4,后续也可通过 scale 调整selector:matchLabels:app: canary-chipmunk # 区分不同 Deployment,避免冲突run: chipmunk # 必须保留,确保被 Service 选中template:metadata:labels:app: canary-chipmunkrun: chipmunkspec:containers:- image: nginx:stable-alpinename: nginx
✅ 关键点:
name
改为canary-chipmunk-deployment
;app
标签改为唯一值(如canary-chipmunk
),便于区分;- 保留
run: chipmunk
标签,确保被chipmunk-service
选中。
应用配置:
kubectl apply -f /ckad/goshawk/canary-chipmunk-deployment.yaml
步骤三:调整副本数以实现流量分配
Service 的流量分配基于后端 Pod 数量的比例(假设为轮询调度)。
要求:
- 40% 流量 → 金丝雀 Deployment;
- 60% 流量 → 当前 Deployment;
- 总 Pod 数不超过 10。
因此:
- 金丝雀:4 个 Pod(40%)
- 当前版本:6 个 Pod(60%)
执行扩缩容命令:
# 扩容当前 Deployment 至 6 个副本(60%)
kubectl scale deployment current-chipmunk-deployment --replicas=6 -n goshawk# 扩容金丝雀 Deployment 至 4 个副本(40%)
kubectl scale deployment canary-chipmunk-deployment --replicas=4 -n goshawk
步骤四:验证最终状态
检查 Pod 分布:
kubectl -n goshawk get pods -l run=chipmunk -o wide
输出应显示共 10 个 Pod,其中:
current-chipmunk-deployment-*
:6 个canary-chipmunk-deployment-*
:4 个
验证 Service 是否覆盖所有 Pod:
kubectl -n goshawk describe svc chipmunk-service
确认 Endpoints
列表包含 10 个 IP 地址,混合来自两个 Deployment 的 Pod。
总结
- 金丝雀部署通过共享 Service 的标签选择器实现流量接入;
- 流量比例由后端 Pod 数量比例决定(在默认调度策略下);
- 使用唯一的
app
标签区分不同 Deployment,便于管理; - 最终实现:40% 流量流向
canary-chipmunk-deployment
,满足任务要求。