

 **帮助改进此页面** 

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

# 使用 kro（Kube Resource Orchestrator）组合编排资源
<a name="kro"></a>

 **kro（Kube Resource Orchestrator）**是一个 Kubernetes 原生开源项目，支持通过简洁直观的配置来定义自定义 Kubernetes API。借助 kro，您可以轻松配置全新的自定义 API，这些 API 可用于创建一组 Kubernetes 对象，并定义对象之间的逻辑操作。

基于 EKS 功能，kro 由 Amazon 提供全托管服务，无需您在集群中安装、维护和扩缩 kro 控制器。

## kro 工作原理
<a name="_how_kro_works"></a>

kro 引入了一种名为 `ResourceGraphDefinition`（RGD）的自定义资源定义（CRD），支持以简洁高效的方式创建自定义 Kubernetes API。在您创建 `ResourceGraphDefinition` 后，kro 会借助 Kubernetes 原生扩展能力，在集群中创建并管理这些新的 API。基于这份单一的资源规范，kro 会自动根据您的配置创建并注册一个全新的 CRD，同时自适应地管理您所定义的这些新自定义资源。

RGD 可包含多种资源，kro 会自动判断资源间的依赖关系与创建顺序，无需人工干预。您能够通过简单的语法，将配置信息从一个资源注入另一个资源，极大简化了资源组合编排流程，不再需要在集群中部署用于资源衔接的“粘合型”控制器。借助 kro，您所定义的自定义资源既可以包含 Kubernetes 原生资源，也能够兼容集群中已安装的任意自定义资源定义（CRD）。

kro 仅支持一种核心资源类型：
+  **ResourceGraphDefinition (RGD)**：定义一种 Kubernetes 自定义资源，该资源可封装一个或多个底层的 Kubernetes 原生资源或自定义资源

除该核心资源外，kro 还会负责创建并管理由其生成的自定义资源的生命周期，同时管理这些自定义资源所包含的全部组成资源。

kro 可与 Amazon Controllers for Kubernetes（ACK）无缝集成，支持您将工作负载资源与 Amazon 资源进行组合，从而创建更高级别的抽象资源。此能力可帮助您构建专属的云基础设施组件，简化资源管理流程，并能基于企业标准配置默认值与不可变配置项，形成可复用的模式。

## kro 优势
<a name="_benefits_of_kro"></a>

kro 支持平台团队创建自定义 Kubernetes API，将多个资源组合为更高级别的抽象资源。这一能力可以简化资源管理工作，开发者只需通过简洁、标准化且带版本控制的自定义资源，就能完成复杂应用的部署。您可以为常用的资源组合定义可复用模式，在企业内部实现一致化的资源创建流程。

kro 在 [Kubernetes 环境中采用公共表达式语言（CEL）](https://kubernetes.io/docs/reference/using-api/cel/)实现资源间的值传递与条件逻辑配置，让资源组合编排具备更强的灵活性。您既可以组合 Kubernetes 原生资源，也能将 ACK 管理的 Amazon 资源纳入其中，构建出一体化的自定义 API，从而实现应用与基础设施的完整定义。

kro 支持通过 Kubernetes 清单完成声明式配置，可无缝对接 GitOps 工作流程与基础设施即代码实践，与您现有的开发流程深度融合。作为 EKS 托管功能的一部分，kro 由 Amazon 提供全托管服务，无需您在集群中安装、配置和维护 kro 控制器。

 **示例：创建 ResourceGraphDefinition** 

以下示例展示了一个简单的 `ResourceGraphDefinition` 配置，用于创建一个包含 Deployment 和 Service 的 Web 应用：

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

当用户创建 `WebApplication` 自定义资源实例时，kro 会自动生成对应的 Deployment 与 Service 资源，并将其生命周期与自定义资源进行统一管理。

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

kro 与其他 EKS 托管功能集成。
+  **Amazon Controllers for Kubernetes（ACK）**：借助 kro 将 ACK 资源组合为更高级别的抽象资源，简化 Amazon 资源的管理流程。
+  **Argo CD**：通过 Argo CD 管理 kro 自定义资源在多集群的部署，为平台基础设施组件与应用栈启用 GitOps 工作流程。

## kro 入门
<a name="_getting_started_with_kro"></a>

若要开始使用 EKS 托管型 kro，可按照以下步骤操作：

1.  通过 Amazon 控制台、Amazon CLI 或您偏好的基础设施即代码工具，在 EKS 集群上[创建 kro 功能资源](create-kro-capability.md)。

1. 创建 ResourceGraphDefinition（RGD），定义自己的自定义 API 与资源组合编排规则。

1. 应用自定义资源实例，完成底层 Kubernetes 资源与 Amazon 资源的配置和管理。