メインコンテンツまでスキップ

Amazon EKS Capabilities - ACK, Argo CD, KRO

📌 1. Giới thiệu

Amazon EKS Capabilities là bộ khả năng mở rộng do AWS cung cấp, cho phép triển khai các controller và hệ thống hỗ trợ Kubernetes theo dạng managed service, không cần tự cài đặt và vận hành.

Gồm 3 capability chính:

  • ACK (AWS Controllers for Kubernetes)
  • Argo CD (Managed GitOps)
  • Kube Resource Orchestrator (KRO)

EKS Capabilities


⚙️ 2. ACK - AWS Controllers for Kubernetes

2.1. ACK là gì?

ACK cho phép bạn dùng YAML của Kubernetes để tạo các resource AWS như S3, DynamoDB, SQS, SNS, RDS, ECR và nhiều dịch vụ khác. Giống như Terraform/CloudFormation, nhưng chạy bên trong Kubernetes và dùng chính cơ chế Control Loop của K8S.

EKS ACK

  • Có từng ACK Controller riêng biệt: ACK S3 Controller, ACK DynamoDB Controller, ACK RDS Controller,...
  • Ví dụ cài ACK S3 → có CRD:
    • metadata.name: Tên resource trong Kubernetes
    • spec.name: Tên thật của bucket trên AWS S3
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
name: s3bucket
spec:
name: bucket-name

Các AWS services hỗ trợ tạo bởi ACK: Full list of AWS services supported

2.2. Ưu điểm

  • Kubernetes-native quản lý AWS resource.
  • Tích hợp GitOps dễ dàng (Argo CD / Flux).
  • Có thể adopt tài nguyên AWS đã tồn tại.
  • Không tiêu tốn CPU/RAM của cluster.
  • Không phải lo scale, HA, upgrade.
  • Không phải self-host các ACK controllers như trước (khi cài bằng Helm).

🔄 3. Argo CD Capabilities - GitOps Managed by AWS

3.1. Argo CD Capabilities là gì?

3.1.1. Sơ lược về Argo CD

Argo CD (Argo Continuous Delivery) là một công cụ triển khai liên tục (CD) mã nguồn mở, khai báo và GitOps dành cho Kubernetes. Nó tự động hóa việc triển khai ứng dụng bằng cách đồng bộ hóa trạng thái mong muốn (được định nghĩa trong kho lưu trữ Git) với trạng thái thực tế trong cụm Kubernetes. Argo CD đảm bảo tính nhất quán, khả năng quản lý phiên bản và hỗ trợ UI, CLI cùng nhiều công cụ khác như Helm.

Argo CD cung cấp các tính năng và khả năng chính sau:

  • Triển khai thủ công hoặc tự động các ứng dụng vào cụm Kubernetes.
  • Tự động đồng bộ hóa trạng thái ứng dụng với phiên bản cấu hình khai báo hiện tại.
  • Giao diện người dùng web và giao diện dòng lệnh (CLI).
  • Khả năng hình dung các vấn đề triển khai, phát hiện và khắc phục sự cố cấu hình.
  • Kiểm soát truy cập dựa trên vai trò (RBAC) cho phép quản lý nhiều cụm.
  • Đăng nhập một lần (SSO) với các nhà cung cấp như GitLab, GitHub, Microsoft, OAuth2, OIDC, LinkedIn, LDAP và SAML 2.0.
  • Hỗ trợ webhooks kích hoạt hành động trong GitLab, GitHub và BitBucket.

Link tham khảo: Tìm hiểu thêm về Argo CD

Argo CD

3.1.2. Argo CD Capabilities trên EKS

Capabilities là gì? Nó giống như một module cấu hình mà AWS cung cấp để bạn deploy Argo CD vào EKS đúng chuẩn. Bản chất vẫn là một self-hosted Argo CD, chạy trên cụm Kubernetes giống bất kỳ workload Kubernetes nào. Không phải dạng Managed Argo CD tách rời như RDS, SQS,...

