资讯动态

eksctl 使用指南:通过 EKS Capabilities 一键部署 ACK、KRO 与 ArgoCD 托管组件

发布时间:2026/10/17 18:35:01 来源:尧图企业网站定制
云原生容器编排DevOps【免费下载链接】eksctlThe official CLI for Amazon EKS项目地址https://gitcode.com/gh_mirrors/ek/eksctl点击查看免费下载导读EKS Capabilities 是 Amazon EKS 提供的一项托管能力允许用户通过 EKS API 直接安装与管理云原生工具把 AWS Controllers for KubernetesACK、Kubernetes Resource OptimizerKRO和 ArgoCD 这类常用组件的部署与运维交给 EKS 托管从而省去自行安装、升级与打补丁的负担。作为 EKS 的官方 CLIeksctl 为该特性提供了完整的create/get/update/delete capability命令集与 ClusterConfig 配置支持。阅读本文后你将掌握在集群创建时或创建后通过配置文件或 CLI 参数声明 Capability、为 Capability 配置 IAM 角色与 EKS 访问策略、完成 ArgoCD 与 AWS Identity Center 的集成以及如何查询、更新、删除与排障 Capability。EKS Capabilities 是什么EKS Capabilities 允许用户通过 EKS API 在集群上安装和管理云端原生化工具。它提供了一条简化路径像 ACK、KRO、ArgoCD 这类常用工具可以由 Amazon EKS 全托管地完成部署与配置。在 eksctl 中Capability 作为 ClusterConfig 的一级配置段存在其类型定义位于 pkg/apis/eksctl.io/v1alpha5/capability.go。从源码结构看一个 Capability 的核心字段包括nameCapability 名称必填typeCapability 类型必填取值 ACK / KRO / ARGOCDroleArnIAM 角色 ARN可选未提供时由 eksctl 自动创建角色deletePropagationPolicy删除传播策略RETAIN 或 DELETE默认 RETAINconfigurationCapability 专属配置目前仅 ARGOCD 类型使用tags用于标记 AWS 资源的键值对accessPolicies需要关联到该 Capability 的 EKS 访问策略列表attachPolicyARNs需要附加的 IAM 策略 ARN 列表attachPolicy内联 IAM 策略文档permissionsBoundary权限边界策略的 ARN。支持的 Capability 类型eksctl 支持以下三种 Capability 类型ACKAWS Controllers for Kubernetes通过 Kubernetes 原生方式管理 AWS 服务例如在集群中直接声明 S3 桶、RDS 实例等 AWS 资源KROKubernetes Resource Optimizer用于资源优化与管理的控制器例如在集群中基于 KRO 运行 Instance Kinds 与 Instance Groups 等能力ARGOCDArgoCD GitOps用于持续部署与应用管理的 GitOps 工具可结合 AWS Identity CenterIDC实现基于 SSO 身份的 RBAC 登录。需要特别注意的是ARGOCD 类型的校验逻辑最严格。在 capability.go 的Validate()中若类型为ARGOCD则必须提供configuration.argocd且其中必须包含awsIdc配置否则配置校验直接失败。创建 Capability通过配置文件创建最推荐的用法是在 ClusterConfig 中声明capabilities段并配合 EKS Auto ModeautoModeConfig.enabled: true使用。仓库中的官方示例 examples/47-auto-mode-with-ack-kro-capabilities.yaml 展示了 ACK 与 KRO 的典型组合apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-capability-1 region: ap-northeast-2 # Enable EKS Auto Mode autoModeConfig: enabled: true # Capabilities configuration capabilities: # AWS Controllers for Kubernetes (ACK) - with existing role - name: ack-capability type: ACK # roleArn: arn:aws:iam::123456789012:role/ACK-S3-Controller-Role #optional, eksctl will create the role deletePropagationPolicy: RETAIN attachPolicyARNs: - arn:aws:iam::aws:policy/AdministratorAccess tags: Environment: dev Team: platform # Kubernetes Resource Optimizer (KRO) - with auto-created role - name: kro-capability type: KRO deletePropagationPolicy: RETAIN accessPolicies: # Attached after AE is created by EKS Capability - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster tags: Environment: production Team: platform在集群创建过程中一并创建 Capabilityeksctl create cluster -f config.yaml或在集群创建完成后仅针对现有集群创建 Capabilityeksctl create capability -f config.yaml从 pkg/ctl/create/capability.go 的实现可以看到doCreateCapability会优先读取配置文件中的Capabilities列表只有未提供配置文件或其中没有 capabilities 段时才会退化为使用命令行参数构建单个 Capability。因此一份配置文件中可以同时声明多个 Capability它们会被放入并行任务树执行。通过 CLI 参数创建不写配置文件时可以使用命令行的方式eksctl create capability \ --cluster my-cluster \ --name ack-capability \ --type ACK \ --attach-policy-arns arn:aws:iam::aws:policy/AdministratorAccess \ --tags Environmentdev,Teamplatformcreate capability支持的 Flags见 pkg/ctl/create/capability.goFlag说明默认值--nameCapability 名称必填--type类型取值 ACK / KRO / ARGOCD必填--role-arn复用已有 IAM 角色 ARN空自动创建角色--delete-propagation-policyRETAIN 或 DELETERETAIN--tags键值对标签无--attach-policy-arns要附加的 IAM 策略 ARN 列表无--attach-policy内联 IAM 策略 JSON 字符串无需要注意accessPolicies目前只能通过配置文件设置。另外根据 pkg/ctl/cmdutils/capability.go 的校验逻辑name、type、role-arn、delete-propagation-policy、tags这些参数与配置文件互斥不可同时混用。创建流程的底层实现创建 Capability 时 eksctl 实际做了三件事见 pkg/actions/capability/creator.go检查集群状态ensureClusterReady会读取集群状态若集群处于CREATING、DELETING或FAILED状态则拒绝创建按需创建 IAM 角色若未指定roleArn先通过 CloudFormation 创建一个 IAM Role Stack命名形如eksctl-cluster-capability-role-hashhash 由 Capability 名称经 SHA-1 计算并 base32 编码得到创建 Capability通过 CloudFormation 的AWS::EKS::Capability资源创建Stack 命名形如eksctl-cluster-capability-hash。如果配置了accessPoliciesCapability 创建完成后eksctl 会以 10 秒间隔轮询ListAccessEntries等待 EKS 为 Capability 角色自动生成 Access Entry超时 5 分钟随后调用AssociateAccessPolicy把访问策略关联到该 Access Entry见 creator.go。CloudFormation 资源的具体渲染逻辑位于 pkg/cfn/builder/capability.go。ArgoCD 的专用配置ARGOCD 类型需要额外的 AWS Identity CenterIDC集成配置。完整示例可参考 examples/48-auto-mode-with-argocd-capabilities.yamlcapabilities: - name: argocd-gitops type: ARGOCD deletePropagationPolicy: RETAIN attachPolicyARNs: - arn:aws:iam::aws:policy/AdministratorAccess accessPolicies: - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster configuration: argocd: namespace: argocd awsIdc: idcInstanceArn: arn:aws:sso:::instance/ssoins-SSO Instance ID idcRegion: us-west-2 # networkAccess: # Need the VPC endpoint to be pre-povisioned # vpceIds: # - vpce-1234567890abcdef0 rbacRoleMappings: - role: ADMIN identities: - id: 38414300-1041-708a-01af-abc123defg # AWS IDC USER ID type: SSO_USER - id: 08017340-8041-7093-3ffa-abc123defg # AWS IDC GROUP ID type: SSO_GROUP tags: Environment: production Team: platformArgoCD 配置项说明对应结构体定义见 capability.go各配置项如下namespaceArgoCD 安装的 Kubernetes 命名空间可选默认argocdawsIdcAWS Identity Center 配置ARGOCD 类型必填idcInstanceArnIDC 实例的 ARN必填idcRegionIDC 实例所在区域可选networkAccess网络访问配置可选vpceIds用于私有访问的 VPC 终端节点 ID 列表需预先创建好 VPC EndpointrbacRoleMappingsArgoCD 的 RBAC 角色映射可选roleArgoCD 角色取值ADMIN、EDITOR、VIEWERidentities要映射到该角色的 SSO 身份列表type取值为SSO_USER或SSO_GROUP。在 CloudFormation 渲染时pkg/cfn/builder/capability.go上述配置会被转换为AWS::EKS::Capability的Configuration属性且awsIdc.idcInstanceArn与idcRegion会一并下发供 EKS 侧完成 ArgoCD 与 IDC 的对接。IAM 配置Capability 的 IAM 角色有三种配置方式均由roleArn、attachPolicyARNs、attachPolicy、permissionsBoundary四个字段组合表达。复用已有 IAM 角色直接指定角色 ARNeksctl 不会创建新角色capabilities: - name: my-capability type: ACK roleArn: arn:aws:iam::123456789012:role/MyCapabilityRole自动创建 IAM 角色并附加策略不指定roleArn由 eksctl 通过 CloudFormation 自动创建角色IAMRoleResourceSetForCapability见 pkg/cfn/builder/iam.go并附加以下策略capabilities: - name: my-capability type: ACK attachPolicyARNs: - arn:aws:iam::aws:policy/AdministratorAccess - arn:aws:iam::123456789012:policy/MyCustomPolicy使用内联策略把策略文档直接写在配置中capabilities: - name: my-capability type: ACK attachPolicy: Statement: - Effect: Allow Action: - s3:GetObject - s3:PutObject Resource: arn:aws:s3:::my-bucket/*对应的 CLI 方式为传入 JSON 字符串parseAttachPolicy会将其解析后写入capability.AttachPolicy见 pkg/ctl/create/capability.goeksctl create capability \ --cluster my-cluster \ --name my-capability \ --type ACK \ --attach-policy {Statement:[{Effect:Allow,Action:[s3:GetObject],Resource:*}]}关联 EKS 访问策略Access PoliciesaccessPolicies用于把 EKS 访问策略关联到 Capability 角色对应的 Access Entry支持集群级与命名空间级两种访问范围capabilities: - name: my-capability type: KRO accessPolicies: - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy accessScope: type: namespace namespaces: [default, kube-system]注意一个时序细节Access Policy 是在 EKS 为 Capability 创建好 Access Entry 之后才被关联的源码注释与实现见 creator.go因此在创建刚完成的一小段时间内策略可能尚未生效这是正常行为。查看 Capability列出集群内全部 Capabilityeksctl get capabilities --cluster my-cluster查看单个 Capabilityeksctl get capability --cluster my-cluster --name my-capability指定输出格式eksctl get capabilities --cluster my-cluster --output yaml eksctl get capabilities --cluster my-cluster --output json默认表格输出包含四列NAME、TYPE、STATUS、VERSION见 pkg/ctl/get/capability.go。从 pkg/actions/capability/getter.go 的实现可以看到get capabilities先调用 EKS 的ListCapabilities获取名称列表再对每个名称调用DescribeCapability拉取状态与版本信息而get capability --name则直接只查询单个对象。更新 Capability更新 Capability 目前推荐通过配置文件进行eksctl update capability -f config.yaml更新流程由 pkg/actions/capability/updater.go 驱动它构造UpdateCapability请求可更新roleArn、deletePropagationPolicy以及 ArgoCD 的configuration包括vpceIds与rbacRoleMappings随后以 15 秒间隔轮询DescribeCapability直到 Capability 状态变为ACTIVE超时 15 分钟。update capability同样支持--name、--type、--role-arn、--tags、--attach-policy-arns、--attach-policy等命令行参数见 pkg/ctl/update/capability.go。删除 Capability按名称删除单个 Capabilityeksctl delete capability --cluster my-cluster --name my-capability或按配置文件批量删除eksctl delete capability -f config.yaml删除逻辑位于 pkg/actions/capability/remover.go它先从 CloudFormation 中列出 Capability Stackeksctl-cluster-capability-*与对应的 IAM Role Stackeksctl-cluster-capability-role-*按 Capability 名称过滤后并行执行DeleteStackSync。值得一提的细节是当传入的 capabilities 列表为空即集群删除场景时Remover 会扫描所有带 Capability 标签的 Stack 一并清理确保eksctl delete cluster时不会遗留 Capability 资源。公共配置项与删除传播策略公共配置项汇总所有 Capability 类型均支持以下公共选项配置项必填说明name是Capability 唯一名称type是ACK、KRO 或 ARGOCDroleArn否IAM 角色 ARN未提供且未给出策略时需注意deletePropagationPolicy否RETAIN 或 DELETE默认 RETAINtags否标记 AWS 资源的键值对accessPolicies否要关联的 EKS 访问策略attachPolicyARNs否要附加的 IAM 策略 ARN 列表attachPolicy否内联 IAM 策略文档permissionsBoundary否权限边界策略 ARN删除传播策略Delete Propagation Policy该策略决定 Capability 被删除时其承载资源如何处理RETAIN默认删除 Capability 后保留其创建的资源。适合需要保留 ACK 管理的 AWS 资源、或 ArgoCD 应用数据的场景DELETE删除 Capability 时一并移除全部相关资源。使用前提目标 EKS 集群必须处于ACTIVE状态CREATING、DELETING、FAILED状态下 eksctl 会直接拒绝创建见 creator.goARGOCD 类型需要预先配置好 AWS Identity CenterIDC实例若配置networkAccess.vpceIdsVPC 终端节点必须预先创建完成需要具备足够的 IAM 权限以创建角色与策略自动创建角色场景。完整示例完整 ACK Capability 示例apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: ack-cluster region: us-west-2 autoModeConfig: enabled: true capabilities: - name: s3-controller type: ACK deletePropagationPolicy: RETAIN attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonS3FullAccess accessPolicies: - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster tags: Service: s3-controller Environment: production ManagedBy: eksctl完整 ArgoCD Capability 示例apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: gitops-cluster region: us-west-2 autoModeConfig: enabled: true capabilities: - name: argocd-gitops type: ARGOCD deletePropagationPolicy: RETAIN attachPolicyARNs: - arn:aws:iam::aws:policy/ReadOnlyAccess accessPolicies: - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster configuration: argocd: namespace: argocd-system awsIdc: idcInstanceArn: arn:aws:sso:::instance/ssoins-1234567890abcdef idcRegion: us-west-2 rbacRoleMappings: - role: ADMIN identities: - id: admin-user-id type: SSO_USER - role: VIEWER identities: - id: readonly-group-id type: SSO_GROUP tags: Application: argocd Environment: production常见问题与排障常见问题集群未就绪确保集群处于ACTIVE状态再创建 Capability其他状态会被 eksctl 校验拦截IAM 权限不足自动创建角色与策略的场景需要调用者具备相应的 IAM 权限否则 CloudFormation 会失败ArgoCD 配置错误确认idcInstanceArn正确且可访问ARGOCD 类型缺少configuration.argocd.awsIdc会直接导致配置校验失败见 capability.go访问策略未立即生效Access Policies 是在 EKS 创建 Access Entry 之后才被关联的创建刚完成时可能需要稍等片刻。查看 Capability 状态监控 Capability 的创建与状态eksctl get capabilities --cluster my-cluster需要更详细的资源信息时可以查看 eksctl 创建的 CloudFormation Stack命名格式为eksctl-cluster-capability-hash其中 hash 由 Capability 名称生成见 creator.goaws cloudformation describe-stacks --stack-name eksctl-my-cluster-capability-hash延伸阅读类型定义与校验逻辑pkg/apis/eksctl.io/v1alpha5/capability.go创建/查询/更新/删除动作实现pkg/actions/capability/CLI 命令实现pkg/ctl/create/capability.go、pkg/ctl/get/capability.go、pkg/ctl/update/capability.go、pkg/ctl/delete/capability.goCloudFormation 资源渲染pkg/cfn/builder/capability.go官方示例配置examples/47-auto-mode-with-ack-kro-capabilities.yaml、examples/48-auto-mode-with-argocd-capabilities.yaml集群的 Auto Mode 配置说明examples/42-auto-mode.yaml赞分享云原生容器编排DevOps【免费下载链接】eksctlThe official CLI for Amazon EKS项目地址https://gitcode.com/gh_mirrors/ek/eksctl点击查看免费下载相关推荐withoutbg-python CLI命令行工具完全指南终端中的高效背景移除神器withoutbg python CLI命令行工具完全指南终端中的高效背景移除神器 想要在终端中快速移除图片背景吗withoutbg python CLI工文档教程知识库如何在EKS/AKS上一键部署KubeSphere托管K8s服务集成终极指南如何在EKS/AKS上一键部署KubeSphere托管K8s服务集成终极指南 KubeSphere是一款专为Kubernetes多云、数据中心和边缘管理量身定云原生容器编排后端微服务多集群DevOps可观测性AI 技能eksctl 0.33.0 发布解析EKS 托管 Addon 支持与托管节点组 Spot 实例eksctl 0.33.0 发布解析EKS 托管 Addon 支持与托管节点组 Spot 实例 导读 本文围绕 eksctl 0.33.0 版本的两大核心特性云原生容器编排DevOps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