首页
/ OpenKruise CloneSet 实战教程:部署和管理 Guestbook 应用

OpenKruise CloneSet 实战教程:部署和管理 Guestbook 应用

2025-07-08 04:32:11作者:江焘钦

前言

OpenKruise 是一个强大的 Kubernetes 扩展套件,提供了多种增强型工作负载控制器。其中 CloneSet 是一个高效的无状态应用管理控制器,相比原生的 Deployment 提供了更多高级特性。本文将带您通过一个完整的 Guestbook 示例应用,深入体验 CloneSet 的核心功能。

CloneSet 核心优势

在开始实践前,我们先了解 CloneSet 的几个关键优势:

  1. 精确的扩缩容控制:可以指定要删除的具体 Pod
  2. 灵活的升级策略:支持分区升级和最大不可用设置
  3. 高效的 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

总结

通过本教程,您已经掌握了:

  1. 使用 CloneSet 部署多组件应用
  2. 精确控制应用扩缩容
  3. 实现金丝雀发布和全量升级
  4. 监控和管理应用状态

CloneSet 的这些特性使其成为生产环境中管理无状态应用的理想选择,特别是需要精细控制发布流程的场景。