AWS Controller for Kubernetes (ACK) là gì?
AWS Controller for Kubernetes (ACK) là một công cụ quan trọng giúp tích hợp Kubernetes với các dịch vụ của Amazon Web Services (AWS). Với ACK, người dùng có khả năng quản lý tài nguyên đám mây AWS như S3 buckets, DynamoDB tables và nhiều dịch vụ khác ngay từ các định nghĩa Kubernetes Manifest thông qua Custom Resource Definitions (CRDs). Điều này giúp giảm thiểu tình trạng phân tán trong quản lý và tăng cường tính nhất quán trong việc triển khai và vận hành ứng dụng trên Kubernetes và AWS.
Hiểu về Kubernetes Controller
ACK hoạt động trên cụm Kubernetes như một Kubernetes Controller. Trước khi tìm hiểu về ACK, chúng ta cần hiểu rõ về chức năng của Kubernetes Controller. Khi cài đặt K8s cluster, bạn sẽ thấy một số controller như deployment controller, statefulset controller, v.v.
Kubernetes Controller vận hành dựa trên vòng lặp điều khiển với ba bước chính: Quan sát (Observe), Phân tích (Analyze), và Hành động (Act).
- Quan sát (Observe): Controller theo dõi trạng thái hiện tại (Actual State) của hệ thống bằng cách lấy thông tin từ cluster Kubernetes.
- Phân tích (Analyze): So sánh giữa trạng thái thực (Actual State) và trạng thái mong muốn (Desired State) mà được định nghĩa trong tệp khai báo của Kubernetes (YAML/JSON).
- Hành động (Act): Nếu có sự khác biệt, controller sẽ thực hiện các hành động để đưa hệ thống về trạng thái mong muốn, chẳng hạn như tạo, cập nhật hoặc xóa các đối tượng Kubernetes.
Ví dụ: Khi xóa một pod trong một deployment với 5 pod, controller sẽ tự động tạo lại pod mới để đảm bảo đủ số lượng pods.
Cách thức hoạt động của ACK
Quá trình triển khai tài nguyên trên AWS thông qua ACK trải qua các bước như sau:
- Tạo định nghĩa tài nguyên: Người dùng định nghĩa tài nguyên AWS bằng tệp CRD.
- Gửi yêu cầu tới K8s API server: Định nghĩa tài nguyên được gửi tới kube-apiserver trong cụm Kubernetes.
- Lưu trữ thông tin: Kube-apiserver sẽ lưu trữ thông tin này trong etcd database.
- Xác nhận tài nguyên: K8s xác nhận tài nguyên đã được tạo và gửi phản hồi về cho người dùng.
- Nhận thông tin từ API server: ACK-S3-Controller nhận thông tin về định nghĩa tài nguyên từ kube-apiserver.
- Tạo tài nguyên trên AWS: ACK-S3-Controller sẽ tương tác với các dịch vụ AWS để tạo tài nguyên, chẳng hạn như S3 bucket.
- Cập nhật trạng thái: ACK-S3-Controller cập nhật trạng thái của tài nguyên trên Kubernetes để phản ánh thay đổi.
Hướng dẫn cài đặt ACK
Thực hiện theo các bước sau để cài đặt ACK:
- Bước 1: Cài đặt ACK trên cụm K8s của bạn bằng cách sử dụng Helm hoặc manifest files, cùng với đó là việc sử dụng EKS sẽ giúp việc xác thực dễ dàng hơn.
- Bước 2: Tạo OIDC cho cụm của bạn để phục vụ việc xác thực.
- Bước 3: Tạo IAM Role và cấp quyền tương ứng để tạo tài nguyên trên AWS.
- Bước 4: Cho phép service account trên EKS sử dụng IAM Role và khởi động lại ACK controller để nhận quyền mới.
Thực hành tạo tài nguyên AWS
Ở phần này, mình sẽ hướng dẫn bạn cách tạo một database trên AWS RDS. Bạn cần:
- Đã cài đặt thành công ACK RDS Controller.
- Đã cấp quyền đầy đủ cho Service account mà ACK RDS Controller sử dụng.
Tạo file manifest rds.yaml
định nghĩa database với nội dung như sau:
yaml
# Secret
apiVersion: v1
kind: Secret
metadata:
name: mydb-secret
namespace: default
type: Opaque
data:
password: bXktc2VjdXJlLXBhc3N3b3Jk # pass: my-secure-password
---
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBInstance
metadata:
name: ack-rds
namespace: default
spec:
allocatedStorage: 20
autoMinorVersionUpgrade: true
backupRetentionPeriod: 1
backupTarget: region
dbInstanceClass: db.t4g.micro
dbInstanceIdentifier: ack-rds
deletionProtection: false
engine: mysql
engineVersion: 8.0.35
masterUserPassword:
key: password
name: mydb-secret
namespace: default
masterUsername: admin
multiAZ: false
networkType: IPV4
storageType: gp2
Sau khi áp dụng tệp này, tài nguyên DBInstance sẽ được tạo trong cụm Kubernetes tại namespace mặc định. Trên AWS Console, bạn cũng sẽ thấy database đã được tạo ra với cấu hình tương ứng.
Để kiểm tra tình trạng và logs quá trình tạo tài nguyên, bạn có thể mô tả CRD và chú ý đến phần Status hoặc xem log từ pod controller.
Ưu điểm và nhược điểm của công cụ ACK
Ưu điểm
- ACK hỗ trợ mô hình GitOps khi được tích hợp với Helm và ArgoCD để tự động hóa quá trình cập nhật infrastucture.
- Đảm bảo rằng hạ tầng luôn giống với trạng thái được định nghĩa trong mã nguồn.
- Việc định nghĩa infrastructure qua ACK dễ dàng hơn so với Terraform nhờ khả năng sử dụng Helm.
Nhược điểm
- Nhiều controller đang trong giai đoạn beta hoặc alpha, có thể chưa ổn định và chưa đầy đủ tính năng.
- Mỗi loại tài nguyên AWS sẽ yêu cầu một controller riêng, điều này có thể dẫn đến việc tốn tài nguyên và khó khăn trong quản lý.
- Nhiều loại tài nguyên chưa được hỗ trợ, thời gian phát triển chậm.
Kết luận
Bài viết này là kết quả sau một tuần tìm hiểu về công cụ ACK. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại comment. Xin cảm ơn bạn đã theo dõi bài viết. Nếu thấy bài viết hữu ích, hãy cho mình một Upvote nhé! Chúc bạn một ngày tốt lành! 👋🏻
Quảng cáo
Nếu bạn đang gặp khó khăn về chuyên môn hoặc cần hỗ trợ về hệ thống hay DevOps tool, hãy liên hệ với mình qua đường link sau để được hỗ trợ thêm: hoangviet.io.vn.
source: viblo