

 **帮助改进此页面** 

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

# 创建 kro 功能
<a name="create-kro-capability"></a>

本主题旨在介绍如何在 Amazon EKS 集群上创建 kro 功能。

## 先决条件
<a name="_prerequisites"></a>

创建 kro 功能之前，确保满足以下条件：
+ 运行受支持 Kubernetes 版本的现有 Amazon EKS 集群（标准支持与扩展支持范围内的所有版本均适用）
+ 可在 EKS 集群上创建功能资源的充足 IAM 权限
+ （适用于 CLI/eksctl）已安装并配置相应 CLI 工具

**注意**  
与 ACK 和 Argo CD 不同，kro 除信任策略外，无需额外的 IAM 权限。kro 完全在集群中运行，不会发起 AWS API 调用。不过，您仍需提供一个配置了相应信任策略的 IAM 功能角色。有关配置 Kubernetes RBAC 权限的信息，请参阅[配置 kro 权限](kro-permissions.md)。

## 选择工具
<a name="_choose_your_tool"></a>

您可以使用AWS 管理控制台、AWS CLI 或 eksctl 创建 kro 功能：
+  [使用控制台创建 kro 功能](kro-create-console.md)：使用控制台获得引导式体验
+  [使用 AWS CLI 创建 kro 功能](kro-create-cli.md)：使用 AWS CLI 进行脚本编写和自动化
+  [使用 eksctl 创建 kro 功能](kro-create-eksctl.md)：使用 eksctl 获得 Kubernetes 原生体验

## 在创建 kro 功能时会执行的操作
<a name="_what_happens_when_you_create_a_kro_capability"></a>

在创建 kro 功能时：

1. EKS 会创建 kro 功能服务，并配置该服务来监控和管理集群内的资源

1. 自定义资源定义（CRD）将被安装到集群中

1. 系统会使用 `AmazonEKSKROPolicy` 自动为您的 IAM 功能角色创建一个访问条目，该条目授予管理 ResourceGraphDefinitions 及其实例的权限（请参阅 [EKS 功能的安全注意事项](capabilities-security.md)）

1. 该功能会代入您提供的 IAM 功能角色（此角色仅用于信任关系配置）

1. kro 开始监听 `ResourceGraphDefinition` 资源及其对应的实例

1. 功能状态从 `CREATING` 更改为 `ACTIVE` 

功能进入运行状态后，即可创建 ResourceGraphDefinition，以此定义自定义 API，并创建这些 API 对应的实例。

**注意**  
自动创建的访问条目包括授予 kro 管理 ResourceGraphDefinitions 及其实例的权限的 `AmazonEKSKROPolicy`。要允许 kro 创建 ResourceGraphDefinitions 中定义的底层 Kubernetes 资源（例如部署、服务或 ACK 资源），则必须配置额外的访问条目权限。要了解有关访问条目以及如何配置其他权限的更多信息，请参阅 [配置 kro 权限](kro-permissions.md) 和 [EKS 功能的安全注意事项](capabilities-security.md)。

## 后续步骤
<a name="_next_steps"></a>

创建 kro 功能后：
+  [kro 概念](kro-concepts.md)：了解 kro 的基本概念及资源组合编排
+  [kro 概念](kro-concepts.md)：了解 SimpleSchema、CEL 表达式及资源组合编排模式

# 使用控制台创建 kro 功能
<a name="kro-create-console"></a>

本主题旨在介绍如何使用 AWS 管理控制台 创建 kro（Kube Resource Orchestrator）功能。

## 创建 kro 功能
<a name="_create_the_kro_capability"></a>

1. 从以下位置打开 Amazon EKS 控制台：https://console.aws.amazon.com/eks/home\$1/clusters。

1. 选择集群名称，打开集群详细信息页面。

1. 选择**功能**选项卡。

1. 在左侧导航栏中，选择 **kro（Kube Resource Orchestrator）**。

1. 选择**创建 kro 功能**。

1. 对于 **IAM 功能角色**：
   + 如果已有 IAM 功能角色，请从下拉列表中选择该角色
   + 如需创建角色，请选择**创建 kro 角色** 

     此操作会在新选项卡中打开 IAM 控制台，其中包含预填充的信任策略。该角色无需配置额外的 IAM 权限，因为 kro 的所有操作均在集群内部完成。

     创建角色后，返回 EKS 控制台，系统将自动选择该角色。
**注意**  
与 ACK 和 Argo CD 不同，kro 除信任策略外，无需额外的 IAM 权限。kro 完全在集群中运行，不会发起 AWS API 调用。

1. 选择**创建**。

功能创建过程随即开始。

## 验证功能是否处于活动状态
<a name="_verify_the_capability_is_active"></a>

1. 在**功能**选项卡上，查看 kro 功能状态。

1. 等待状态从 `CREATING` 更改为 `ACTIVE`。

1. 变为活动状态后，该功能即可使用。

有关功能状态和问题排查的信息，请参阅[使用功能资源](working-with-capabilities.md)。

## 授予 Kubernetes 资源管理权限
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

