Quay lại danh sách
Tin tức công nghệ

Tự Động Hóa Hạ Tầng Chuẩn GitOps: Kết Hợp OpenTofu, Terragrunt và GitHub Actions Quản Lý 50 VPS

6 tháng 6, 2026

Giới thiệu xu hướng GitOps trong quản trị hạ tầng hiện đại

Trong kỷ nguyên chuyển đổi số, việc quản lý hạ tầng định nghĩa bằng mã nguồn (Infrastructure as Code - IaC) đã trở thành tiêu chuẩn bắt buộc đối với các doanh nghiệp công nghệ. Khi quy mô hệ thống tăng lên, ví dụ như quản lý cụm 50 Máy chủ ảo (VPS) phục vụ cho nhiều môi trường khác nhau (Development, Staging, Production), phương pháp quản trị thủ công hoặc áp dụng IaC rời rạc sẽ bộc lộ vô số hạn chế. Rủi ro sai lệch cấu hình (configuration drift), thiếu đồng bộ giữa các môi trường và lỗ hổng bảo mật trong quá trình triển khai là những bài toán nan giải.

Để giải quyết triệt để vấn đề này, mô hình GitOps ra đời. GitOps dịch chuyển trung tâm quản trị về hệ thống quản lý phiên bản (Git), biến Git thành "Single Source of Truth" (Nguồn sự thật duy nhất). Mọi thay đổi của hạ tầng đều phải thông qua quy trình Pull Request, kiểm duyệt mã nguồn và tự động triển khai bằng CI/CD pipeline. Bài viết này sẽ hướng dẫn chi tiết cách xây dựng một hệ thống GitOps toàn diện cho 50 VPS sử dụng bộ ba công cụ mạnh mẽ: OpenTofu, Terragrunt và GitHub Actions.

Bộ ba công cụ: Tại sao lại là OpenTofu, Terragrunt và GitHub Actions?

Trước khi đi vào kiến trúc chi tiết, chúng ta cần hiểu rõ vai trò và lý do lựa chọn hệ sinh thái công nghệ này thay vì các giải pháp truyền thống khác.

1. OpenTofu: Sự thay thế hoàn hảo và mã nguồn mở cho Terraform

Sau khi HashiCorp thay đổi giấy phép của Terraform sang BUSL, cộng đồng công nghệ đã đồng lòng phát triển OpenTofu dưới sự bảo trợ của Linux Foundation. OpenTofu hoàn toàn tương thích ngược với Terraform nhưng đảm bảo tính mở, minh bạch và miễn phí vĩnh viễn. Công cụ này chịu trách nhiệm khởi tạo, thay đổi và hủy các tài nguyên hạ tầng (Compute, Network, Storage) trên các nhà cung cấp cloud hoặc VPS thông qua file cấu hình declarative.

2. Terragrunt: Giải pháp giữ cho mã nguồn IaC luôn "DRY"

