What is RKE2
RKE2 ย่อมาจาก Rancher Kubernetes Engine 2 เป็นเครื่องมือช่วยในการ setup Kubernetes self-hosted สำหรับ Production grade อย่างง่ายๆ ปกติมักจะถูกใช้ในการ setup cluster บน on-premise
Architecture
ในตัวอย่างนี้เราจะติดตั้ง RKE2 และเปลี่ยน CNI เป็น cilium ซึ่งใช้ eBPF แทนที่ kube-proxy และใช้ cilium ingress controller แทน rke2-ingress-nginx
spec เครื่องที่ใช้ดังนี้
Master Node x3
Copy CPU: 2 vCPU
Memory: 4 GB
Disk: 50GB with IOPs more than 1,000
OS: Ubuntu
Worker Node x2
Copy CPU: 2 vCPU
Memory: 4 GB
Disk: 50GB with IOPs more than 1,000
OS: Ubuntu
Hardware LoadBalancer
Private LoadBalancer สำหรับ Control Plane
Copy Frontend -> Backend
Port 6443 -> Master-Node Port 6443
Port 9345 -> Master-Node Port 9345
Public LoadBalancer สำหรับ Application
Copy Frontend -> Backend
Port 80 -> Worker-Node Port <Ingress Controller NodePort for http>
Port 443 -> Worker-Node Port <Ingress Controller NodePort for https>
Setup
ติดตั้ง Master Node เครื่องแรก
Install binary & tools
Copy curl -sfL https://get.rke2.io | sh -
เตรียม custom config
Copy mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml
ใส่ content ดังนี้
Copy token: 8rT6mN1zQw4xJp9sBv3YlF7gHk2cDq5zTx6RkV4pLmZ8fJ1hS0n
tls-san:
- <LB ip>
cni: cilium
disable-kube-proxy: true
node-taint:
- "node-role.kubernetes.io/control-plane:NoSchedule"
disable:
- rke2-ingress-nginx
Copy mkdir -p /var/lib/rancher/rke2/server/manifests
vim /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
ใส่ content ดังนี้
Copy ---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
kubeProxyReplacement: true
k8sServiceHost: <LB ip>
k8sServicePort: 6443
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
ingressController:
enabled: true
loadbalancerMode: shared
default: true
หลังจากนั้นทำการ start service ขึ้นมาเพื่อเริ่มติดตั้ง
Copy systemctl enable rke2-server.service
systemctl start rke2-server.service
รอจน prompt กลับมา แล้วทดสอบใช้งาน
ในตัวอย่างนี้จะทำการใช้ kubectl ที่ติดมาจาก rancher
Copy ln -s /var/lib/rancher/rke2/bin/kubectl /usr/bin/kubectl
mkdir -p ~/.kube
cp -p /etc/rancher/rke2/rke2.yaml ~/.kube/config
sed -i "s/127.0.0.1/<LB ip>/" ~/.kube/config
kubectl get node
ติดตั้ง Master Node อีกสองเครื่อง
Copy curl -sfL https://get.rke2.io | sh -
เตรียม custom config
Copy mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml
ใส่ content ดังนี้
Copy token: 8rT6mN1zQw4xJp9sBv3YlF7gHk2cDq5zTx6RkV4pLmZ8fJ1hS0n
server: https://<LB ip>:9345
tls-san:
- <LB ip>
cni: cilium
disable-kube-proxy: true
node-taint:
- "node-role.kubernetes.io/control-plane:NoSchedule"
disable:
- rke2-ingress-nginx
หลังจากนั้นทำการ start service ขึ้นมาเพื่อเริ่ม join node
Copy systemctl enable rke2-server.service
systemctl start rke2-server.service
รอจน prompt กลับมา แล้วทดสอบใช้งาน
ในตัวอย่างนี้จะทำการใช้ kubectl ที่ติดมาจาก rancher
Copy ln -s /var/lib/rancher/rke2/bin/kubectl /usr/bin/kubectl
mkdir -p ~/.kube
cp -p /etc/rancher/rke2/rke2.yaml ~/.kube/config
sed -i "s/127.0.0.1/<LB ip>/" ~/.kube/config
kubectl get node
ติดตั้ง Worker node อีก 2 เครื่อง
Copy curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
เตรียม custom config
Copy mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml
ใส่ content ดังนี้
Copy token: 8rT6mN1zQw4xJp9sBv3YlF7gHk2cDq5zTx6RkV4pLmZ8fJ1hS0n
server: https://<LB ip>:9345
หลังจากนั้นทำการ start service ขึ้นมาเพื่อเริ่ม join node
Copy systemctl enable rke2-agent.service
systemctl start rke2-agent.service
รอจน prompt กลับมา แล้วทดสอบใช้งานบน master node
ใช้คำสั่งดังนี้เพื่อหา nodeport ของ ingress controller
Copy kubectl get svc -n kube-system cilium-ingress
Last updated 7 months ago