Ví dụ: Tạo một Argo CD application bằng AWS CLI

  • Tạo một trust policy file:
cat > argocd-trust-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "capabilities.eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
EOF
  • Tạo một IAM role:
aws iam create-role \
--role-name ArgoCDCapabilityRole \
--assume-role-policy-document file://argocd-trust-policy.json
  • Tạo Argo CD capability:
Thay thế các giá trị placeholder

Trước khi chạy các lệnh dưới đây, hãy thay thế các giá trị placeholder sau:

  • your-region: Region của AWS (ví dụ: us-west-2, ap-southeast-1)
  • your-cluster: Tên của EKS cluster
  • your-argocd: Tên cho Argo CD capability
  • your-username: Username trong AWS Identity Center
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region 'your-region' --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
--region 'your-region' \
--identity-store-id $(aws sso-admin list-instances --region 'your-region' --query 'Instances[0].IdentityStoreId' --output text) \
--query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
aws eks create-capability \
--region 'your-region' \
--cluster-name 'your-cluster' \
--capability-name 'your-argocd' \
--type ARGOCD \
--role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
--delete-propagation-policy RETAIN \
--configuration '{
"argoCd": {
"awsIdc": {
"idcInstanceArn": "'$IDC_INSTANCE_ARN'",
"idcRegion": "your-region"
},
"rbacRoleMappings": [{
"role": "ADMIN",
"identities": [{
"id": "'$IDC_USER_ID'",
"type": "SSO_USER"
}]
}]
}
}'
  • Verify lại:
aws eks describe-capability \
--region 'your-region' \
--cluster-name 'your-cluster' \
--capability-name 'your-argocd'

3.2. Ưu điểm

  • Managed HA controller.
  • Application, ApplicationSet, AppProject CRD.
  • Sync tự động/rollback.
  • Multi-cluster deployment.
  • Tích hợp AWS Identity Center.

🧩 4. KRO - Kube Resource Orchestrator

4.1. KRO là gì?

KRO cung cấp khả năng tạo blueprint/composition cho resource.

  • Tạo ra Custom Kubernetes APIs (CRDs) theo cách đơn giản
  • Gom nhóm nhiều tài nguyên (Kubernetes native + tài nguyên AWS qua ACK) lại thành một abstraction reusable
  • Quản lý orchestration tự động cho các tài nguyên đó: thứ tự tạo, thiết lập dependency, inject biến...

Tóm lại: Thay vì viết nhiều manifest rải rác, bạn định nghĩa một API tùy chỉnh đại diện cho một “pattern” hoặc “stack” của ứng dụng/infrastructure rồi KRO lo phần còn lại.

KRO

4.2. Cách Hoạt động của KRO

  • Tạo ResourceGraphDefinition (RGD):
    • Đây là tài nguyên cơ bản của KRO, cho phép các nhóm Nền tảng (Platform Teams) định nghĩa một API tùy chỉnh mới
    • Trong RGD, bạn chỉ định một tập hợp các tài nguyên Kubernetes (hoặc tài nguyên Cloud thông qua các CRD của nhà cung cấp Cloud như KCC, ACK, ASO) và cách chúng liên kết, phụ thuộc lẫn nhau.
    • RGD cũng xác định lược đồ (schema) của Custom API mới này, tức là những tham số nào mà người dùng cuối (chẳng hạn như các Nhóm Phát triển) có thể cung cấp khi tạo một phiên bản (instance) của API đó.
  • Tạo Custom API:
    • Khi RGD được áp dụng vào cluster, bộ điều khiển (controller) của KRO sẽ tự động tạo một CRD mới dựa trên định nghĩa đó và đăng ký nó với Kubernetes API server.
    • CRD mới này chính là Custom API mà người dùng cuối sẽ tương tác.
  • Sử dụng (Instantiation):
    • Người dùng cuối (Developer) chỉ cần tạo một instance (thực thể) đơn giản của Custom API mới này (ví dụ: một file YAML ngắn gọn), cung cấp các tham số đã được định nghĩa trong RGD.
    • Bộ điều khiển của KRO sẽ đảm nhận việc phân giải, tạo, và quản lý toàn bộ vòng đời của các tài nguyên Kubernetes phức tạp (Deployment, Service, Ingress, Persistent Volumes, v.v.) đã được đóng gói bên trong, bao gồm cả việc xử lý thứ tự và sự phụ thuộc giữa chúng.