当您创建 kro 功能时，系统会使用 `AmazonEKSKROPolicy` 自动创建 EKS 访问条目，该条目允许 kro 管理 ResourceGraphDefinitions 及其实例。但是，默认情况下，不授予任何权限来创建 ResourceGraphDefinitions 中定义的底层 Kubernetes 资源（如部署、服务、ConfigMaps 等）。

这种有意的设计遵循了最低权限原则，即不同的 ResourceGraphDefinitions 需要不同的权限。您必须根据您的 ResourceGraphDefinitions 将管理的资源明确配置 kro 所需的权限。

对于快速入门、测试或开发环境，请使用 `AmazonEKSClusterAdminPolicy`：

1. 在 EKS 控制台中，导航到 EKS 集群的**访问**选项卡。

1. 在**访问条目**下，找到对应 kro 功能角色的条目（将包含之前创建的角色 ARN）。

1. 选择访问条目，打开对应的详细信息页面。

1. 在**访问策略**部分，选择**关联访问策略**。

1. 从策略列表中选择 `AmazonEKSClusterAdminPolicy`。

1. 在**访问范围**中，选择**集群**。

1. 选择**关联 **。

**重要**  
`AmazonEKSClusterAdminPolicy` 会授予宽泛的权限，以创建和管理所有的 Kubernetes 资源，包括能够在所有命名空间中创建任何类型的资源的权限。这便于开发和 POC，但不应在生产环境中使用。在生产环境使用时，请创建自定义 RBAC 策略，仅授予 ResourceGraphDefinition 需管理的特定资源对应的权限。有关配置最低权限的指引，请参阅[配置 kro 权限](kro-permissions.md)和 [EKS 功能的安全注意事项](capabilities-security.md)。

## 验证自定义资源是否可用
<a name="_verify_custom_resources_are_available"></a>

待该功能处于激活状态后，验证 kro 自定义资源是否已在集群中正常可用。

 **使用控制台** 

1. 在 Amazon EKS 控制台中导航至集群

1. 选择**资源**选项卡

1. 选择**扩展** 

1. 选择 **CustomResourceDefinitions** 

您应能看到 `ResourceGraphDefinition` 这一资源类型已被列出。

 **使用 kubectl** 

```
kubectl api-resources | grep kro.run
```

您应能看到 `ResourceGraphDefinition` 这一资源类型已被列出。

## 后续步骤
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md)：了解 kro 的基本概念及资源组合编排
+  [kro 概念](kro-concepts.md)：了解 SimpleSchema、CEL 表达式和组合编排模式
+  [使用功能资源](working-with-capabilities.md)：管理 kro 功能资源

# 使用 AWS CLI 创建 kro 功能
<a name="kro-create-cli"></a>

本主题旨在介绍如何使用 AWS CLI 创建 kro（Kube Resource Orchestrator）功能。

## 先决条件
<a name="_prerequisites"></a>
+  **AWS CLI**：版本 `2.12.3` 或更高版本。要检查版本，请运行 `aws --version`。有关更多信息，请参阅《AWS 命令行界面用户指南》中的[安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。
+  **`kubectl`**：用于与 Kubernetes 集群结合使用的命令行工具。有关更多信息，请参阅 [设置 `kubectl` 和 `eksctl`](install-kubectl.md)。

## 步骤 1：创建 IAM 功能角色
<a name="_step_1_create_an_iam_capability_role"></a>

创建信任策略文件：

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

创建 IAM 角色：

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**注意**  
与 ACK 和 Argo CD 不同，kro 无需额外的 IAM 权限。kro 完全在集群中运行，不会发起 AWS API 调用。只有在与 EKS 功能服务建立信任关系时，才需要该角色。

## 步骤 2：创建 kro 功能
<a name="_step_2_create_the_kro_capability"></a>

在集群上创建 kro 功能资源。将 *region-code* 替换为集群所在的 AWS 区域（例如 `us-west-2`），并将 *my-cluster* 替换为集群的实际名称。

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

命令会立即返回，但是由于 EKS 正在创建所需的功能基础设施和组件，该功能需要一些时间才能变为活动状态。在创建集群时，EKS 将在集群中安装与此功能相关的 Kubernetes 自定义资源定义。

**注意**  
如果收到集群不存在或您没有权限的错误消息，请验证：  
集群名称是否正确
AWS CLI 是否针对正确的区域进行配置
您是否拥有所需的 IAM 权限

## 步骤 3：验证功能是否处于活动状态
<a name="_step_3_verify_the_capability_is_active"></a>

等待功能变为活动状态。将 *region-code* 替换为您的集群所在的 AWS 区域，并将 *my-cluster* 替换为您的集群的名称。

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

当状态显示为 `ACTIVE` 时，表示功能已准备就绪。

您也可以查看完整功能详细信息：

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## 步骤 4：授予 Kubernetes 资源管理权限
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

当您创建 kro 功能时，系统会使用 `AmazonEKSKROPolicy` 自动创建 EKS 访问条目，该条目允许 kro 管理 ResourceGraphDefinitions 及其实例。但是，默认情况下，不授予任何权限来创建 ResourceGraphDefinitions 中定义的底层 Kubernetes 资源（如部署、服务、ConfigMaps 等）。

这种有意的设计遵循了最低权限原则，即不同的 ResourceGraphDefinitions 需要不同的权限。例如：\$1 一个仅创建 ConfigMaps 和密钥的 ResourceGraphDefinition 所需的权限与创建部署和服务所需的权限不同 \$1 创建 ACK 资源的 ResourceGraphDefinition 需要针对这些特定自定义资源的权限 \$1 一些 ResourceGraphDefinitions 可能只是读取现有的资源，而不会创建新的资源

您必须根据您的 ResourceGraphDefinitions 将管理的资源明确配置 kro 所需的权限。

### 快速设置
<a name="_quick_setup"></a>

对于快速入门、测试或开发环境，请使用 `AmazonEKSClusterAdminPolicy`：

获取功能角色的 ARN：

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

关联集群管理员策略：

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**重要**  
`AmazonEKSClusterAdminPolicy` 会授予宽泛的权限，以创建和管理所有的 Kubernetes 资源，包括能够在所有命名空间中创建任何类型的资源的权限。这便于开发和 POC，但不应在生产环境中使用。在生产环境使用时，请创建自定义 RBAC 策略，仅授予 ResourceGraphDefinition 需管理的特定资源对应的权限。有关配置最低权限的指引，请参阅[配置 kro 权限](kro-permissions.md)和 [EKS 功能的安全注意事项](capabilities-security.md)。

## 步骤 5：验证自定义资源是否可用
<a name="_step_5_verify_custom_resources_are_available"></a>

待该功能处于激活状态后，验证 kro 自定义资源是否已在集群中正常可用：

```
kubectl api-resources | grep kro.run
```

您应能看到 `ResourceGraphDefinition` 这一资源类型已被列出。

## 后续步骤
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md)：了解 kro 的基本概念及资源组合编排
+  [kro 概念](kro-concepts.md)：了解 SimpleSchema、CEL 表达式和组合编排模式
+  [使用功能资源](working-with-capabilities.md)：管理 kro 功能资源

