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.

Hướng Dẫn Triển Khai Cài Đặt RKE2 Chuẩn Production On-Premises

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ầnCPURAMỔ Cứng (Disk)
Control Plane4 vCPU8 GB100GB SSD
Worker Node4 - 8 vCPU16 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à Cilium vì 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ính profile: cis sẽ 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-02cp-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:

  1. 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ộ.
  2. Sử dụng ổ đĩa riêng cho RKE2: Thư mục /var/lib/rancher nê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).
  3. 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
  4. 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).
  5. 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