SuperAPI AI 工具集

ack-resources

部署与运维

查看项目

更新于 10-15 10:52

技能介绍

用途

ACK 用于以 Kubernetes 原生方式管理 AWS 资源。它通过自定义资源定义(CRD)和控制器扩展 Kubernetes API,让用户使用熟悉的 kubectl 命令与 GitOps 工作流来创建、更新和删除 AWS 资源。

架构模式为:Git(清单)→ ArgoCD/Flux → Kubernetes(ACK CRD)→ AWS API → AWS 资源,并伴随持续协调(Continuous Reconciliation)。

关键特征:Kubernetes 原生(使用标准 CRD 和 operator 模式);直接 API 集成(直接调用 AWS API,而非 CloudFormation);模块化(只安装所需的服务控制器);GitOps 优先(面向声明式基础设施管理);多账户(支持跨账户资源管理 CARM)。

适用场景

资料明确列出适合的场景:EKS 工作负载需要 AWS 服务(如应用需要 RDS 数据库、S3 存储桶、SQS 队列,统一控制应用及其基础设施依赖);GitOps 基础设施工作流(版本控制 AWS 基础设施,基于 PR 的审查,ArgoCD/Flux 自动同步);自助式开发者平台(开发者通过 kubectl 预置 AWS 资源,基于命名空间的 RBAC,平台团队定义策略与配额);多账户/多租户环境(不同团队/命名空间映射到不同 AWS 账户,集中控制面与隔离资源,按命名空间/账户分摊成本)。

不适合的场景:多云基础设施(ACK 仅支持 AWS,多云建议用 Crossplane);需要全面 AWS 覆盖(仅有 14+ 个 GA 控制器,建议用 Terraform 获得更广覆盖);非 Kubernetes 环境(需要 Kubernetes 集群);仅需稳定生产 API(许多控制器仍处于 alpha 即 v1alpha1)。

主要能力

支持通过 Kubernetes 清单定义 AWS 资源,用 kubectl 管理 AWS 基础设施,为应用与基础设施实现端到端 GitOps,利用 Kubernetes RBAC 控制 AWS 资源访问,自动协调期望状态与实际状态之间的漂移,以及无需重建地纳入已有 AWS 资源。

已正式发布(GA)的控制器(2025)包括:Amazon S3(s3-controller)、Amazon RDS(rds-controller)、Amazon DynamoDB(dynamodb-controller)、Amazon SQS(sqs-controller)、Amazon SNS(sns-controller)、AWS Lambda(lambda-controller)、Amazon ECR(ecr-controller)、Amazon EKS(eks-controller)、Amazon EC2(ec2-controller)、AWS IAM(iam-controller)、Amazon EFS(efs-controller)、Amazon ElastiCache(elasticache-controller)、Amazon MSK(msk-controller)、API Gateway V2(apigatewayv2-controller)、Amazon SageMaker(sagemaker-controller)、Amazon Athena(athena-controller)。其他控制器处于预览/测试阶段。

使用方式

安装控制器: 前置条件为 EKS 集群(Kubernetes 1.16+)、配置好的 kubectl、Helm 3.8+、AWS CLI。步骤包括:为 EKS 集群启用 IRSA(通过 eksctl 关联 IAM OIDC 提供程序);为控制器创建 IAM 策略;用 IRSA 创建 IAM 角色;通过 Helm 安装控制器(如 helm install ack-s3-controller oci://public.ecr.aws/aws-controllers-k8s/s3-chart --version=v0.1.7 --namespace ack-system --create-namespace --set=aws.region=us-east-1 --set=serviceAccount.create=false --set=serviceAccount.name=ack-s3-controller);验证安装(检查 ack-system 命名空间中的 Pod 与已安装的 CRD)。

创建资源: 通过 Kubernetes 清单定义 AWS 资源,例如 S3 Bucket、RDS PostgreSQL 实例、SQS 队列,然后 kubectl apply -f 并查看状态。

引用与导出资源值: 方式一为跨资源引用(在 *Ref 字段中引用另一 ACK 资源);方式二为字段导出(FieldExport),将 ACK 资源值导出到 ConfigMap/Secret 供工作负载使用。

纳入已有资源: 通过 AdoptedResource 导入在 ACK 之外创建的现有 AWS 资源,无需重建,实现零停机与渐进式迁移,保留现有配置。

GitOps 集成: 通过 ArgoCD Application 或 Flux Kustomization 管理 ACK 资源。工作流为:开发者在 Git 中创建/修改 ACK 资源,提交 PR 审查,合并到 main 触发同步,ACK 控制器创建/更新 AWS 资源,持续协调保证一致性。示例中注意 prune: false 作为安全设置,避免自动删除 AWS 资源。

跨账户管理(CARM): 创建账户角色映射的 ConfigMap,为命名空间标注账户 ID,随后部署的资源将使用该命名空间对应的账户。

故障排查: 查看资源状态与状态条件(ACK.ResourceSynced、ACK.Terminal、ACK.Recovering),查看控制器日志。常见问题包括资源卡在 pending(IAM 权限缺失、AWS API 限流、配置无效)、漂移协调失效、跨账户资源失败。

生产最佳实践

删除策略:通过注解 services.k8s.aws/deletion-policy: retain 保留资源,策略层级为资源注解 > 命名空间注解 > 控制器标志,取值 delete(默认,删除)与 retain(保留)。密钥管理:不要明文存储密码,使用 Kubernetes Secret,并建议用 External Secrets Operator 结合 AWS Secrets Manager 实现轮换。IAM 最小权限:为每个控制器授予最小必需权限。资源配额:用 ResourceQuota 限制每命名空间可创建的资源数量。监控:为 ACK 控制器启用 Prometheus 指标(如 ack_resource_reconcile_duration_seconds、ack_resource_reconcile_errors_total、ack_resource_synced)。高可用:运行多个控制器副本并启用 leader election。

限制

ACK 仅支持 AWS;已正式发布的控制器数量有限(14+ 个 GA 控制器);许多控制器仍处于 alpha(v1alpha1);需要 Kubernetes 集群;与 Terraform 相比,ACK 更新,云支持仅限 AWS,而 Terraform 支持多云(AWS、Azure、GCP 等 300+ 提供者),范式上 ACK 为 Kubernetes 原生持续协调,Terraform 为基于状态的 apply 驱动,成熟度上 ACK 较新且许多 API 处于 alpha。资料中关于 ACK 与 Terraform 对比表格的后续内容被截断,未完整提供。