Danh sách bài viết trong series Kubernetes cơ bản
- Bài 1: Kubernetes Cơ Bản – Cài Đặt Minikube Và Chạy Pod Đầu Tiên
- Bài 2: Kubernetes Pod Deployment – Triển Khai Ứng Dụng Đầu Tiên
- Bài 3: Kubernetes Service Ingress – Quản Lý Truy Cập Ứng Dụng
- Bài 4: Kubernetes ConfigMap Secret – Quản Lý Cấu Hình Ứng Dụng
- Bài 5: Kubernetes EKS AWS – Triển Khai Cluster Trên AWS
- Bài 6: Kubernetes Helm – Tự Động Triển Khai Ứng Dụng Dễ Dàng
- Bài 7: Kubernetes CI/CD – Tự Động Triển Khai Với GitHub Actions
- Bài 8: Kubernetes Monitoring – Giám Sát Với Prometheus Và Grafana
- Bài 9: Kubernetes Autoscaling – Tối Ưu Hóa Cluster Hiệu Quả
EKS Là Gì?
Kubernetes EKS AWS là cách triển khai Kubernetes trên Amazon Elastic Kubernetes Service (EKS), một dịch vụ quản lý Kubernetes của AWS. EKS giúp bạn dễ dàng chạy cluster Kubernetes mà không cần tự quản lý control plane. Trong các bài trước, bạn đã dùng Minikube để thử nghiệm local. Bài này sẽ hướng dẫn bạn triển khai cluster EKS trên AWS và chạy ứng dụng đơn giản (Nginx).
Lưu ý: Bạn cần tài khoản AWS, đã cài AWS CLI, kubectl, và eksctl. Hướng dẫn này dùng eksctl 0.185.0 trên Ubuntu 22.04, vùng us-east-1
.
Bước 1: Chuẩn Bị Môi Trường AWS Và Cài Đặt Công Cụ
- Hành động:
- Cấu hình AWS CLI:
aws configure
Nhập Access Key, Secret Key, và vùng
us-east-1
. - Cài đặt eksctl:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin
- Kiểm tra eksctl:
eksctl version
- Cấu hình AWS CLI:
- Kết quả thực tế:
- Sau khi chạy
aws configure
, kiểm tra:aws sts get-caller-identity
Output:
{ "UserId": "AIDAXYZ1234567890", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/your-user" }
- Sau khi cài eksctl, lệnh
eksctl version
hiển thị:0.185.0
- Sau khi chạy
Bước 2: Tạo Cluster EKS Với eksctl
- Hành động:
- Tạo cluster EKS:
eksctl create cluster --name my-cluster --region us-east-1 --nodegroup-name my-nodes --node-type t3.small --nodes 2
(Lệnh này tạo cluster
my-cluster
với 2 node loạit3.small
). - Kiểm tra cluster:
kubectl get nodes
- Tạo cluster EKS:
- Kết quả thực tế:
- Sau khi chạy
eksctl create cluster
(mất khoảng 10-15 phút), terminal hiển thị:[ℹ] eksctl version 0.185.0 [ℹ] using region us-east-1 [✔] EKS cluster "my-cluster" in "us-east-1" region is ready
- Lệnh
kubectl get nodes
hiển thị:NAME STATUS ROLES AGE VERSION ip-192-168-1-100.ec2.internal Ready <none> 5m v1.29.0 ip-192-168-1-101.ec2.internal Ready <none> 5m v1.29.0
(Cluster có 2 node ở trạng thái
Ready
).
- Sau khi chạy
Bước 3: Triển Khai Ứng Dụng Đơn Giản Trên EKS
- Hành động:
- Tạo file
nginx-deployment.yaml
:touch nginx-deployment.yaml
Mở file và dán nội dung:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
- Triển khai ứng dụng:
kubectl apply -f nginx-deployment.yaml
- Kiểm tra Service để lấy URL:
kubectl get services
- Truy cập URL của Service trên trình duyệt.
- Tạo file
- Kết quả thực tế:
- Sau khi chạy
kubectl apply
, terminal hiển thị:deployment.apps/nginx-deployment created service/nginx-service created
- Lệnh
kubectl get services
hiển thị:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 15m nginx-service LoadBalancer 10.100.123.456 a12bc34de56f78g901hi234jklmn.elb.us-east-1.amazonaws.com 80:31234/TCP 30s
- Truy cập URL
http://a12bc34de56f78g901hi234jklmn.elb.us-east-1.amazonaws.com
, bạn thấy:Welcome to nginx!
- Sau khi chạy
Bước 4: Xóa Tài Nguyên Để Dọn Dẹp
- Hành động:
- Xóa Deployment và Service:
kubectl delete -f nginx-deployment.yaml
- Xóa cluster EKS:
eksctl delete cluster --name my-cluster --region us-east-1
- Xóa Deployment và Service:
- Kết quả thực tế:
- Sau khi chạy
kubectl delete
, terminal hiển thị:deployment.apps "nginx-deployment" deleted service "nginx-service" deleted
- Sau khi chạy
eksctl delete cluster
(mất khoảng 5-10 phút), terminal hiển thị:[✔] all resources in cluster my-cluster were deleted
- Sau khi chạy
Lưu Ý Quan Trọng
- Chi phí AWS: EKS có phí $0.10/giờ cho control plane (~$72/tháng). Node
t3.small
khoảng $0.02/giờ. Luôn xóa cluster sau khi thử nghiệm. - IAM Role: eksctl tự động tạo IAM role cho cluster. Trong production, bạn nên cấu hình role cụ thể.
- Tài liệu tham khảo: Xem thêm về EKS (AWS EKS Documentation) và eksctl (eksctl Documentation).