

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# EKS 托管型 kro 注意事项
<a name="kro-considerations"></a>

本主题旨在介绍使用 EKS 托管型 kro 的重要注意事项，包括资源组合编排的适用场景、RBAC 配置模式以及与其他 EKS 托管功能的集成方法。

## kro 的适用场景
<a name="_when_to_use_kro"></a>

kro 旨在创建可复用的基础设施模式与自定义 API，以简化复杂的资源管理工作。

 **需要使用 kro 的场景**：
+ 为应用团队构建带有简化 API 的自助式平台
+ 在团队间统一基础设施模式（如数据库 \$1 备份 \$1 监控的组合）
+ 管理资源间的依赖关系，并实现资源间的值传递
+ 构建自定义抽象资源，隐藏底层的实现复杂度
+ 将多个 ACK 资源组合为更高级别的基础设施组件
+ 为复杂的基础设施栈启用 GitOps 工作流程

 **无需使用 kro 的场景**：
+ 管理简单的独立资源（直接使用 ACK 或 Kubernetes 原生资源）
+ 需要动态运行时逻辑（kro 为声明式框架，不支持命令式操作）
+ 资源之间不存在依赖关系或共享配置

kro 的优势在于构建标准化部署流程，即提供预设规则、可复用模式，帮助各团队轻松、合规地部署复杂的基础设施。

## RBAC 模式
<a name="_rbac_patterns"></a>

kro 可实现职责分离，将创建 ResourceGraphDefinition 的平台团队与创建实例的应用团队的工作边界清晰划分。

### 平台团队职责
<a name="_platform_team_responsibilities"></a>

平台团队负责创建并维护用于定义自定义 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 权限](kro-permissions.md)。

### 应用团队职责
<a name="_application_team_responsibilities"></a>

应用团队负责创建由 RGD 定义的自定义资源实例，无需理解底层实现的复杂逻辑。

 **所需权限**：
+ 创建、更新、删除自定义资源实例
+ 拥有其所在命名空间的读取权限
+ 不授予底层资源或 RGD 的访问权限

 **优点**：
+ 团队可直接使用简洁的高层级 API
+ 平台团队把控底层实现细节
+ 降低配置错误的风险加快
+ 新团队成员的上手速度

## 与其他 EKS 功能集成
<a name="_integration_with_other_eks_capabilities"></a>

### ACK 资源组合编排
<a name="_composing_ack_resources"></a>

kro 与 ACK 结合使用时，在创建基础设施模式方面的能力尤为突出。

 **常见模式**：
+  **带存储功能的应用程序**：S3 存储桶 \$1 SQS 队列 \$1 通知配置
+  **数据库资源栈**：RDS 实例 \$1 参数组 \$1 安全组 \$1 Secrets Manager 密钥
+  **联网资源**：VPC \$1 子网 \$1 路由表 \$1 安全组 \$1 NAT 网关
+  **带存储功能的计算资源**：EC2 实例 \$1 EBS 卷 \$1 IAM 实例配置文件

kro 会自动处理资源的依赖顺序、实现资源间的值传递（如 ARN、连接字符串），并将所有资源作为单一单元进行全生命周期管理。

有关 ACK 资源组合编排的示例，请参阅 [ACK 概念](ack-concepts.md)。

### 将 Argo CD 与 GitOps 搭配使用
<a name="_gitops_with_argo_cd"></a>

借助适用于 Argo CD 的 EKS 功能，可从 Git 存储库中部署 RGD 及实例。

 **存储库组织方式**：
+  **平台存储库**：存放由平台团队管理的 ResourceGraphDefinition
+  **应用存储库**：存放由应用团队管理的自定义资源容器实例
+  **共享存储库**：小型组织可将 RGD 与实例存放于同一存储库

 **注意事项**：
+ 需先部署 RGD，再部署实例（可借助 Argo CD 的同步波功能实现）
+ 为平台团队与应用团队分别配置独立的 Argo CD 项目
+ 由平台团队管控 RGD 存储库的访问权限
+ 为应用团队分配 RGD 定义文件的只读访问权限

