Hướng Dẫn Cấu Hình KubeKey: Thiết Lập Cụm Kubernetes Siêu Tốc Trên 3 VPS Giá Rẻ Khác Nhà Cung Cấp
Đặt Vấn Đề: Tối Ưu Chi Phí Triển Khai Kubernetes Cho Doanh Nghiệp Nhỏ và Triển Khai Thử Nghiệm
Trong kỷ nguyên chuyển đổi số, Kubernetes (K8s) đã trở thành tiêu chuẩn vàng cho việc quản lý và vận hành các ứng dụng container hóa. Tuy nhiên, đối với các doanh nghiệp khởi nghiệp, doanh nghiệp nhỏ (SMEs) hoặc các nhóm phát triển đang trong giai đoạn thử nghiệm (R&D), việc duy trì một cụm K8s trên các dịch vụ Managed Kubernetes lớn như AWS EKS, Google GKE hay Azure AKS có thể là một gánh nặng chi phí không hề nhỏ.
Một giải pháp thay thế thông minh là tự xây dựng cụm K8s trên các hệ thống hạ tầng ảo hóa (VPS) giá rẻ như OVH, Linode, DigitalOcean, Vultr hoặc thậm chí là các nhà cung cấp nội địa. Đặc biệt, việc kết hợp VPS từ nhiều nhà cung cấp khác nhau không chỉ giúp tận dụng các chương trình khuyến mãi, tối ưu hóa chi phí mà còn tăng tính sẵn sàng cao, tránh rủi ro phụ thuộc vào một nhà cung cấp duy nhất (Vendor Lock-in). Bài viết này sẽ hướng dẫn bạn cách sử dụng KubeKey – một công cụ mã nguồn mở mạnh mẽ – để hiện thực hóa kiến trúc Multi-Cloud K8s này một cách siêu tốc và chuẩn hóa nhất.
KubeKey Là Gì Và Tại Sao Lại Phù Hợp Cho Mô Hình Triển Khai Này?
KubeKey (do KubeSphere phát triển) là một công cụ cài đặt dựa trên ngôn ngữ Go, thay thế cho các phương thức cài đặt truyền thống phức tạp như kubeadm hoặc Kubespray. KubeKey sở hữu nhiều ưu điểm vượt trội phù hợp với môi trường VPS cấu hình thấp:
- Tốc độ tối ưu: Được viết bằng Go, hỗ trợ thực thi song song các tác vụ, giảm thời gian khởi tạo cụm xuống chỉ còn vài phút.
- Cấu hình khai báo (Declarative): Toàn bộ kiến trúc cụm được định nghĩa trong một file YAML duy nhất, rất dễ quản lý, bảo trì và tái cấu trúc.
- Hỗ trợ Multi-Cloud bẩm sinh: KubeKey tích hợp sẵn các giải pháp mạng overlay tinh gọn, cho phép kết nối các node nằm rải rác ở các trung tâm dữ liệu khác nhau thông qua môi trường Internet một cách an toàn.
Chuẩn Bị Hạ Tầng Và Mô Hình Kiến Trúc Cụm
Để bài hướng dẫn này đạt tính thực tiễn cao, chúng ta sẽ giả định triển khai một cụm K8s gồm 3 node VPS cấu hình tối thiểu (2 vCPU, 4GB RAM) từ 3 nhà cung cấp khác nhau. Cấu hình này vừa đủ chạy môi trường Staging hoặc các Microservices nhẹ nhàng.
| Tên Node | Vai Trò (Role) | Nhà Cung Cấp | Địa Chỉ IP Công Cộng |
|---|---|---|---|
k8s-master | Control Plane / Worker | Provider A (e.g., DigitalOcean) | 1.2.3.4 |
k8s-worker-1 | Worker | Provider B (e.g., Vultr) | 5.6.7.8 |
k8s-worker-2 | Worker | Provider C (e.g., Linode) | 9.10.11.12 |
Lưu ý quan trọng về Bảo mật và Mạng: Vì các VPS nằm ở các mạng nội bộ khác nhau, chúng bắt buộc phải giao tiếp thông qua IP công cộng. Để đảm bảo an toàn dữ liệu luân chuyển giữa các Node, chúng ta sẽ cấu hình KubeKey sử dụng mạng mã hóa, hoặc thiết lập một VPN mesh nội bộ bằng WireGuard trước khi cài đặt. Trong bài viết này, chúng ta sẽ cấu hình KubeKey định tuyến trực tiếp qua IP Public kết hợp giải pháp Network Plugin có hỗ trợ mã hóa.
Các bước chuẩn bị trên từng VPS:
- Hệ điều hành: Cài đặt Ubuntu 22.04 LTS đồng bộ trên cả 3 Node.
- Tắt Swap: K8s yêu cầu tắt swap để quản lý tài nguyên chính xác. Chạy lệnh:
sudo swapoff -avà comment dòng swap trong/etc/fstab. - Mở các cổng tường lửa (Firewall): Đảm bảo các cổng giao tiếp cốt lõi như 6443 (API Server), 2379-2380 (Etcd), 10250 (Kubelet) và các cổng mã hóa mạng (như UDP 8472 cho VxLAN hoặc UDP 51820 cho WireGuard) không bị nhà cung cấp chặn.
Hướng Dẫn Từng Bước Cấu Hình KubeKey Triển Khai Cụm K8s
Bước 1: Tải KubeKey trên Node Điều Khiển
Bạn chỉ cần tải KubeKey về node đóng vai trò điều phối cài đặt (thường là node Master). Truy cập vào k8s-master qua SSH và thực hiện:
export KKZONE=cn # Nếu tải chậm, hoặc bỏ qua để tải từ GitHub toàn cầu
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.13 sh -Cấp quyền thực thi cho file binary vừa tải về:
chmod +x kkBước 2: Khởi Tạo File Cấu Hình Mẫu
Tạo file cấu hình ban đầu bằng lệnh sau, chỉ định phiên bản Kubernetes mong muốn (ví dụ: v1.26.5):
./kk create config --with-kubernetes v1.26.5 -f config-vps-cluster.yamlBước 3: Tối Ưu File config-vps-cluster.yaml Cho Môi Trường Đa Đám Mây
Mở file config-vps-cluster.yaml bằng trình soạn thảo (vi/nano). Đây là bước cốt lõi quyết định sự thành bại của cụm K8s Multi-Cloud. Bạn cần chỉnh sửa cấu hình khớp với thông tin các VPS của mình:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: vps-lowcost-cluster
spec:
hosts:
- name: k8s-master
address: 1.2.3.4
internalAddress: 1.2.3.4
user: root
privateKeyPath: "~/.ssh/id_rsa"
- name: k8s-worker-1
address: 5.6.7.8
internalAddress: 5.6.7.8
user: root
privateKeyPath: "~/.ssh/id_rsa"
- name: k8s-worker-2
address: 9.10.11.12
internalAddress: 9.10.11.12
user: root
privateKeyPath: "~/.ssh/id_rsa"
roleGroups:
etcd:
- k8s-master
control-plane:
- k8s-master
worker:
- k8s-master
- k8s-worker-1
- k8s-worker-2
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServicesCIDR: 10.233.0.0/18
registry:
privateRegistry: ""
Giải thích cấu hình chuyên sâu:
- address & internalAddress: Do các VPS không có chung mạng LAN, chúng ta phải gán cả hai giá trị này bằng IP công cộng của VPS đó. Điều này ép Kubelet và các thành phần control-plane trao đổi dữ liệu qua IP Public.
- privateKeyPath: Đảm bảo node Master đã copy SSH public key sang hai node Worker để KubeKey có thể tự động cấu hình không cần mật khẩu.
- Network Plugin Calico: Calico là sự lựa chọn tuyệt vời cho môi trường này vì nó hỗ trợ cơ chế mã hóa IP-in-IP hoặc tích hợp WireGuard trực tiếp giúp dữ liệu đi qua Internet được bảo mật tuyệt đối.
Bước 4: Tiến Hành Thực Thi Cài Đặt Siêu Tốc
Khi file cấu hình đã hoàn thiện, khởi chạy quá trình cài đặt tự động bằng một câu lệnh duy nhất:
./kk create cluster -f config-vps-cluster.yamlKubeKey sẽ tự động đăng nhập vào các node qua SSH, cài đặt các thành phần phụ thuộc (Container Runtime như containerd, kubelet, kubeadm, kubectl), cấu hình mạng, khởi tạo Etcd và thiết lập cụm. Quá trình này thường chỉ mất từ 5 đến 7 phút tùy thuộc vào tốc độ mạng của các VPS.
Xác Thực Cụm Và Các Tối Ưu Hóa Sau Triển Khai
Sau khi KubeKey thông báo cài đặt thành công, hãy kiểm tra trạng thái hoạt động của cụm:
kubectl get nodes -o wideHệ thống sẽ hiển thị danh sách 3 node kèm theo trạng thái Ready và IP tương ứng là các IP công cộng của các nhà cung cấp khác nhau.
Các khuyến nghị vận hành an toàn:
- Kích hoạt mã hóa mạng: Nếu chọn Calico, hãy bật tính năng mã hóa WireGuard bằng lệnh:
kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}'nhằm mã hóa toàn bộ traffic giữa các Pod nằm ở các VPS khác nhau. - Cấu hình tường lửa nghiêm ngặt: Chỉ cho phép các IP của 3 VPS này liên lạc với nhau qua các port nội bộ của K8s, ngăn chặn hoàn toàn truy cập trái phép từ thế giới bên ngoài vào Etcd hay Kubelet.
Kết Luận
Thiết lập cụm Kubernetes đa đám mây trên các VPS giá rẻ bằng KubeKey không chỉ là một giải pháp tiết kiệm chi phí tối đa mà còn mang lại trải nghiệm thực tiễn sâu sắc về kiến trúc mạng và bảo mật trong K8s. Khả năng tùy biến linh hoạt cùng tốc độ thực thi vượt trội của KubeKey giúp các kỹ sư hệ thống và lập trình viên nhanh chóng sở hữu một môi trường điều phối container mạnh mẽ, sẵn sàng cho các dự án đột phá tiếp theo.