4.3. Tạo KRO capability

  • Tạo trust policy file:
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
  • Tạo IAM role:
aws iam create-role \
--role-name KROCapabilityRole \
--assume-role-policy-document file://kro-trust-policy.json
  • Tạo kro capability:
Thay thế các giá trị placeholder

Trước khi chạy lệnh dưới đây, hãy thay thế các giá trị placeholder sau:

  • your-region: Region của AWS (ví dụ: us-west-2, ap-southeast-1)
  • your-cluster: Tên của EKS cluster
aws eks create-capability \
--region 'your-region' \
--cluster-name 'your-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

4.4. Creating custom APIs using ResourceGraphDefinitions

  • Apply file RGD resourcegraphdefinition-spa.yaml:
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: webapplication
spec:
schema:
apiVersion: v1alpha1
kind: WebApplication
group: kro.run
spec:
name: string | required=true
image: string | default="nginx:1.25"
replicas: integer | default=3
resources:
- id: deployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${schema.spec.name}
spec:
replicas: ${schema.spec.replicas}
selector:
matchLabels:
app: ${schema.spec.name}
template:
metadata:
labels:
app: ${schema.spec.name}
spec:
containers:
- name: app
image: ${schema.spec.image}
ports:
- containerPort: 80
- id: service
template:
apiVersion: v1
kind: Service
metadata:
name: ${schema.spec.name}
spec:
selector:
app: ${schema.spec.name}
ports:
- protocol: TCP
port: 80
targetPort: 80
Quan trọng

KRO xác thực ResourceGraphDefinitions tại thời điểm tạo, chứ không phải trong quá trình chạy. Khi bạn tạo một RGD, KRO sẽ xác thực cú pháp CEL, kiểm tra kiểu dữ liệu của các biểu thức so với lược đồ Kubernetes thực tế, xác minh sự tồn tại của trường và phát hiện các phụ thuộc vòng tròn. Điều này có nghĩa là lỗi được phát hiện ngay lập tức khi bạn tạo RGD, trước khi bất kỳ instance nào được triển khai.

  • Sau khi apply xong RGD thì tạo web application với file app.yaml:
apiVersion: kro.run/v1alpha1
kind: WebApplication
metadata:
name: my-app
spec:
name: my-app
replicas: 5
  • Dựa vào file trên KRO sẽ tự động tạo Deployment và Service theo cấu hình phù hợp.

4.5. Ưu điểm

  • Xây dựng platform API cho developer
  • Tự động hóa tạo stack phức tạp
  • Giảm lỗi do lặp lại manifest
  • Quản lý Tài nguyên nhóm (Grouping and Composition)

📊 5. So sánh nhanh

CapabilitySelf-hosted trên EKSManagedGhi chú
ACKQuản lý infra AWS bằng manifest
Argo CDCD & GitOps
KRO✔ (composition)Tạo API/Blueprint cho dev; có thể làm việc với resource do ACK quản lý

✅ 6. Tổng kết

EKS Capabilities giúp:

  • Giảm vận hành controller
  • Làm GitOps chuẩn
  • Quản lý hạ tầng AWS bằng Kubernetes-native
  • Xây dựng internal developer platform dễ dàng
  • Tích hợp AWS Identity Center

EKS Capabilities phù hợp cho team muốn Platform Engineering, multi-environment GitOps, và quản lý app + infra đồng nhất.

Lưu ý: Cần cân nhắc về chi phí khi sử dụng capabilities.