Wednesday, July 3, 2024

[AWS] Amazon EKS

-

Amazon EKS Overview

Amazon EKS là một dịch vụ của AWS, cho phép triển khai các cụm Kubernetes quản lý trên AWS. Kubernetes là một hệ thống mã nguồn mở để triển khai, mở rộng và quản lý các ứng dụng được đóng gói trong container (thông thường là Docker). EKS cung cấp API cho phép tạo và quản lý các nút tác vụ và nút máy ảo của Kubernetes trên AWS. Nó cho phép triển khai các tác vụ trên các nút tác vụ được quản lý bởi Kubernetes trên các nút máy ảo được quản lý bởi EC2 hoặc serverless container trên Fargate.

EKS được sử dụng trong trường hợp công ty đang sử dụng Kubernetes on-premises hoặc trên một đám mây khác và muốn chuyển sang AWS sử dụng Kubernetes. Kubernetes có thể được sử dụng trong bất kỳ đám mây nào như Azure, GCP,…

Để triển khai trên nhiều khu vực, tạo một cụm EKS cho mỗi khu vực. Ngoài ra, Container Insights của CloudWatch cũng có thể được sử dụng để thu thập nhật ký và các thông số về Kubernetes và các tác vụ trong các container.

Amazon EKS – Diagram

Amazon EKS (Elastic Kubernetes Service) là một dịch vụ quản lý các cluster Kubernetes được triển khai trên AWS. Sau đây là mô tả sơ đồ của Amazon EKS:

  • Amazon EKS Control Plane: Trung tâm quản lý toàn bộ các cluster Kubernetes được triển khai trên AWS. Nó sẽ xử lý các yêu cầu API để cung cấp các tài nguyên và dịch vụ cho các worker node.
  • Amazon EKS Worker Nodes: Các node được quản lý bởi EKS Control Plane, chạy các pod và các container trong các pod đó. Worker nodes có thể được triển khai trên EC2 instances hoặc Fargate.
  • Amazon Elastic Load Balancer: Được sử dụng để cân bằng tải giữa các worker node và các service chạy trên chúng.
  • Amazon ECR: Amazon Elastic Container Registry, là nơi lưu trữ các image của container.
  • Amazon VPC: Virtual Private Cloud, được sử dụng để triển khai các worker nodes của Amazon EKS.
  • Amazon CloudWatch: Dịch vụ giám sát và ghi nhật ký của AWS, sử dụng để giám sát và ghi lại các thông số và sự kiện liên quan đến các cluster Kubernetes.
  • Amazon S3: Simple Storage Service, được sử dụng để lưu trữ các file truy cập dữ liệu của các ứng dụng chạy trên các worker node của Amazon EKS.
  • AWS IAM: Identity and Access Management, dịch vụ quản lý quyền truy cập của AWS, được sử dụng để quản lý các quyền truy cập của người dùng và các ứng dụng đến các tài nguyên trong Amazon EKS.

Amazon EKS – Node Types

Amazon EKS (Elastic Kubernetes Service) cung cấp cho người dùng cách để triển khai các nhóm Kubernetes được quản lý trên AWS. Kubernetes là một hệ thống mã nguồn mở được sử dụng để triển khai, mở rộng và quản lý ứng dụng đóng gói thành các container, thường sử dụng Docker.

EKS là một lựa chọn khác để triển khai các container so với ECS, với một API khác nhau. EKS hỗ trợ sử dụng EC2 nếu bạn muốn triển khai các node worker hoặc sử dụng Fargate để triển khai các container serverless.

Sử dụng EKS có thể phù hợp với các công ty đã sử dụng Kubernetes trên nền tảng khác và muốn chuyển sang sử dụng trên AWS. Kubernetes độc lập với các nhà cung cấp đám mây (cloud-agnostic) và có thể sử dụng trên bất kỳ đám mây nào như Azure, GCP và AWS.

EKS hỗ trợ nhiều vùng khác nhau và bạn có thể triển khai một nhóm EKS cho mỗi vùng. Ngoài ra, bạn có thể thu thập các logs và metric của container sử dụng CloudWatch Container Insights.

