Chạy 2048 trên AWS: Học DevOps với ArgoCD
Giới thiệu
Trong thế giới phát triển phần mềm, việc làm quen với các công cụ và quy trình DevOps là rất quan trọng. Dự án này không chỉ đơn thuần là một trò chơi 2048, mà còn là một cách tuyệt vời để thực hành các kỹ năng DevOps với các công cụ như Kubernetes, Terraform và ArgoCD. Dưới đây, chúng ta sẽ khám phá cách triển khai trò chơi 2048 trên AWS với một loạt các công cụ hiện đại.
TL;DR
Không ai cần Kubernetes, Terraform và ArgoCD để chạy 2048, đúng không? Nhưng chính vì vậy tôi đã làm điều đó. Triển khai một trò chơi tĩnh đơn giản với các công cụ cấp doanh nghiệp không chỉ giúp tôi tập trung vào các mô hình DevOps mà còn giúp tôi nắm bắt quy trình triển khai trong môi trường thực tế.
Dự án này biến trò chơi 2048 trở thành một demo cloud-native chạy trên AWS với:
- Docker + ECR cho việc container hóa
- Kubernetes trên EKS cho việc quản lý
- GitHub Actions cho quy trình CI/CD
- ArgoCD cho việc triển khai GitOps
- Terraform cho hạ tầng như mã
🔗 Mã nguồn trên GitHub
Tại sao chọn 2048?
Trò chơi này rất đơn giản — chỉ là HTML/JS tĩnh. Nhưng đó chính là điều tôi muốn. Bằng cách loại bỏ mọi logic backend phức tạp, bạn sẽ có thể thực hành:
- Xây dựng một pipeline đầy đủ từ đầu
- Quản lý hạ tầng đám mây với Terraform
- Triển khai lên Kubernetes
- Thiết lập GitOps với ArgoCD
Không phải về trò chơi. Mà là để chứng minh rằng nếu bạn có thể triển khai 2048 theo cách này, bạn có thể triển khai bất kỳ ứng dụng nào theo cách này.
Những gì tôi đã xây dựng
1. Container hóa trò chơi
Tôi đã đóng gói mã nguồn 2048 vào một hình ảnh Docker sử dụng nginx:alpine làm máy chủ web nhẹ:
dockerfile
FROM nginx:alpine
COPY . /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Hình ảnh này được đẩy lên Amazon ECR, sẵn sàng cho Kubernetes.
2. Triển khai Kubernetes trên EKS
Tôi đã viết các tệp manifest cho:
- Deployment: 3 bản sao cho tính khả dụng, với giới hạn tài nguyên và probes.
- Service: Loại
LoadBalancerđể truy cập qua AWS Load Balancer.
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: game-2048
spec:
replicas: 3
selector:
matchLabels:
app: game-2048
template:
metadata:
labels:
app: game-2048
spec:
containers:
- name: game-2048
image: <ECR_REPO>/game-2048:latest
ports:
- containerPort: 80
3. CI/CD với GitHub Actions
Một workflow sẽ xử lý:
- Kiểm tra mã và các bài kiểm tra cơ bản
- Xây dựng + đẩy hình ảnh Docker lên ECR
- Cập nhật các manifest
Điều này giúp tự động hóa pipeline từ commit → container → triển khai.
4. GitOps với ArgoCD
Thay vì áp dụng các manifest một cách thủ công, tôi đã thiết lập ArgoCD trên EKS. Nó theo dõi repo Git và tự động đồng bộ hóa các thay đổi, mang lại cho tôi:
- Triển khai tự động
- Khả năng hoàn tác
- Giao diện thân thiện để trực quan hóa trạng thái ứng dụng
5. Hạ tầng với Terraform
Terraform tạo ra:
- VPC + subnets
- Cụm EKS + nhóm nút
- Kho chứa ECR
Điều này giúp toàn bộ thiết lập có thể tái tạo trên bất kỳ tài khoản AWS nào.
Các bài học rút ra
- GitOps cảm thấy mạnh mẽ: Để ArgoCD điều khiển các triển khai giúp các cụm đồng bộ với Git.
- IaC tiết kiệm thời gian: Xây dựng hạ tầng với Terraform dễ dàng hơn nhiều so với việc nhấp chuột qua console AWS.
- Quá mức là điều chấp nhận được để học hỏi: Thực hành với các ứng dụng đơn giản giúp ích khi rủi ro thấp.
- Docker + EKS + ArgoCD là một stack cơ bản vững chắc cho các ứng dụng thực tế.
Bước tiếp theo
Nếu tôi quay lại dự án này, tôi muốn:
- Thêm giám sát (CloudWatch hoặc Prometheus)
- Sử dụng Fargate cho các pod serverless
- Thử các instance spot để tiết kiệm chi phí
- Thêm Route53 + SSL cho một miền chính thức
Kết luận
Chạy 2048 trên AWS với Terraform, Kubernetes và ArgoCD là một sự quá mức hoàn toàn — và đó chính xác là điều tôi muốn. Dự án này cho phép tôi thực hành các quy trình tương tự mà các công ty sử dụng trong sản xuất, nhưng trong một môi trường vui vẻ và ít rủi ro.
Nếu bạn có thể lấy một trò chơi nhỏ và triển khai nó với một stack DevOps đầy đủ, bạn đã bắt đầu xây dựng thói quen cần thiết cho các hệ thống lớn hơn trong thế giới thực.
📬 Liên hệ
Nếu bạn có bất kỳ thắc mắc nào, hãy cảm thấy tự do để liên hệ:
- Website: hasan-ashab
- LinkedIn: linkedin.com/in/hasan-ashab