有关 Argo CD 的更多信息，请参阅[使用 Argo CD](working-with-argocd.md)。

## ResourceGraphDefinition 的组织方式
<a name="_organizing_resourcegraphdefinitions"></a>

可按照用途、复杂度和归属方对 RGD 进行分类管理。

 **按用途分类**：
+  **基础设施**：数据库资源栈、联网资源、存储资源
+  **应用程序**：Web 应用、API 服务、批处理任务
+  **平台**：共享服务、监控组件、日志组件

 **按复杂度分类**：
+  **简单**：包含 2-3 个资源，依赖关系极少
+  **中等**：包含 5-10 个资源，存在部分依赖关系
+  **复杂**：包含 10 个以上资源，依赖关系复杂

 **命名规范**：
+ 采用描述性名称，例如：`webapp-with-database`、`s3-notification-queue`
+ 若存在破坏性变更，可在名称中加入版本号，例如：`webapp-v2`
+ 为同类型 RGD 添加统一前缀，例如：`platform- `、`app-`

 **命名空间策略**：
+ RGD 为集群级资源（非命名空间级资源）
+ 实例为命名空间级资源
+ 可在 RGD 中配置命名空间选择器，管控实例允许被创建的命名空间范围

## 版本控制与更新
<a name="_versioning_and_updates"></a>

需提前规划 RGD 的迭代优化与实例的迁移方案。

 **RGD 更新**：
+  **非破坏性变更**：直接原地更新 RGD 即可（操作包括新增可选字段、添加带 includeWhen 条件的新资源）
+  **破坏性变更**：需创建名称不同的新 RGD（例如 webapp-v2）
+  **弃用策略**：通过注解标记旧版 RGD，并同步告知用户迁移时间规划

 **实例迁移**：
+ 基于更新版 RGD 创建新的实例
+ 验证新实例运行状态正常
+ 删除旧版实例
+ kro 会自动处理底层资源的更新操作

 **最佳实践**
+ RGD 变更需先在非生产环境完成测试
+ 有重大变更时，在 RGD 名称中采用语义版本控制命名规则
+ 记录破坏性变更内容及对应的迁移方案
+ 为应用团队提供可直接参考的迁移示例

## 验证与测试
<a name="_validation_and_testing"></a>

将 RGD 部署到生产环境前，需对其进行验证。

 **验证策略**：
+  **模式验证**：kro 会自动对 RGD 模式进行验证
+  **实例试运行**：在开发命名空间中创建测试用实例
+  **集成测试**：验证组合后的各类资源是否能协同正常工作
+  **策略强制执行**：通过准入控制器落实组织内部的标准规范

 **需测试的常见问题**：
+ 资源依赖关系与创建顺序
+ 资源间的值传递逻辑（CEL 表达式）
+ 条件式资源的包含规则（includeWhen）
+ 底层资源的状态反馈机制
+ 实例创建操作对应的 RBAC 权限配置

## 上游文档
<a name="_upstream_documentation"></a>

有关使用 kro 的详细信息，请参阅以下内容：
+  [kro 入门](https://kro.run/docs/guides/getting-started)：创建 ResourceGraphDefinition
+  [CEL 表达式](https://kro.run/docs/concepts/cel)：编写 CEL 表达式
+  [kro 指南](https://kro.run/docs/guides/)：高级组合编排模式
+  [问题排查](https://kro.run/docs/troubleshooting)：问题排查与调试

## 后续步骤
<a name="_next_steps"></a>
+  [配置 kro 权限](kro-permissions.md)：为平台团队与应用团队配置 RBAC
+  [kro 概念](kro-concepts.md)：了解 kro 的基本概念及资源生命周期
+  [排查 kro 功能问题](kro-troubleshooting.md)：诊断并解决 kro 相关问题
+  [ACK 概念](ack-concepts.md)：了解用于资源组合编排的 ACK 资源
+  [使用 Argo CD](working-with-argocd.md)：通过 GitOps 部署 RGD 及实例