EKS có 3 phương pháp để quản lý Nodes:

  • Managed Node Groups: Tạo và quản lý các Nodes (instances EC2) cho bạn. Các Nodes là một phần của Auto Scaling Group được quản lý bởi EKS và hỗ trợ sử dụng On-Demand hoặc Spot Instances.
  • Self-Managed Nodes: Nodes được tạo bởi bạn và đăng ký vào nhóm EKS và quản lý bởi Auto Scaling Group. Bạn có thể sử dụng Amazon EKS Optimized AMI để tạo các Nodes và hỗ trợ sử dụng On-Demand hoặc Spot Instances.
  • AWS Fargate: Không yêu cầu bất kỳ bảo trì nào, không cần quản lý Nodes.

Amazon EKS – Data Volumes

Khi triển khai ứng dụng trên EKS, bạn cần chỉ định StorageClass manifest để cung cấp lưu trữ cho ứng dụng. StorageClass manifest là một phần của Kubernetes API và cung cấp thông tin về loại lưu trữ và cách triển khai. EKS sử dụng một trình điều khiển tuân thủ giao diện lập trình ứng dụng lưu trữ container (CSI) để quản lý lưu trữ và hỗ trợ nhiều loại lưu trữ khác nhau như Amazon EBS, Amazon EFS, Amazon FSx cho Lustre và Amazon FSx cho NetApp ONTAP. Bằng cách sử dụng CSI, các ứng dụng có thể dễ dàng truy cập và quản lý các tài nguyên lưu trữ khác nhau trong Kubernetes cluster.

Thực hành Amazon EKS

Lưu ý phần demo này sẽ tiêu tốn rất nhiều tiền của bạn nên bạn hãy cân nhắc nếu bạn thực hành theo tôi hoặc bạn có thể nhìn những gì tôi làm và từ đó có cái nhìn tổng quan về Amazon EKS.

Hãy bấm vào Add cluster › Create.

Tại Cluster configuration bạn hãy đặt tên Cluster, phần Kubernetes version hãy chọn phiên bản Kubernetes bạn muốn triển khai. Tại phần Cluster service role bạn hãy tạo 1 role để quản lý cho cụm Kubernetes của bạn, bạn có thể bấm vào Amazon EKS User Guide để xem hướng dẫn về role nhé.

Khi bấm vào Amazon EKS User Guide, trang hướng dẫn sẽ có giao diện tương tự như dưới, bạn có thể đọc và làm theo hướng dẫn hoặc làm theo tôi ở các bước tiếp theo.

Hãy vào IAM › Roles › Create role, kéo xuống phần Use cases for other AWS services, chọn dịch vụ EKS – Cluster vì chúng ta sẽ tạo EKS chạy Cluster sau đó kéo xuống dưới bấm Next.

Tại Permissions policies bạn sẽ nhận được 1 Policy name như dưới, tiếp tục bấm Next.

Đặt tên cho Role name và kéo xuống dưới cùng và bấm Create role.

Sau khi tạo xong role bạn hãy chọn role là “eksClusterRole” như đã tạo ở trên.

Hãy bỏ qua tất cả các setup khác và bấm Next.

Phần Networking bạn hãy chọn VPC, Subnets và 1 Security groups nhé, mình sẽ sử dụng IPv4 cho cụm EKS – Cluster của mình.

Mình sẽ chọn 1 endpoint là 1 ip public và tiếp tục kéo xuống dưới và bấm vào Next.

Phần Configure logging bạn có thể bỏ qua vì chúng ta có thể tìm hiểu chúng ở bài sau, hãy bấm Next để tiếp tục.

Phần cuối cùng cho phép bạn review lại toàn bộ thiết lập, nếu không còn thay đổi gì, bạn hãy bấm Create để tạo EKS – Cluster.

Bạn nhật được thông báo “Managed node group and Fargate profile cannot be added while the cluster DemoEKS is being created. Please wait”. Thông báo này cho biết không thể thêm managed node group hoặc Fargate profile vào trong khi đang tạo cluster EKS có tên là “DemoEKS”. Lý do là việc tạo một cluster EKS là một quá trình đòi hỏi tài nguyên và thời gian để tạo và cấu hình một môi trường Kubernetes cho phép triển khai các ứng dụng containerized trên AWS. Trong quá trình này, hệ thống sẽ cấu hình và quản lý các EC2 instances để chạy các nút của Kubernetes và các tài nguyên mạng và bảo mật liên quan. Vì vậy, khi đang tạo một cluster EKS, hệ thống sẽ không thể đồng thời thêm các managed node group hoặc Fargate profile vào trong cùng một lúc. Người dùng sẽ phải chờ quá trình tạo cluster hoàn tất trước khi thêm các node group hoặc Fargate profile.

Sau đó hệ thống sẽ chuyển qua thông báo “Next step: Provision compute capacity for your cluster by adding a Managed node group or creating a Fargate profile.”, có nghĩa là bạn cần thực hiện bước tiếp theo để cung cấp khả năng tính toán cho cluster của bạn. Điều này có thể được thực hiện bằng cách thêm một Managed node group hoặc tạo một Fargate profile.

Managed node group là một nhóm EC2 instances được quản lý bởi AWS và được sử dụng để chạy các ứng dụng của bạn trên cluster EKS. Khi bạn thêm một Managed node group vào cluster của mình, AWS sẽ tự động tạo ra một Auto Scaling Group (ASG) để quản lý EC2 instances trong nhóm. Bạn có thể chọn sử dụng các instance On-Demand hoặc Spot Instance.

Fargate profile là một tùy chọn khác để cung cấp khả năng tính toán cho cluster của bạn. Nó cho phép bạn chạy các container trên AWS Fargate mà không cần quản lý các EC2 instances. Với Fargate profile, bạn chỉ cần quản lý và định cấu hình các container của mình, trong khi AWS sẽ tự động quản lý khả năng tính toán cho bạn.

Tuy nhiên, lưu ý rằng khi cluster EKS của bạn đang được tạo ra, bạn không thể thêm Managed node group hoặc Fargate profile vào cluster. Bạn phải chờ cho đến khi quá trình tạo cluster hoàn tất trước khi tiến hành bước tiếp theo này.

Nếu chúng ta vào thẻ Resources bạn sẽ thấy các Resource types, nếu bạn đã từng sử dụng Kubernetes bạn sẽ quen với các thành phần này.

Nếu bản qua thẻ Compute thì nơi đây chính là nói để thêm các node tính toán của bạn, hay còn gọi là node worker.

Node groups trong Amazon EKS là một tập hợp các Amazon EC2 instances được quản lý bởi Amazon EKS và được sử dụng để chạy các container trong Kubernetes. Node groups giúp tăng tính linh hoạt cho các cluster bằng cách cho phép thêm hoặc xoá các node instance để đáp ứng với nhu cầu của các ứng dụng container.

Các node group có thể được tạo ra bằng cách sử dụng Amazon EKS Console, AWS CLI, hoặc AWS SDK. Node group có thể được thiết lập với nhiều loại instance khác nhau, bao gồm cả On-Demand và Spot Instances. Bên cạnh đó, EKS cũng cung cấp Amazon EKS-optimized AMI để giúp việc triển khai các node group trở nên dễ dàng hơn.

Một khi node group đã được tạo ra, nó sẽ được tự động thêm vào cluster và có thể được sử dụng để triển khai các ứng dụng container. Khi cần thêm hoặc xoá các node instance, EKS sẽ tự động điều khiển các node group để đáp ứng với nhu cầu của ứng dụng.

Đặt tên cho Node group sau đó hãy vào IAM console để tạo một IAM mới.

Nếu có bảng Please sign in again yêu cầu bạn sign in lại AWS Management Console thì bạn hãy chấp nhận.

Tại thẻ Roles bấm vào Create role.

Khi tạo AMI cho EKS, chúng ta chọn Trusted entity type là AWS service vì AMI sẽ được sử dụng bởi các Amazon EC2 instances trong các node group của EKS cluster. Việc chọn AWS service sẽ cho phép các EC2 instances đăng ký AMI mà không cần phải cung cấp các thông tin xác thực khác như là access key hoặc secret key.

Ngoài ra, nếu chúng ta muốn chia sẻ AMI này với một tài khoản khác trong cùng một AWS Organization, ta có thể chọn Trusted entity type là “Another AWS account” và cung cấp thông tin xác thực của tài khoản đó.

