0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng dẫn Quản lý Tài Nguyên AWS bằng AWS Controller for Kubernetes (ACK)

Đăng vào 1 tháng trước

• 4 phút đọc

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:

  1. 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.
  2. 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.
  3. Lưu trữ thông tin: Kube-apiserver sẽ lưu trữ thông tin này trong etcd database.
  4. 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.
  5. 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.
  6. 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.
  7. 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 Copy
# 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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào