- vừa được xem lúc

Quản lý tài nguyên trên AWS thông qua Kubernetes? - AWS Controller Kubernetes

0 0 8

Người đăng: Hoàng Việt

Theo Viblo Asia

AWS Controller Kubernetes là gì?

AWS Controller for Kubernetes (ACK) là một công cụ quan trọng trong hệ sinh thái của Amazon Web Services (AWS), được thiết kế để cung cấp tích hợp mạnh mẽ giữa Kubernetes và các dịch vụ AWS. Với ACK, người dùng có thể quản lý tài nguyên đám mây của AWS, như S3 buckets, DynamoDB tables, và nhiều dịch vụ khác, trực tiếp 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 sự phân tán của công việc quản lý và tă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.

image.png

Controller trong Kubernetes là gì?

ACK được cài đặt trên Kubernetes cluster và hoạt động như một Kubernetes Controller, vậy nên trước khi tìm hiểu về ACK thì chúng ta nên có hiểu biết cơ bản về Kubernetes Controller làm công việc gì. Mặc định khi cài đặt K8s cluster ta sẽ có các controller như deployment controller, statefulset controller,...

Kubernetes controller hoạt động dựa trên một vòng lặp điều khiển (control loop). Trong vòng lặp này, có ba bước chính: Quan sát (Observe), Phân tích (Analyze), và Hành động (Act).

image.png

  • Quan sát (Observe): Controller đầu tiên quan sát trạng thái hiện tại (Actual State) của hệ thống. Nó lấy thông tin từ cluster Kubernetes để hiểu rõ các thành phần như pod, service, và node đang hoạt động như thế nào.

  • Phân tích (Analyze): Sau khi thu thập thông tin, controller phân tích trạng thái hiện tại và so sánh với trạng thái mong muốn (Desired State). Trạng thái mong muốn được định nghĩa trong các tệp khai báo của Kubernetes (YAML/JSON).

  • Hành động (Act): Nếu phát hiện sự khác biệt giữa trạng thái hiện tại và trạng thái mong muốn, controller sẽ thực hiện các hành động cần thiết để đưa hệ thống về trạng thái mong muốn. Các hành động này có thể bao gồm việc tạo, cập nhật, hoặc xóa các đối tượng Kubernetes như pod, deployment, service, v.v.

Vòng lặp này diễn ra liên tục, đảm bảo rằng hệ thống luôn ở trong trạng thái mong muốn, ngay cả khi có sự thay đổi hoặc sự cố xảy ra.

Ví dụ: Nếu bạn xóa 1 pod trong một deployment có 5 pod thì ngay lập tức controller sẽ tạo một pod mới để đảm bảo deployment đó luôn có đủ 5 pods.

ACK hoạt động thế nào?

Một quá trình triển khai tài nguyên trên AWS thông qua ACK sẽ có các bước như sau:

  1. Người dùng định nghĩa tài nguyên: Người dùng tạo ra một tệp định nghĩa tài nguyên Kubernetes (1), ví dụ như Custom Resource Definition (CRD), để mô tả các tài nguyên AWS cần tạo, chẳng hạn như một S3 bucket.
  2. Gửi yêu cầu tới K8s API server: Tệp định nghĩa tài nguyên được gửi tới kube-apiserver (2) trong Kubernetes Cluster.
  3. Kube-apiserver lưu trữ định nghĩa: Kube-apiserver sẽ lưu trữ thông tin định nghĩa tài nguyên này trong etcd (3), database của K8s.
  4. K8s xác nhận resource được tạo: Thông tin CRD được tạo được gửi về cho user.
  5. ACK-S3-Controller nhận thông tin: ACK-S3-Controller trên worker node (5) nhận thông tin về định nghĩa tài nguyên từ kube-apiserver.
  6. ACK-S3-Controller tạo tài nguyên trên AWS: ACK-S3-Controller tương tác với các dịch vụ AWS (6) để tạo tài nguyên đã định nghĩa, như là một S3 bucket trong ví dụ này.
  7. Cập nhật trạng thái tài nguyên: ACK-S3-Controller sau đó cập nhật trạng thái của tài nguyên trên Kubernetes để phản ánh những thay đổi và trạng thái hiện tại của tài nguyên trên AWS (7).

image.png

Cài đặt ACK thế nào?

Trong tài liệu chính thức của ACK cũng đã giới thiệu rất chi tiết các để cài đặt ACK controller nên mình sẽ không đi chi tiết mà chỉ nói khái quát các bước giúp các bạn có cái hình dung nhanh chóng các thức cài đặt và cấp quyền cho controller giúp ACK có thể tương tác được với AWS API

image.png

  • Bước 1: Bạn có thể cài đặt ACK lên bất cứ cụm K8s nào bằng Helm hoặc manifest files, tuy nhiên khi sử dụng EKS thì việc xác thực sẽ dễ dàng hơn.
  • Bước 2: Tạo OIDC cho cluster của bạn dùng để xác thực
  • Bước 3: Tạo IAM Role và cung cấp quyền tương ứng cho role này phục vụ việc 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 này và tiến hành restart ACK controller để nhận quyền mới.

Lab thử tạo AWS resource

Trong phần lab này mình sẽ hướng dẫn các bạn tạo thử 1 database trên AWS RDS. Để thực hiện được phần này các bạn cần:

  • Đã cài đặt ACK RDS Controller thành công
  • Đã cấp quyền đầy đủ cho Service account mà ACK RDS Controller đang sử dụng

image_2024-07-06_16-33-09.png

Tạo file manifest rds.yaml định nghĩa database có nội dung như sau:

# 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 apply file này ta sẽ có resource DBInstance được tạo trong cụm K8s tại namespace default.

image_2024-07-06_16-49-58.png

Trên AWS Console ta cũng thấy được database đã được tạo với cấu hình đã định nghĩa trong file manifest

image_2024-07-06_16-51-13.png

Để xem trạng thái và logs việc tạo resource này trong trường hợp gặp lỗi bạn có thể describe CRD và chú ý đến phần Status trong resource, hoặc ngoài ra bạn có thể xem log của pod controller.

Như vậy là ta đã thực hiện sử dụng công cụ ACK để tạo được resource trên K8s, cũng khá đơn giản đúng không 😁

Ưu / Nhược điểm công cụ ACK

Ưu điểm

  • Công cụ ACK có thể sử dụng như mô hình GitOps bằng cách tích hợp với Helm và ArgoCD để tự động hóa quá trình cập nhật infra.
  • Hỗ trợ cơ chế giúp đảm bảo hạ tầng luôn giống với trạng thái được định nghĩa trong code. (Tính năng của K8s Controller)
  • Theo mình thấy công việc định nghĩa Infra nếu so sánh với Terraform thì sẽ nhẹ nhàng hơn do có thể sử dụng Helm để đóng gói.

Nhược điểm

  • Nhiều controller có version API beta hoặc Alpha nên có thể chưa ổn định hoặc chưa hỗ trợ đầy đủ cấu hình
  • Mỗi loại tài nguyên muốn tạo trên AWS sẽ yêu cầu một controller riêng biệt để quản lý. Việc này có thể gây tốn tài nguyên và công sức quản lý tất cả controller trong hệ thống.
  • Nhiều tài nguyên chưa được hỗ trợ, thời gian phát triển cũng khá chậm. 🥶

Kết

Bài viết này được viết sau khi mình nghiên cứu về công cụ này trong tầm 1 tuần nên không khỏi có những thiếu sót. Nếu các bạn có câu hỏi gì thì đừng ngần ngại comment ở dưới nhé.

Cám ơn các bạn đã đọc đến đây. Nếu thấy bài viết đem lại giá trị cho bạn thì hãy cho mình 1 Upvote nhé! Have a nice day! 👋🏻

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 60

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 138

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 63

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 80

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 140

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 114