Tại Common use cases chọn EC2, vì chúng ta chọn Instance làm các node cho EKS. Việc tạo role cho EKS tại Common use cases lại chọn EC2 là do EKS sử dụng EC2 instances để tạo các worker nodes để chạy các ứng dụng container. Việc tạo role này giúp cho worker nodes có thể truy cập vào các dịch vụ AWS khác nhau như S3, DynamoDB, RDS, và các dịch vụ khác cần thiết để ứng dụng container hoạt động một cách chính xác. Nó cũng cung cấp các chính sách an ninh để giữ cho môi trường hoạt động của bạn an toàn và bảo mật.

Hãy tìm đến AmazonEKSWorkerNodePolicy.

Và AmazonEKSWorkerNodePolicy sau đó kéo xuống dưới và bấm Next.

Phần tiếp theo giúp bạn review lại các thiết lập, hãy đặt tên cho role tại phần Role name nhé.

Bạn sẽ có 2 Policy name là AmazonEC2ContainerRegistryReadOnly và AmazonEKSWorkerNodePolicy.

Quay lại Node group configuration, tại Node IAM role hãy chọn role vừa tạo.

Mặc định tại Use launch template sẽ được enable nhưng trường hợp demo của mình thì mình sẽ tắt nó.

Hãy bỏ qua các cài đặt khác và bấm Next.

Tại phần Set compute and scaling configuration hãy chọn AMI, Capacity type, Disk size và Instance types.

Trong Amazon EKS, Managed Node Group là một tập hợp các Amazon EC2 instances được quản lý bởi Amazon EKS. Bằng cách sử dụng Managed Node Group, bạn có thể tự động tạo và quản lý các instance EC2 mà Amazon EKS sử dụng để triển khai các workload. Các thông số Desired size, Minimum size và Maximum size Node group scaling configuration có tác dụng quy định số lượng instances EC2 mà bạn muốn triển khai trong Managed Node Group của mình.

Cụ thể, các thông số này có các ý nghĩa sau:

  • Desired size: số lượng instance EC2 bạn muốn chạy trong Managed Node Group.
  • Minimum size: số lượng instance EC2 tối thiểu mà bạn muốn chạy trong Managed Node Group. Nếu Managed Node Group đang chạy dưới số lượng instance này, hệ thống sẽ tự động tạo thêm instance EC2 để đáp ứng yêu cầu tối thiểu.
  • Maximum size: số lượng instance EC2 tối đa mà bạn muốn chạy trong Managed Node Group. Nếu Managed Node Group đang chạy vượt quá số lượng instance này, hệ thống sẽ tự động xoá bỏ các instance EC2 để giảm số lượng về mức tối đa cho phép.

Nhờ vào các thông số này, bạn có thể dễ dàng cấu hình để triển khai các workload trên Amazon EKS một cách linh hoạt và tự động hơn. Bạn có thể điều chỉnh các thông số này để phù hợp với nhu cầu của ứng dụng và giảm thiểu chi phí sử dụng.

Trong EKS, Node group update configuration là các thiết lập để cập nhật các Node group hiện có. Trong đó, thông số Number và Percentage là các cách để xác định số lượng Node được cập nhật.

  • Number: Cho phép người dùng cập nhật một số lượng Node nhất định, được xác định bằng giá trị con số cụ thể.
  • Percentage: Cho phép người dùng cập nhật một phần trăm nhất định của Node group, được xác định bằng giá trị phần trăm cụ thể.

Ví dụ, nếu bạn muốn cập nhật Node group của mình và muốn thay đổi 20% số lượng Node hiện có, bạn sẽ đặt thông số Percentage là 20%. Tuy nhiên, nếu bạn muốn cập nhật chính xác 5 Nodes, bạn sẽ đặt thông số Number là 5.

Các thông số này giúp người dùng có thể linh hoạt trong việc cập nhật Node group của mình, đồng thời tránh tình trạng không kiểm soát được số lượng Node được thêm hoặc xóa khỏi Node group.

Phần Specify networking bạn hãy chọn các subnet mà bạn muốn gán vào cluster.

Phần cuối cùng cho phép bạn review lại toàn bộ thiết lập, hãy bấm Create nếu không còn gì thay đổi.

Và đây là kết quả của bạn, cụm EKS đang được khởi tạo.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories