0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Chạy 2048 trên AWS: Học DevOps với ArgoCD

Đăng vào 3 ngày trước

• 4 phút đọc

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 Copy
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 Copy
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ệ:

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