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

K3s trên Spot Instances: Thiết lập Cluster Kubernetes Săn Kèo Giá Rẻ Tự Động Failover

3 tháng 6, 2026

Giới thiệu: Bài toán tối ưu chi phí Cloud và Kịch bản Spot Instances

Trong kỷ nguyên điện toán đám mây, tối ưu hóa chi phí hạ tầng (Cloud Cost Optimization) luôn là một trong những ưu tiên hàng đầu của các kiến trúc sư hệ thống và kỹ sư DevOps. Hệ thống Kubernetes (K8s) tiêu chuẩn tuy mạnh mẽ nhưng thường tiêu tốn một khoản ngân sách không nhỏ cho các thực thể ảo hóa chạy liên tục (On-Demand Instances). Đây chính là lúc Spot Instances (hoặc Spot VMs) trở thành một giải pháp cứu cánh với mức giá rẻ hơn từ 70% đến 90% so với giá thông thường.

Tuy nhiên, thách thức lớn nhất của Spot Instances là tính chất "bất định": nhà cung cấp dịch vụ đám mây (AWS, GCP, Azure) có thể thu hồi các thực thể này bất kỳ lúc nào với thời gian cảnh báo trước chỉ từ 30 giây đến 2 phút. Đối với một cụm Kubernetes, việc các Node đột ngột biến mất có thể dẫn đến gián đoạn dịch vụ nghiêm trọng. Bài viết này sẽ hướng dẫn bạn cách kết hợp K3s – phiên bản Kubernetes siêu nhẹ – cùng với các cơ chế tự động hóa để xây dựng một Cluster Kubernetes "săn kèo giá rẻ" nhưng vẫn đảm bảo khả năng tự động hạ tầng và duy trì tính sẵn sàng cao (High Availability & Automatic Failover).

Tại sao lại chọn K3s cho kiến trúc Spot Instances?

K3s là một bản phân phối Kubernetes tối giản được phát triển bởi Rancher (hiện thuộc SUSE). Được đóng gói trong một file nhị phân duy nhất có dung lượng chưa đầy 100MB, K3s giảm thiểu tối đa lượng tài nguyên tiêu thụ (CPU/RAM) của hệ thống nền, giúp dành trọn vẹn tài nguyên cho các ứng dụng của doanh nghiệp. Điểm mạnh này cực kỳ phù hợp với Spot Instances vì:

  • Tốc độ khởi động siêu tốc: Một Node K3s mới có thể gia nhập vào Cluster chỉ trong vòng vài mươi giây, giúp rút ngắn thời gian bù đắp tài nguyên khi một Spot Instance khác bị thu hồi.
  • Tiết kiệm tài nguyên tối đa: Thích hợp chạy trên các cấu hình máy ảo Spot cỡ nhỏ (Small/Medium size), tối ưu hóa triệt để hóa đơn chi phí.
  • Cấu hình linh hoạt: K3s hỗ trợ chuyển đổi linh hoạt các backend lưu trữ trạng thái từ SQLite (cho cluster đơn) sang các cơ chế HA như etcd hoặc cơ sở dữ liệu bên ngoài (PostgreSQL, MySQL).

Kiến trúc Cluster K3s bền vững: Kết hợp On-Demand và Spot

Để đảm bảo hệ thống không bị sập hoàn toàn khi toàn bộ Spot Instances bị thu hồi cùng lúc (một kịch bản hoàn toàn có thể xảy ra khi thị trường Cloud biến động), chúng ta cần áp dụng mô hình kiến trúc lai (Hybrid Architecture):

Kiến trúc chuẩn bao gồm: Các Server Node (Control Plane) chạy trên On-Demand Instances để giữ vững trạng thái cụm; các Worker Node (Data Plane) chạy trên Spot Instances để xử lý workloads tải nặng.

Bằng cách này, ngay cả khi toàn bộ các Worker Node thuộc nhóm Spot bị xóa sổ, bộ não của Cluster (Control Plane) vẫn sống sót và sẵn sàng ra lệnh khởi tạo lại các Worker Node mới ngay khi có tài nguyên giá rẻ trở lại.

Chi tiết các bước triển khai và Cấu hình Tự động Failover

Bước 1: Thiết lập Control Plane vững chắc (On-Demand)

Đầu tiên, khởi tạo một K3s Server trên một máy ảo dạng On-Demand. Để tăng tính chịu lỗi, bạn nên cấu hình K3s sử dụng một cơ sở dữ liệu eksternal (ví dụ: AWS RDS hoặc Cloud SQL) làm backend thay vì etcd mặc định, giúp giảm tải cho Server Node.

Lệnh khởi tạo cơ bản trên nút Server:

curl -sfL https://get.k3s.io | sh -s - server --token= --datastore-endpoint="postgres://user:password@host:port/dbname"

Bước 2: Cấu hình Auto Scaling Group cho các Spot Worker Nodes

Trên nền tảng đám mây của bạn (ví dụ AWS EC2), hãy tạo một Auto Scaling Group (ASG) hoặc Managed Instance Group (MIG) cấu hình chỉ sử dụng Spot Instances. Hãy áp dụng chiến lược đa dạng hóa cấu hình (Instance Diversification) bằng cách chọn nhiều loại máy ảo có cấu hình tương đương (ví dụ: t3.medium, t3a.medium, m5.large) để tăng tỷ lệ săn được máy giá rẻ và giảm thiểu rủi ro bị thu hồi đồng loạt một loại máy ảo.

Bước 3: Sử dụng Taints, Tolerations và Node Affinity để quản lý Pod

Khi các Spot Worker Node join vào cụm, chúng ta cần gán nhãn (Label) và thiết lập các Taints cho chúng nhằm phân loại vùng tài nguyên. Ví dụ, gắn nhãn node-role.kubernetes.io/spot-worker=true cho các Spot Node.

Trong file cấu hình Deployment của ứng dụng, sử dụng Node Affinity để ưu tiên đẩy các ứng dụng Stateless chạy trên Spot Node:

affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/spot-worker
operator: In
values:
- "true"

Đối với các dịch vụ quan trọng hoặc các ứng dụng có trạng thái (StatefulSet), hãy ép buộc chúng chạy trên On-Demand Node bằng cách cấu hình requiredDuringSchedulingIgnoredDuringExecution.

Bước 4: Cơ chế tự động Failover với AWS Node Termination Handler

Để giải quyết triệt để bài toán "bất định" của Spot Instances, chúng ta phải chủ động lắng nghe tín hiệu cảnh báo thu hồi từ Cloud Provider thông qua công cụ AWS Node Termination Handler (NTH) hoặc các giải pháp tương tự trên GCP/Azure. Công cụ này hoạt động như một DaemonSet trong cụm K3s.

  1. NTH liên tục gửi request kiểm tra Endpoint Metadata của máy ảo (hoặc lắng nghe qua AWS SQS).
  2. Khi nhận được cảnh báo máy ảo sẽ bị thu hồi sau 2 phút, NTH ngay lập tức thực hiện lệnh kubectl cordon trên Node đó để ngăn không cho Pod mới deploy vào.
  3. Tiếp theo, NTH thực hiện lệnh kubectl drain, di tản một cách an toàn và nhẹ nhàng (Graceful Termination) tất cả các Pod đang chạy trên Node đó sang các Node khác (Spot Node còn lại hoặc On-Demand Node).
  4. Hệ thống Auto Scaling Group phát hiện thiếu hụt Node và tự động kích hoạt tạo một Spot Instance mới để thay thế.

Đánh giá hiệu quả và Những lưu ý cốt lõi

Triển khai K3s trên hạ tầng Spot Instances mang lại hiệu quả kinh tế rõ rệt cho doanh nghiệp, đặc biệt là trong các môi trường như Development, Staging, Lab testing hoặc các hệ thống xử lý dữ liệu hàng loạt (Batch Processing), CI/CD Runners. Chi phí vận hành có thể giảm tới 80% so với việc duy trì một cụm K8s On-Demand truyền thống.

Tuy nhiên, để vận hành mô hình này thành công trong môi trường Production, doanh nghiệp cần tuân thủ nghiêm ngặt các nguyên tắc sau:

  • Chỉ chạy Stateless Application trên Spot Node: Các ứng dụng không lưu trạng thái, có khả năng khởi động lại nhanh chóng và không làm mất dữ liệu người dùng là ứng cử viên hoàn hảo.
  • Cấu hình PodDisruptionBudgets (PDB): Luôn thiết lập PDB để đảm bảo số lượng bản sao (Replicas) tối thiểu của ứng dụng luôn hoạt động trong quá trình di tản Node.
  • Giám sát chặt chẽ: Sử dụng Prometheus và Grafana để theo dõi tần suất bị thu hồi (Spot Interruption Rate) nhằm điều chỉnh chiến lược chọn loại máy ảo phù hợp.

Lời kết

Sự kết hợp giữa tư duy tối giản của K3s và tính kinh tế của Spot Instances mở ra một hướng đi mới cho việc tối ưu chi phí hạ tầng Cloud. Bằng cách áp dụng các cơ chế tự động hóa thông minh như Node Termination Handler kết hợp với thiết kế kiến trúc lai vững chắc, bạn hoàn toàn có thể sở hữu một hệ thống Kubernetes tự động Failover, an toàn trước mọi làn sóng thu hồi tài nguyên và tối ưu hóa đến từng đồng chi phí cho doanh nghiệp của mình.

K3s trên Spot Instances: Thiết lập Cluster Kubernetes Săn Kèo Giá Rẻ Tự Động Failover | DPTCloud