Mặc dù OpenTofu rất mạnh mẽ, nhưng khi quản lý đến 50 VPS chia đều cho nhiều môi trường, bạn sẽ gặp phải tình trạng lặp lại code nghiêm trọng (file main.tf, variables.tf giống nhau đến 90% ở các thư mục khác nhau). Terragrunt là một lớp bọc (wrapper) mỏng cho OpenTofu, được thiết kế để giải quyết bài toán này dựa trên nguyên lý DRY (Don't Repeat Yourself). Terragrunt giúp:

  • Quản lý cấu hình backend (state file) từ một nơi duy nhất.
  • Tái sử dụng các module OpenTofu linh hoạt qua các môi trường bằng cách chỉ thay đổi file cấu hình terragrunt.hcl.
  • Quản lý thứ tự phụ thuộc giữa các tài nguyên một cách dễ dàng.

3. GitHub Actions: Trục xương sống cho CI/CD Pipeline

GitHub Actions đóng vai trò là cơ chế tự động hóa trong mô hình GitOps. Công cụ này lắng nghe các sự kiện từ kho lưu trữ Git (như Push, Pull Request) để tự động chạy các bước kiểm tra cú pháp (linting), hiển thị trước thay đổi (plan) và thực thi triển khai (apply) hạ tầng lên môi trường thực tế.

Kiến trúc thư mục tối ưu cho quy mô 50 VPS

Để quản lý hiệu quả 50 VPS mà không bị rối loạn, việc thiết kế cấu trúc thư mục là bước đi sống còn. Chúng ta sẽ tách biệt phần mã nguồn module (chứa định nghĩa tài nguyên) và phần live configuration (chứa thông số cấu hình thực tế của từng VPS).

├── infrastructure-modules/ (Kho chứa các module OpenTofu dùng chung)
│   ├── vps-instance/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
└── infrastructure-live/ (Kho chứa cấu hình thực tế cho Terragrunt)
    ├── terragrunt.hcl (Cấu hình root: backend, provider chung)
    ├── production/
    │   ├── env.hcl
    │   ├── vps-cluster-1/
    │   │   └── terragrunt.hcl
    │   └── vps-cluster-2/
    │       └── terragrunt.hcl
    └── staging/
        ├── env.hcl
        └── vps-staging-1/
            └── terragrunt.hcl

Trong kiến trúc này, mỗi thư mục con như vps-cluster-1 chỉ chứa duy nhất một file terragrunt.hcl. File này sẽ gọi đến module dùng chung ở thư mục infrastructure-modules và truyền các biến số cụ thể (như RAM, CPU, IP, Số lượng node) vào. Nhờ vậy, việc quản lý hàng chục VPS trở nên vô cùng gọn gàng.

Thiết lập quy trình GitOps với GitHub Actions

Quy trình GitOps chuẩn mực yêu cầu mọi kỹ sư không được phép chạy lệnh tofu apply trực tiếp từ máy tính cá nhân. Tất cả phải được kiểm soát qua GitHub Actions workflow thông qua 2 giai đoạn chính:

Giai đoạn 1: Pull Request (Kiểm tra và Dự báo thay đổi)

Khi một thành viên trong đội ngũ muốn nâng cấp cấu hình hoặc thêm mới một VPS, họ sẽ tạo một nhánh mới và mở Pull Request (PR) vào nhánh main. GitHub Actions sẽ tự động kích hoạt workflow thực hiện các bước sau:

  1. Checkout Code: Tải mã nguồn từ PR về runner.
  2. Setup Tools: Cài đặt OpenTofu và Terragrunt phiên bản chỉ định.
  3. Terragrunt Validate/Lint: Kiểm tra tính hợp lệ về mặt cú pháp của code.
  4. Terragrunt Plan: Chạy lệnh dự báo xem những thay đổi này sẽ tác động như thế nào đến hạ tầng hiện tại (Thêm mới bao nhiêu VPS, sửa đổi những gì, xóa những gì). Kết quả plan sẽ được bot tự động comment trực tiếp vào PR để các bên liên quan tiện kiểm duyệt.

Lưu ý bảo mật: Tuyệt đối không hardcode thông tin tài khoản (API Keys, SSH Keys) vào mã nguồn. Sử dụng GitHub Actions Secrets để truyền các biến môi trường này một cách an toàn vào pipeline trong quá trình thực thi.

Giai đoạn 2: Merge vào Nhánh Main (Thực thi hạ tầng)

Sau khi mã nguồn được Tech Lead duyệt và xác nhận kết quả plan an toàn, PR sẽ được merge vào nhánh main. Một workflow khác sẽ được kích hoạt để chạy lệnh terragrunt run-all apply --terragrunt-non-interactive. Lệnh này sẽ tự động phân tích cây phụ thuộc và tiến hành khởi tạo/cập nhật chính xác 50 VPS trên hạ tầng thực tế theo đúng trạng thái được định nghĩa trong Git.

Các quy tắc quản trị vận hành thực tế (Best Practices)

Triển khai GitOps cho hệ thống lớn đòi hỏi tính kỷ luật cao. Dưới đây là những kinh nghiệm thực chiến giúp vận hành hệ thống 50 VPS ổn định:

  • Sử dụng Remote State Locking: Luôn cấu hình lưu trữ State file của OpenTofu trên các dịch vụ lưu trữ đám mây hỗ trợ tính năng khóa trạng thái (như AWS S3 kết hợp DynamoDB, hoặc các giải pháp tương đương). Điều này ngăn chặn tình trạng hai pipeline chạy đồng thời ghi đè và làm hỏng dữ liệu trạng thái hệ thống.
  • Áp dụng nguyên tắc đặc quyền tối thiểu (Least Privilege): Tài khoản Service Account hoặc API Key cấp cho GitHub Actions chỉ nên có vừa đủ quyền hạn để quản lý VPS, không cấp quyền Admin tối cao của toàn bộ hệ thống Cloud để giảm thiểu rủi ro khi bị lộ lọt thông tin.
  • Giám sát Configuration Drift: Thiết lập một cronjob định kỳ trong GitHub Actions (ví dụ 12 tiếng một lần) chạy lệnh terragrunt plan. Nếu phát hiện có sự thay đổi giữa thực tế và code (do có ai đó vào giao diện web sửa thủ công), hệ thống sẽ gửi cảnh báo ngay lập tức qua Slack hoặc Telegram để đội ngũ kỹ sư điều chỉnh lại.

Lời kết

Xây dựng hệ thống tự động hóa hạ tầng chuẩn GitOps bằng cách kết hợp OpenTofu, Terragrunt và GitHub Actions không chỉ giúp doanh nghiệp giải quyết triệt để bài toán quản lý 50 VPS mà còn đặt nền móng vững chắc cho việc mở rộng lên hàng trăm, hàng ngàn máy chủ sau này. Quy trình này mang lại tính minh bạch tuyệt đối, khả năng khôi phục thảm họa (Disaster Recovery) nhanh chóng và nâng cao hiệu suất làm việc của đội ngũ DevOps. Hãy bắt đầu dịch chuyển hạ tầng của bạn sang mô hình GitOps ngay hôm nay để tối ưu hóa chi phí vận hành và giảm thiểu tối đa sai sót từ con người.