👤
Novice Handbook
  • Novice Handbook
  • Guide
  • Internet และ Web
    • HTML
  • Computer Language
    • Basic Computer Language (LV.1)
    • C Language (LV.1)
    • Python3 (LV.1)
  • Operating System
    • Linux
      • Basic Linux (LV.1)
  • TOOLS
    • Text Editor
      • Vim Editor
    • Source Control
      • GitLab
        • GitLab for small site (LV.1)
    • Container
      • Docker
        • Docker (LV.1)
        • Docker (LV.2)
      • Kubernetes
        • Kubernetes Intro (LV.0)
        • Kubernetes Basic (LV.1)
        • Kubernetes Intermediate (LV.2)
        • Helm (LV.2)
        • RKE2 (LV.3)
        • K3S (LV.3)
        • K3D (LV.3)
    • Repository
      • Harbor
        • Harbor for small site (LV.1)
        • Harbor for enterprise (LV.2)
    • Database
      • Redis
        • Redis on Docker Compose (LV.1)
        • Redis on Kubernetes (LV.2)
      • Elastic Stack
        • Elasticsearch & Kibana for small site (LV.1)
    • Observability
      • Prometheus
        • Prometheus for small site (LV.1)
        • Prometheus Operator (LV.2)
    • Security
      • Certbot (LV.1)
      • Falco
      • Hashicorp Vault
    • Collaboration
      • Nextcloud
Powered by GitBook
On this page
  • What is RKE2
  • Architecture
  • Master Node x3
  • Worker Node x2
  • Hardware LoadBalancer
  • Setup
  • ติดตั้ง Master Node เครื่องแรก
  • ติดตั้ง Master Node อีกสองเครื่อง

Was this helpful?

  1. TOOLS
  2. Container
  3. Kubernetes

RKE2 (LV.3)

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

CPU: 2 vCPU
Memory: 4 GB
Disk: 50GB with IOPs more than 1,000
OS: Ubuntu

Worker Node x2

CPU: 2 vCPU
Memory: 4 GB
Disk: 50GB with IOPs more than 1,000
OS: Ubuntu

Hardware LoadBalancer

Private LoadBalancer สำหรับ Control Plane

Frontend  -> Backend
Port 6443 -> Master-Node Port 6443
Port 9345 -> Master-Node Port 9345

Public LoadBalancer สำหรับ Application

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

curl -sfL https://get.rke2.io | sh -

เตรียม custom config

mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

ใส่ content ดังนี้

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

token ในตัวอย่างเป็นค่าที่ random generate ขึ้นมา

mkdir -p /var/lib/rancher/rke2/server/manifests
vim /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml

ใส่ content ดังนี้

---
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 ขึ้นมาเพื่อเริ่มติดตั้ง

systemctl enable rke2-server.service
systemctl start rke2-server.service

รอจน prompt กลับมา แล้วทดสอบใช้งาน

ในตัวอย่างนี้จะทำการใช้ kubectl ที่ติดมาจาก rancher

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 อีกสองเครื่อง

curl -sfL https://get.rke2.io | sh -

เตรียม custom config

mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

ใส่ content ดังนี้

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

systemctl enable rke2-server.service
systemctl start rke2-server.service

รอจน prompt กลับมา แล้วทดสอบใช้งาน

ในตัวอย่างนี้จะทำการใช้ kubectl ที่ติดมาจาก rancher

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 เครื่อง

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -

เตรียม custom config

mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

ใส่ content ดังนี้

token: 8rT6mN1zQw4xJp9sBv3YlF7gHk2cDq5zTx6RkV4pLmZ8fJ1hS0n
server: https://<LB ip>:9345

หลังจากนั้นทำการ start service ขึ้นมาเพื่อเริ่ม join node

systemctl enable rke2-agent.service
systemctl start rke2-agent.service

รอจน prompt กลับมา แล้วทดสอบใช้งานบน master node

kubectl get node

ใช้คำสั่งดังนี้เพื่อหา nodeport ของ ingress controller

kubectl get svc -n kube-system cilium-ingress

PreviousHelm (LV.2)NextK3S (LV.3)

Last updated 7 months ago

Was this helpful?