OpenKruise CloneSet 实战教程:部署和管理 Guestbook 应用
2025-07-08 04:32:11作者:江焘钦
前言
OpenKruise 是一个强大的 Kubernetes 扩展套件,提供了多种增强型工作负载控制器。其中 CloneSet 是一个高效的无状态应用管理控制器,相比原生的 Deployment 提供了更多高级特性。本文将带您通过一个完整的 Guestbook 示例应用,深入体验 CloneSet 的核心功能。
CloneSet 核心优势
在开始实践前,我们先了解 CloneSet 的几个关键优势:
- 精确的扩缩容控制:可以指定要删除的具体 Pod
- 灵活的升级策略:支持分区升级和最大不可用设置
- 高效的 Pod 管理:提供比 Deployment 更细粒度的控制
环境准备
确保您已经具备以下环境:
- 运行中的 Kubernetes 集群(v1.16+)
- 已安装 OpenKruise 组件
- kubectl 命令行工具
部署 Guestbook 应用
我们将部署一个完整的 Guestbook 应用,包含前端和 Redis 后端。
1. 部署 Redis 服务
Redis 作为 Guestbook 的后端存储,我们使用 CloneSet 部署主从架构:
kubectl apply -f cloneset-redis.yaml
这个命令会创建:
- 1 个 Redis master 实例
- 2 个 Redis slave 实例
- 对应的 Service 资源
2. 部署 Guestbook 前端
Guestbook 前端是一个 Web 应用,我们将部署 20 个副本:
kubectl apply -f cloneset-guestbook.yaml
验证部署状态
使用以下命令检查 CloneSet 状态:
kubectl get cloneset
或简写为:
kubectl get clone
预期输出应显示所有 Pod 都处于 READY 状态。
访问 Guestbook 应用
获取前端服务的访问地址:
kubectl get svc guestbook-clone-svc
找到 EXTERNAL-IP 字段,通过浏览器访问 http://<EXTERNAL-IP>:3000
即可看到留言板界面。
应用扩缩容实战
扩容操作
将 Guestbook 前端从 20 个副本扩展到 25 个:
kubectl scale --replicas=25 clone guestbook-clone
精确缩容
CloneSet 支持精确控制要删除的 Pod。编辑 CloneSet 配置:
spec:
replicas: 22
scaleStrategy:
podsToDelete:
- guestbook-clone-k9796
- guestbook-clone-nkn52
- guestbook-clone-w9qgl
这种方式在需要保留特定 Pod 时非常有用。
应用升级策略
分区升级
CloneSet 支持金丝雀发布模式。我们先更新部分 Pod:
spec:
template:
spec:
containers:
- name: guestbook
image: openkruise/guestbook:v2
updateStrategy:
partition: 15
maxUnavailable: 20%
这表示:
- 保留 15 个旧版本 Pod 不更新
- 最多 20% 的 Pod 可以同时不可用
全量升级
当金丝雀验证通过后,完成全量升级:
spec:
updateStrategy:
partition: 0
maxUnavailable: 10
这会:
- 更新所有剩余 Pod
- 允许最多 10 个 Pod 同时不可用(加快升级速度)
清理资源
完成实验后,删除所有资源:
kubectl delete -f cloneset-guestbook.yaml
kubectl delete -f cloneset-redis.yaml
总结
通过本教程,您已经掌握了:
- 使用 CloneSet 部署多组件应用
- 精确控制应用扩缩容
- 实现金丝雀发布和全量升级
- 监控和管理应用状态
CloneSet 的这些特性使其成为生产环境中管理无状态应用的理想选择,特别是需要精细控制发布流程的场景。