

 **帮助改进此页面** 

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

# 使用 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 功能资源