Hướng Dẫn Triển Khai Cài Đặt RKE2 Chuẩn Production On-Premises
Bài viết hướng dẫn chi tiết từng bước cách cài đặt và cấu hình cụm Kubernetes với RKE2 (Rancher Kubernetes Engine 2) chuẩn Production, đảm bảo High Availability (HA) và an toàn bảo mật.
Mục lục
- 1. Kiến Trúc Production Đề Xuất
- 2. Yêu Cầu Cấu Hình Hệ Thống (Sizing)
- 3. Hệ Điều Hành Khuyên Dùng
- 4. Chuẩn Bị Hệ Thống (Dành Cho Mọi Node)
- 5. Cài Đặt Bộ Cân Bằng Tải HAProxy
- 6. Cài Đặt Node Control Plane Đầu Tiên
- 7. Cài Đặt Các Node Control Plane Còn Lại
- 8. Tham Gia Các Worker Node (Agent)
- 9. Cấu Hình Kubectl Và Kiểm Tra Cụm RKE2
- 10. Triển Khai Các Thành Phần Mở Rộng Cho Production
- 11. Các Best Practice Về Bảo Mật (Security Hardening)
- 12. Backup Và Phục Hồi Dữ Liệu etcd
RKE2 (Rancher Kubernetes Engine 2) là một bản phân phối Kubernetes được tối ưu hóa về bảo mật bởi SUSE/Rancher. Nó tuân thủ chặt chẽ các tiêu chuẩn bảo mật CIS Benchmarks, hỗ trợ môi trường air-gap (offline), và cung cấp tính sẵn sàng cao (HA) cho control plane một cách dễ dàng. RKE2 đặc biệt phù hợp cho các môi trường On-Premises, Bare Metal, Private Cloud, và các hệ thống yêu cầu bảo mật khắt khe.
Bài viết này sẽ hướng dẫn bạn chi tiết từng bước cách xây dựng một cụm RKE2 chuẩn Production thực tế và tối ưu nhất.
1. Kiến Trúc Production Đề Xuất
Để đảm bảo hệ thống hoạt động ổn định và có tính sẵn sàng cao (High Availability), bạn nên sử dụng kiến trúc tối thiểu gồm 3 Control Plane và nhiều Worker Node.
Mô hình khuyên dùng (Small/Medium Production):
- Load Balancer (HAProxy / VIP): Cung cấp một Virtual IP (Ví dụ:
10.10.10.100) đứng trước các API Server. - Control Plane Nodes: Tối thiểu 3 Node chạy etcd và các thành phần quản lý Control Plane (
cp-01,cp-02,cp-03). - Worker Nodes: Nơi trực tiếp chạy các ứng dụng (Pod/Container) thực tế của hệ thống.
2. Yêu Cầu Cấu Hình Hệ Thống (Sizing)
Để hệ thống chạy mượt mà, cấu hình phần cứng tối thiểu cho các Node nên được đảm bảo như sau:
| Thành phần | CPU | RAM | Ổ Cứng (Disk) |
|---|---|---|---|
| Control Plane | 4 vCPU | 8 GB | 100GB SSD |
| Worker Node | 4 - 8 vCPU | 16 GB+ | 100GB+ SSD |
3. Hệ Điều Hành Khuyên Dùng
Bạn có thể chạy RKE2 trên hầu hết các bản phân phối Linux phổ biến. Tuy nhiên đối với môi trường Production, dưới đây là các lựa chọn tốt nhất:
- Ubuntu 24.04 LTS: Khuyên dùng nếu bạn cần hệ sinh thái hỗ trợ rộng lớn, nhiều tài liệu hướng dẫn và dễ sử dụng.
- Rocky Linux 9 / RHEL 9: Khuyên dùng cho các hệ thống doanh nghiệp (Enterprise) yêu cầu sự ổn định cực cao và hỗ trợ lâu dài.
4. Chuẩn Bị Hệ Thống (Dành Cho Mọi Node)
Trước khi tiến hành cài đặt RKE2, bạn cần thiết lập môi trường chuẩn trên tất cả các node (bao gồm cả Control Plane và Worker Node).
4.1. Cấu hình Hostname và tệp /etc/hosts
Đặt hostname riêng biệt và dễ nhớ cho từng máy, ví dụ trên node 1:
hostnamectl set-hostname cp-01
Cấu hình tệp /etc/hosts để các node có thể phân giải IP nội bộ của nhau và của API Load Balancer. Chạy lệnh sau trên tất cả các node:
cat >> /etc/hosts <<EOF
10.10.10.11 cp-01
10.10.10.12 cp-02
10.10.10.13 cp-03
10.10.10.21 worker-01
10.10.10.22 worker-02
10.10.10.23 worker-03
10.10.10.100 k8s-api.local
EOF
4.2. Tắt Swap
Cũng như các bản phân phối Kubernetes khác, bạn bắt buộc phải tắt Swap để bộ lập lịch (kube-scheduler) hoạt động chính xác.
swapoff -a
sed -i '/swap/d' /etc/fstab
Kiểm tra lại bằng lệnh free -h để đảm bảo dung lượng Swap bằng 0.
4.3. Nạp Kernel Modules và Sysctl Tuning
Cần tải các module mạng thiết yếu cho CNI (Container Network Interface) và tinh chỉnh tham số Kernel để tối ưu hiệu năng mạng.
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat <<EOF | tee /etc/sysctl.d/99-kubernetes.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
EOF
sysctl --system
5. Cài Đặt Bộ Cân Bằng Tải HAProxy
Load Balancer có nhiệm vụ phân phối request tới 3 node Control Plane, đảm bảo cụm K8s vẫn hoạt động bình thường nếu 1 node quản lý bị lỗi. Ở ví dụ này chúng ta dùng HAProxy (Thường sẽ đi kèm Keepalived để tạo Virtual IP 10.10.10.100).
Cài đặt HAProxy:
apt update
apt install -y haproxy keepalived
Chỉnh sửa cấu hình HAProxy tại /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
maxconn 50000
defaults
log global
mode tcp
timeout connect 10s
timeout client 1m
timeout server 1m
frontend kubernetes
bind *:6443
default_backend kubernetes-master-nodes
backend kubernetes-master-nodes
balance roundrobin
option tcp-check
server cp-01 10.10.10.11:6443 check
server cp-02 10.10.10.12:6443 check
server cp-03 10.10.10.13:6443 check
Khởi động lại HAProxy để áp dụng:
systemctl enable haproxy
systemctl restart haproxy
6. Cài Đặt Node Control Plane Đầu Tiên
Chúng ta sẽ bắt đầu khởi tạo cụm trên máy cp-01.
Tải và cài đặt RKE2 Server:
curl -sfL https://get.rke2.io | sh -
Tạo cấu hình RKE2 Production:
Tạo thư mục cấu hình và mở tệp config.yaml:
mkdir -p /etc/rancher/rke2/
vi /etc/rancher/rke2/config.yaml
Thêm nội dung cấu hình sau:
write-kubeconfig-mode: "0644"
tls-san:
- "k8s-api.local"
- "10.10.10.100"
cni:
- cilium
disable:
- rke2-ingress-nginx
etcd-expose-metrics: true
kube-apiserver-arg:
- "audit-log-maxage=30"
- "audit-log-maxbackup=10"
- "audit-log-maxsize=100"
kubelet-arg:
- "max-pods=250"
profile: cis
selinux: true
Lưu ý: Chúng ta sử dụng CNI là
Ciliumvì hiệu năng eBPF vượt trội của nó, đồng thời tắt ingress mặc định (rke2-ingress-nginx) để dễ dàng tự cài các Ingress Controller tùy biến sau này. Thuộc tínhprofile: cissẽ tự động kích hoạt các quy tắc bảo mật khắt khe cho Cluster.
Khởi động RKE2 Server:
systemctl enable rke2-server
systemctl start rke2-server
Quá trình này có thể mất vài phút để kéo các image về và khởi chạy.
Lấy Cluster Token:
Sau khi cp-01 khởi động xong, bạn cần lấy token xác thực để các node khác có thể tham gia vào cụm:
cat /var/lib/rancher/rke2/server/node-token
(Hãy lưu lại đoạn mã token này, ví dụ: K10abc...)
7. Cài Đặt Các Node Control Plane Còn Lại
Trên các máy cp-02 và cp-03, hãy chạy lệnh cài đặt tương tự:
curl -sfL https://get.rke2.io | sh -
Tạo cấu hình /etc/rancher/rke2/config.yaml để chúng gia nhập vào Cluster:
server: https://10.10.10.100:9345
token: K10abcxxxxxxxx # Thay token bạn lấy từ cp-01 vào đây
tls-san:
- "k8s-api.local"
- "10.10.10.100"
cni:
- cilium
disable:
- rke2-ingress-nginx
Bật và khởi động dịch vụ:
systemctl enable rke2-server
systemctl start rke2-server
8. Tham Gia Các Worker Node (Agent)
Trên các máy tính chịu trách nhiệm thực thi ứng dụng (Worker Node như worker-01, worker-02), chạy tập lệnh cài đặt nhưng chỉ định loại là agent:
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
Tạo tệp cấu hình /etc/rancher/rke2/config.yaml:
server: https://10.10.10.100:9345
token: K10abcxxxxxxxx # Token giống với phần Control Plane
Bật và chạy RKE2 Agent:
systemctl enable rke2-agent
systemctl start rke2-agent
9. Cấu Hình Kubectl Và Kiểm Tra Cụm RKE2
Trên node cp-01, thiết lập kubectl để giao tiếp với cụm:
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
mkdir -p ~/.kube
cp /etc/rancher/rke2/rke2.yaml ~/.kube/config
chmod 600 ~/.kube/config
Kiểm tra trạng thái các Node xem đã kết nối thành công chưa:
kubectl get nodes
Bạn sẽ thấy danh sách tất cả Control Plane và Worker Node đang ở trạng thái Ready.
10. Triển Khai Các Thành Phần Mở Rộng Cho Production
Một cụm RKE2 cơ bản có thể chưa đáp ứng hết nhu cầu Production. Dưới đây là các Stack phần mềm khuyên dùng bạn nên tích hợp:
10.1. Mạng & Bảo Mật (CNI Cilium)
Cilium sử dụng công nghệ eBPF mang lại hiệu suất mạng cực cao. Bạn có thể bật thêm Hubble để giám sát luồng mạng trực quan:
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.enabled=true \
--set hubble.ui.enabled=true
10.2. Lưu Trữ Khối (Block Storage)
- Longhorn: Giải pháp tối ưu, dễ cấu hình và nhẹ nhàng cho các hệ thống vừa và nhỏ.
- Rook Ceph: Lựa chọn hoàn hảo cho Enterprise cần độ ổn định, hiệu năng I/O lớn và High Availability tốt nhất.
10.3. Giám Sát Hệ Thống (Monitoring)
Khuyên dùng Stack Prometheus tiêu chuẩn:
- Prometheus (Thu thập metrics hệ thống)
- Grafana (Dashboard hiển thị biểu đồ trực quan)
- Loki (Quản lý logs tập trung hiệu quả)
- Alertmanager (Hệ thống cảnh báo qua Slack, Email…)
10.4. Ingress Controller
Vì đã vô hiệu hóa Nginx mặc định lúc cài đặt, bạn nên tự chọn triển khai HAProxy Ingress Controller, Traefik hoặc NGINX Ingress chính thức tuỳ thuộc vào thói quen vận hành mạng của đội ngũ DevOps.
11. Các Best Practice Về Bảo Mật (Security Hardening)
Mặc dù RKE2 vốn đã được bảo mật từ gốc, nhưng để hệ thống “bất khả xâm phạm”, hãy tuân thủ các quy tắc sau:
- Tuyệt đối không Expose etcd ra ngoài: Dịch vụ etcd chỉ được phép giao tiếp trên môi trường mạng nội bộ.
- Sử dụng ổ đĩa riêng cho RKE2: Thư mục
/var/lib/ranchernên được mount vào một ổ cứng SSD chuyên biệt để tránh nút nghẽn đọc/ghi (Disk IO bottleneck). - Taint Control Plane: Không chạy các Pod ứng dụng trực tiếp trên Control Plane để dành trọn vẹn tài nguyên cho việc quản lý cụm.
kubectl taint nodes cp-01 node-role.kubernetes.io/control-plane:NoSchedule - Cài đặt Falco: Để giám sát và cảnh báo bảo mật ứng dụng theo thời gian thực (Runtime Security).
- Cấu hình Firewall khắt khe: Chỉ mở các port mạng cần thiết, bao gồm:
6443(Kubernetes API),9345(RKE2 Node registration),2379-2380(etcd),10250(kubelet),8472(VXLAN).
12. Backup Và Phục Hồi Dữ Liệu etcd
Luôn nhớ lập lịch sao lưu dữ liệu etcd thường xuyên để đề phòng sự cố thảm họa:
Chụp Snapshot thủ công:
rke2 etcd-snapshot save
Xem danh sách các bản Snapshot hiện có:
rke2 etcd-snapshot ls
Phục hồi (Restore) khi cụm gặp sự cố:
systemctl stop rke2-server
rke2 server \
--cluster-reset \
--cluster-reset-restore-path=<ĐƯỜNG_DẪN_TỚI_FILE_SNAPSHOT>
Việc triển khai RKE2 đòi hỏi sự tỉ mỉ ở từng bước cấu hình ban đầu, nhưng bù lại, bạn sẽ sở hữu một cụm Kubernetes Production vô cùng mạnh mẽ, an toàn và hoạt động bền bỉ. Chúc các bạn cấu hình thành công!
Bình luận
Bài viết liên quan
Buildah là gì? Hướng dẫn cài đặt và sử dụng Buildah thay thế Docker trong CI/CD
Tìm hiểu Buildah là gì, các ưu điểm vượt trội so với Docker (đặc biệt là không cần Daemon và hỗ trợ Rootless) và hướng dẫn chi tiết cách cài đặt, sử dụng Buildah trong môi trường CI/CD.
Kubernetes là gì? Hệ sinh thái quản lý Container mạnh mẽ nhất
Tại sao Kubernetes lại trở thành tiêu chuẩn công nghiệp (de-facto) cho việc điều phối Container? Cùng tìm hiểu K8s cơ bản.
So Sánh Caddy, Nginx và Apache: Đâu Là Lựa Chọn Tốt Nhất Cho Web Server?
Phân tích và so sánh chi tiết ưu, nhược điểm của Caddy, Nginx và Apache. Giúp bạn dễ dàng lựa chọn web server phù hợp nhất cho dự án của mình.