帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
EKS 托管型 kro 注意事项
本主题旨在介绍使用 EKS 托管型 kro 的重要注意事项,包括资源组合编排的适用场景、RBAC 配置模式以及与其他 EKS 托管功能的集成方法。
kro 的适用场景
kro 旨在创建可复用的基础设施模式与自定义 API,以简化复杂的资源管理工作。
需要使用 kro 的场景:
-
为应用团队构建带有简化 API 的自助式平台
-
在团队间统一基础设施模式(如数据库 + 备份 + 监控的组合)
-
管理资源间的依赖关系,并实现资源间的值传递
-
构建自定义抽象资源,隐藏底层的实现复杂度
-
将多个 ACK 资源组合为更高级别的基础设施组件
-
为复杂的基础设施栈启用 GitOps 工作流程
无需使用 kro 的场景:
-
管理简单的独立资源(直接使用 ACK 或 Kubernetes 原生资源)
-
需要动态运行时逻辑(kro 为声明式框架,不支持命令式操作)
-
资源之间不存在依赖关系或共享配置
kro 的优势在于构建标准化部署流程,即提供预设规则、可复用模式,帮助各团队轻松、合规地部署复杂的基础设施。
RBAC 模式
kro 可实现职责分离,将创建 ResourceGraphDefinition 的平台团队与创建实例的应用团队的工作边界清晰划分。
平台团队职责
平台团队负责创建并维护用于定义自定义 API 的 ResourceGraphDefinition(RGD)。
所需权限:
-
创建、更新、删除 ResourceGraphDefinition
-
管理各类底层资源(Deployment、Service、ACK 资源)
-
拥有 RGD 待使用的所有命名空间的访问权限
平台团队的 ClusterRole 示例:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: platform-kro-admin rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["*"] - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]
有关 RBAC 配置的详细信息,请参阅配置 kro 权限。
应用团队职责
应用团队负责创建由 RGD 定义的自定义资源实例,无需理解底层实现的复杂逻辑。
所需权限:
-
创建、更新、删除自定义资源实例
-
拥有其所在命名空间的读取权限
-
不授予底层资源或 RGD 的访问权限
优点:
-
团队可直接使用简洁的高层级 API
-
平台团队把控底层实现细节
-
降低配置错误的风险加快
-
新团队成员的上手速度
与其他 EKS 功能集成
ACK 资源组合编排
kro 与 ACK 结合使用时,在创建基础设施模式方面的能力尤为突出。
常见模式:
-
带存储功能的应用程序:S3 存储桶 + SQS 队列 + 通知配置
-
数据库资源栈:RDS 实例 + 参数组 + 安全组 + Secrets Manager 密钥
-
联网资源:VPC + 子网 + 路由表 + 安全组 + NAT 网关
-
带存储功能的计算资源:EC2 实例 + EBS 卷 + IAM 实例配置文件
kro 会自动处理资源的依赖顺序、实现资源间的值传递(如 ARN、连接字符串),并将所有资源作为单一单元进行全生命周期管理。
有关 ACK 资源组合编排的示例,请参阅 ACK 概念。
将 Argo CD 与 GitOps 搭配使用
借助适用于 Argo CD 的 EKS 功能,可从 Git 存储库中部署 RGD 及实例。
存储库组织方式:
-
平台存储库:存放由平台团队管理的 ResourceGraphDefinition
-
应用存储库:存放由应用团队管理的自定义资源容器实例
-
共享存储库:小型组织可将 RGD 与实例存放于同一存储库
注意事项:
-
需先部署 RGD,再部署实例(可借助 Argo CD 的同步波功能实现)
-
为平台团队与应用团队分别配置独立的 Argo CD 项目
-
由平台团队管控 RGD 存储库的访问权限
-
为应用团队分配 RGD 定义文件的只读访问权限
有关 Argo CD 的更多信息,请参阅使用 Argo CD。
ResourceGraphDefinition 的组织方式
可按照用途、复杂度和归属方对 RGD 进行分类管理。
按用途分类:
-
基础设施:数据库资源栈、联网资源、存储资源
-
应用程序:Web 应用、API 服务、批处理任务
-
平台:共享服务、监控组件、日志组件
按复杂度分类:
-
简单:包含 2-3 个资源,依赖关系极少
-
中等:包含 5-10 个资源,存在部分依赖关系
-
复杂:包含 10 个以上资源,依赖关系复杂
命名规范:
-
采用描述性名称,例如:
webapp-with-database、s3-notification-queue -
若存在破坏性变更,可在名称中加入版本号,例如:
webapp-v2 -
为同类型 RGD 添加统一前缀,例如:
platform-、app-
命名空间策略:
-
RGD 为集群级资源(非命名空间级资源)
-
实例为命名空间级资源
-
可在 RGD 中配置命名空间选择器,管控实例允许被创建的命名空间范围
版本控制与更新
需提前规划 RGD 的迭代优化与实例的迁移方案。
RGD 更新:
-
非破坏性变更:直接原地更新 RGD 即可(操作包括新增可选字段、添加带 includeWhen 条件的新资源)
-
破坏性变更:需创建名称不同的新 RGD(例如 webapp-v2)
-
弃用策略:通过注解标记旧版 RGD,并同步告知用户迁移时间规划
实例迁移:
-
基于更新版 RGD 创建新的实例
-
验证新实例运行状态正常
-
删除旧版实例
-
kro 会自动处理底层资源的更新操作
最佳实践
-
RGD 变更需先在非生产环境完成测试
-
有重大变更时,在 RGD 名称中采用语义版本控制命名规则
-
记录破坏性变更内容及对应的迁移方案
-
为应用团队提供可直接参考的迁移示例
验证与测试
将 RGD 部署到生产环境前,需对其进行验证。
验证策略:
-
模式验证:kro 会自动对 RGD 模式进行验证
-
实例试运行:在开发命名空间中创建测试用实例
-
集成测试:验证组合后的各类资源是否能协同正常工作
-
策略强制执行:通过准入控制器落实组织内部的标准规范
需测试的常见问题:
-
资源依赖关系与创建顺序
-
资源间的值传递逻辑(CEL 表达式)
-
条件式资源的包含规则(includeWhen)
-
底层资源的状态反馈机制
-
实例创建操作对应的 RBAC 权限配置
上游文档
有关使用 kro 的详细信息,请参阅以下内容:
后续步骤
-
配置 kro 权限:为平台团队与应用团队配置 RBAC
-
kro 概念:了解 kro 的基本概念及资源生命周期
-
排查 kro 功能问题:诊断并解决 kro 相关问题
-
ACK 概念:了解用于资源组合编排的 ACK 资源
-
使用 Argo CD:通过 GitOps 部署 RGD 及实例