# 使用 eksctl 创建 kro 功能
<a name="kro-create-eksctl"></a>

本主题旨在介绍如何使用 eksctl 创建 kro（Kube Resource Orchestrator）功能。

**注意**  
以下步骤需要 eksctl 版本 `0.220.0` 或更高版本。要检查版本，请运行 `eksctl version`。

## 步骤 1：创建 IAM 功能角色
<a name="_step_1_create_an_iam_capability_role"></a>

创建信任策略文件：

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

创建 IAM 角色：

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**注意**  
与 ACK 和 Argo CD 不同，kro 除信任策略外，无需额外的 IAM 权限。kro 完全在集群中运行，不会发起 AWS API 调用。

## 步骤 2：创建 kro 功能
<a name="_step_2_create_the_kro_capability"></a>

使用 eksctl 创建 kro 功能。将 *region-code* 替换为您的集群所在的 AWS 区域，并将 *my-cluster* 替换为您的集群的名称。

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

命令会立即返回，但该功能需要一些时间才能变为活动状态。

## 步骤 3：验证功能是否处于活动状态
<a name="_step_3_verify_the_capability_is_active"></a>

检查功能状态。将 *region-code* 替换为您的集群所在的 AWS 区域，并将 *my-cluster* 替换为您的集群的名称。

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

当状态显示为 `ACTIVE` 时，表示功能已准备就绪。

## 步骤 4：授予 Kubernetes 资源管理权限
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

默认情况下，kro 仅能创建和管理 ResourceGraphDefinition 及其对应的实例。若要允许 kro 创建和管理 ResourceGraphDefinition 中定义的底层 Kubernetes 资源，需将 `AmazonEKSClusterAdminPolicy` 访问策略关联到该功能的访问条目。

获取功能角色的 ARN：

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

关联集群管理员策略：

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**重要**  
`AmazonEKSClusterAdminPolicy` 会授予宽泛的权限，支持创建和管理所有 Kubernetes 资源，该策略的设计目的是简化功能的入门流程。在生产环境使用时，请创建权限范围更严格的 RBAC 策略，仅授予 ResourceGraphDefinition 需管理的特定资源对应的权限。有关配置最低权限的指引，请参阅[配置 kro 权限](kro-permissions.md)和 [EKS 功能的安全注意事项](capabilities-security.md)。

## 步骤 5：验证自定义资源是否可用
<a name="_step_5_verify_custom_resources_are_available"></a>

待该功能处于激活状态后，验证 kro 自定义资源是否已在集群中正常可用：

```
kubectl api-resources | grep kro.run
```

您应能看到 `ResourceGraphDefinition` 这一资源类型已被列出。

## 后续步骤
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md)：了解 kro 的基本概念及资源组合编排
+  [kro 概念](kro-concepts.md)：了解 SimpleSchema、CEL 表达式和组合编排模式
+  [使用功能资源](working-with-capabilities.md)：管理 kro 功能资源