Xây dựng hệ thống GitOps tự phục hồi sự cố hạ tầng trên cụm VPS giá rẻ với Keepalived và K3s
1. Đặt vấn đề: Thách thức High Availability trên hạ tầng VPS giá rẻ
Trong kỷ nguyên điện toán đám mây, tính sẵn sàng cao (High Availability - HA) là yếu tố sống còn đối với mọi hệ thống phần mềm doanh nghiệp. Tuy nhiên, việc triển khai các cụm Cloud Native quy mô lớn trên các nhà cung cấp AWS, Azure hay Google Cloud thường đi kèm với chi phí hạ tầng cực kỳ đắt đỏ. Đối với các doanh nghiệp vừa và nhỏ (SMEs) hoặc các dự án khởi nghiệp, giải pháp tối ưu chi phí là sử dụng các cụm VPS giá rẻ từ các nhà cung cấp địa phương hoặc phân khúc bình dân.
Thách thức lớn nhất khi vận hành trên VPS giá rẻ chính là độ ổn định của phần cứng và mạng. VPS có thể bị sập, khởi động lại hoặc mất kết nối bất cứ lúc nào. Nếu không có một cơ chế tự phục hồi lỗi (Self-healing) ở cả tầng hạ tầng lẫn tầng ứng dụng, đội ngũ kỹ sư vận hành (DevOps) sẽ phải liên tục đối mặt với việc xử lý sự cố thủ công vào ban đêm. Bài viết này sẽ hướng dẫn bạn cách xây dựng một kiến trúc GitOps tự phục hồi toàn diện bằng cách kết hợp ba thành phần: Keepalived (điều phối IP ảo), K3s (Kubernetes siêu nhẹ) và ArgoCD (công cụ GitOps).
2. Kiến trúc giải pháp: Sự kết hợp giữa Keepalived, K3s và GitOps
Để đạt được mục tiêu tự phục hồi sự cố với chi phí tối thiểu, kiến trúc của chúng ta sẽ được chia thành ba tầng tách biệt nhưng phối hợp chặt chẽ với nhau:
- Tầng mạng (Network Layer - Keepalived): Sử dụng giao thức VRRP (Virtual Router Redundancy Protocol) để tạo ra một IP ảo (Virtual IP - VIP) chia sẻ giữa các node Master của K3s. Khi Master chính gặp sự cố, VIP sẽ tự động chuyển sang Master dự phòng trong vòng vài giây mà không làm gián đoạn kết nối của client.
- Tầng điều phối (Orchestration Layer - K3s): Phiên bản Kubernetes rút gọn từ Rancher, tiêu tốn rất ít RAM và CPU, cực kỳ thích hợp cho các VPS cấu hình thấp (chỉ cần 1-2 GB RAM). Cụm K3s sẽ được cấu hình ở chế độ High Availability sử dụng database nhúng ETCD hoặc một cụm DB bên ngoài.
- Tầng phân phối & Tự phục hồi (GitOps Layer - ArgoCD): Đóng vai trò là "Bộ não" giám sát trạng thái hệ thống. Toàn bộ cấu hình hạ tầng và ứng dụng được lưu trữ khai báo (Declarative) trong kho lưu trữ Git (Git Repository). ArgoCD liên tục đồng bộ và tự động sửa chữa (Auto-sync & Self-healing) nếu có bất kỳ sự sai lệch nào giữa thực tế và Git.
Kiến trúc này đảm bảo rằng: Lỗi ở tầng vật lý (VPS sập) được xử lý bởi Keepalived; Lỗi ở tầng ứng dụng (Pod sập) được xử lý bởi K3s; và Sự sai lệch cấu hình hệ thống được sửa chữa bởi ArgoCD.
3. Hướng dẫn triển khai chi tiết
Bước 1: Cấu hình Keepalived tạo IP ảo (VIP) cho cụm Master
Giả sử chúng ta có 2 node VPS làm Master với IP lần lượt là 192.168.1.10 (Master 1) và 192.168.1.11 (Master 2). Chúng ta sẽ cấp một IP ảo là 192.168.1.100 làm điểm truy cập chung cho toàn cụm.
Cài đặt Keepalived trên cả 2 node bằng lệnh:
sudo apt-get update && sudo apt-get install -y keepalivedCấu hình tệp /etc/keepalived/keepalived.conf trên Master 1 (Primary):
vrrp_script chk_k3s {
script "killall -0 k3s"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass my_secret_token
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_k3s
}
}Trên Master 2 (Backup), cấu hình tương tự nhưng thay đổi state MASTER thành state BACKUP và giảm priority xuống 100. Khởi động lại dịch vụ bằng lệnh sudo systemctl restart keepalived. Giờ đây, IP 192.168.1.100 sẽ luôn tự động trỏ về node Master đang hoạt động.
Bước 2: Triển khai cụm K3s High Availability qua VIP
Tiếp theo, ta khởi tạo cụm K3s Master đầu tiên sử dụng IP ảo đã cấu hình để làm điểm kết nối API Server an toàn:
curl -sfL https://get.k3s.io | cluster-init sh -s - --tls-san 192.168.1.100Sau khi node 1 chạy xong, lấy mã Token tại /var/lib/rancher/k3s/server/node-token và tiến hành gia nhập node Master 2 vào cụm:
curl -sfL https://get.k3s.io | sh -s - server --server https://192.168.1.100:6443 --token K3S_TOKEN --tls-san 192.168.1.100Bằng cách này, hệ thống điều khiển (Control Plane) của Kubernetes đã đạt trạng thái sẵn sàng cao trên hạ tầng VPS giá rẻ.
Bước 3: Tích hợp ArgoCD và kích hoạt tính năng Self-healing
Khi cụm K3s đã sẵn sàng, ta cài đặt ArgoCD để quản lý mọi tài nguyên theo triết lý GitOps. Triển khai ArgoCD bằng lệnh:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlĐể kích hoạt khả năng tự phục hồi tự động, khi định nghĩa tệp cấu hình Application (CRD) của ArgoCD, chúng ta bắt buộc phải cấu hình chính sách đồng bộ hóa (Automated Sync Policy) với hai thuộc tính quan trọng là prune: true và selfHeal: true:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: core-infrastructure
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/your-company/gitops-infra.git'
targetRevision: HEAD
path: kubernetes/apps
destination:
server: 'https://kubernetes.default.svc'
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true4. Cơ chế tự phục hồi hoạt động như thế nào khi có sự cố?
Hãy cùng phân tích kịch bản khi một sự cố nghiêm trọng xảy ra trên hệ thống VPS giá rẻ của bạn:
- Sự cố sập nguồn node Master 1: Ngay lập tức, tiến trình Keepalived trên Master 2 không nhận được gói tin quảng bá từ Master 1. Trong vòng dưới 3 giây, Master 2 sẽ tự động chiếm quyền điều khiển IP ảo
192.168.1.100. Mọi traffic truyền thông của kỹ sư, hệ thống CI/CD hay ứng dụng bên ngoài đến API Server hoàn toàn không bị gián đoạn. - Ứng dụng bị lỗi cấu hình do tác động thủ công (Configuration Drift): Nếu ai đó vô tình thay đổi số lượng Pod hoặc xóa nhầm một dịch vụ (Service) trực tiếp bằng lệnh
kubectltrên cụm, ArgoCD sẽ phát hiện ra sự sai lệch trạng thái này ngay lập tức nhờ cơ chế quét định kỳ. - Hành động tự phục hồi (Self-healing): ArgoCD so sánh trạng thái lỗi thực tế với trạng thái chuẩn trong kho mã nguồn Git. Nhờ cấu hình
selfHeal: true, ArgoCD sẽ tự động tải cấu hình chuẩn từ Git xuống và ghi đè lên cụm K3s, loại bỏ hoàn toàn các thay đổi thủ công sai sót, đưa hệ thống về trạng thái an toàn ban đầu mà không cần con người can thiệp.
5. Đánh giá ưu điểm và một số lưu ý quan trọng
Ưu điểm vượt trội: Giải pháp này mang lại một hệ thống có tính chịu lỗi cao tương đương với các dịch vụ Managed Kubernetes đắt tiền nhưng với mức chi phí chỉ bằng 1/5. Việc tận dụng năng lượng phần cứng tối giản của K3s giúp doanh nghiệp tối ưu hóa hiệu suất trên từng đồng chi phí thuê VPS.
Các lưu ý khi vận hành thực tế:
- Lỗi phân rã não (Split-Brain) trong Keepalived: Hiện tượng này xảy ra khi kết nối mạng giữa các VPS bị nghẽn dẫn đến cả hai node đều tự nhận mình là Master và cùng chiếm cấu hình IP ảo. Hãy chắc chắn rằng luật tường lửa (Firewall/Security Group) của VPS cho phép gói tin multicast/unicast UDP cổng 112 của giao thức VRRP.
- Đồng bộ dữ liệu lưu trữ (Storage): K3s và Keepalived chỉ giải quyết bài toán tính toán (Compute) và mạng (Network). Đối với dữ liệu trạng thái (StatefulSet), bạn cần kết hợp thêm các giải pháp lưu trữ phân tán gọn nhẹ như Longhorn hoặc sao lưu liên tục để đảm bảo an toàn dữ liệu tuyệt đối.
6. Lời kết
Xây dựng một hệ thống GitOps tự phục hồi sự cố bằng Keepalived và K3s trên hạ tầng VPS giá rẻ là một hướng tiếp cận thông minh, cân bằng hoàn hảo giữa bài toán kinh tế và kỹ thuật. Nó chứng minh rằng tính sẵn sàng cao và khả năng tự động hóa DevOps không còn là đặc quyền riêng của các doanh nghiệp lớn có ngân sách khổng lồ. Bằng việc áp dụng đúng kiến trúc và công cụ, bạn hoàn toàn có thể tự tin vận hành các ứng dụng quan trọng ổn định 24/7 trên các hệ thống phần cứng khiêm tốn nhất.
