Membuat Cluster Kubernetes v1.25 RKE2

Kalau kamu pernah pakai Kubernetes, kamu pasti tahu bahwa mengelola cluster lewat command line itu cukup melelahkan. Banyak perintah yang harus diingat dan konfigurasi yang rawan kesalahan. Nah, di sinilah Rancher hadir untuk mempermudah semuanya. Rancher menyediakan tampilan antarmuka berbasis web yang memudahkan kita mengatur, memantau, dan mengelola cluster Kubernetes secara visual dan lebih terstruktur. Ditambah lagi dengan RKE2, versi Kubernetes dari Rancher yang sudah dirancang agar lebih aman dan stabil, sangat cocok untuk lingkungan produksi. Dalam artikel ini, kita akan belajar cara membuat cluster RKE2 dari awal sambil mengenal bagaimana Rancher bisa membantu kita bekerja lebih efisien dalam mengelola infrastruktur.

Environment

HostnameIP AddressRole
rz-master01192.168.10.20Control Plane, ETCD
rz-worker01192.168.10.21Worker
rz-worker02192.168.10.22Worker

Step-by-Step

Konfigurasi Awal di Semua Host

Tambahkan entri host ke /etc/hosts

cat <<EOF | sudo tee /etc/hosts
192.168.10.20 rz-master01 rz-master01.local
192.168.10.21 rz-worker01 rz-worker01.local
192.168.10.22 rz-worker02 rz-worker02.local
EOF

Matikan swap memory

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Aktifkan modul overlay dan br_netfilter untuk Containerd

sudo cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf 
overlay 
br_netfilter 
EOF

Tambahkan parameter kernel untuk networking Kubernetes

sudo cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
net.bridge.bridge-nf-call-ip6tables = 1 
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

Setup Control Plane (Master Node)

Buat direktori konfigurasi RKE2

sudo mkdir -p /etc/rancher/rke2/
sudo mkdir -p /var/lib/rancher/rke2/server/manifests/

Buat file manifest Cluster, untuk inisialisasi.

cat <<EOF | tee /etc/rancher/rke2/config.yaml
tls-san:
  - rz-master01.local
  - 192.168.10.20
  - rz-worker01.local
  - 192.168.10.21
  - rz-worker02.local
  - 192.168.10.22
write-kubeconfig-mode: "0600"
etcd-expose-metrics: true
cni:
  - canal
EOF

Buat file manifest untuk Ingress NGINX

cat <<EOF | tee /var/lib/rancher/rke2/server/manifests/rke2-ingress-nginx-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-ingress-nginx
  namespace: kube-system
spec:
  valuesContent: |-
    controller:
      metrics:
        service:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "10254"
      config:
        use-forwarded-headers: "true"
      allowSnippetAnnotations: "true"
EOF

Install RKE2 Server

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" INSTALL_RKE2_CHANNEL="v1.25.12+rke2r1" sh -

Jalankan dan aktifkan RKE2 Agent, ini sekaligus melakukan bootstraping. Membutuhkan waktu kurang lebih 10 menit, tergantung koneksi internet.

sudo systemctl start rke2-server
sudo systemctl enable rke2-server

Export dua variable dibawah ini untuk menjalankan command kubectl

export PATH=$PATH:/var/lib/rancher/rke2/bin
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml

Tambahkan juga ke .bashrc

echo "export PATH=$PATH:/var/lib/rancher/rke2/bin" >> $HOME/.bashrc
echo "export KUBECONFIG=/etc/rancher/rke2/rke2.yaml"  >> $HOME/.bashrc

Untuk menambahkan host lain ke cluster Kubernetes, gunakan token ini.

cat /var/lib/rancher/rke2/server/node-token
...
K108ec5488af002e55bf95565a860b9afb22c90ff4da11efff401fb390af9f330a8::server:748aa8119df0f0f82483afb80d4d4569
...

Setup Worker Node

Buat direktori konfigurasi RKE2

mkdir -p /etc/rancher/rke2/

Buat file manifest untuk join ke cluster Kubernetes

cat <<EOF | tee /etc/rancher/rke2/config.yaml
server: https://192.168.10.20:9345
token: K108ec5488af002e55bf95565a860b9afb22c90ff4da11efff401fb390af9f330a8::server:748aa8119df0f0f82483afb80d4d4569
write-kubeconfig-mode: \"0644\"
EOF

Install RKE2 Agent

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_CHANNEL="v1.25.12+rke2r1" sh -

Jalankan dan aktifkan RKE2 Agent, ini sekaligus melakukan bootstraping. Membutuhkan waktu kurang lebih 10 menit, tergantung koneksi internet.

sudo systemctl start rke2-server
sudo systemctl enable rke2-server

Verifikasi Cluster

Pastikan semua node berstatus Ready dan semua pod Running atau Completed.

kubectl get nodes
...
NAME          STATUS   ROLES                       AGE   VERSION           INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
rz-master01   Ready    control-plane,etcd,master   10h   v1.25.12+rke2r1   192.168.10.20   <none>        Ubuntu 20.04.6 LTS   5.4.0-216-generic   containerd://1.7.1-k3s1
rz-worker01   Ready    <none>                      10h   v1.25.12+rke2r1   192.168.10.21   <none>        Ubuntu 20.04.6 LTS   5.4.0-216-generic   containerd://1.7.1-k3s1
rz-worker02   Ready    <none>                      10h   v1.25.12+rke2r1   192.168.10.22   <none>        Ubuntu 20.04.6 LTS   5.4.0-216-generic   containerd://1.7.1-k3s1
...
kubectl get pods -n kube-system
...
NAME                                                    READY   STATUS      RESTARTS   AGE
cloud-controller-manager-rz-master01                    1/1     Running     0          11h
etcd-rz-master01                                        1/1     Running     0          11h
helm-install-rke2-canal-5gs4q                           0/1     Completed   0          11h
helm-install-rke2-coredns-44rld                         0/1     Completed   0          11h
helm-install-rke2-ingress-nginx-2n7pg                   0/1     Completed   0          11h
helm-install-rke2-metrics-server-g66cp                  0/1     Completed   0          11h
helm-install-rke2-snapshot-controller-6cmzt             0/1     Completed   1          11h
helm-install-rke2-snapshot-controller-crd-tz88k         0/1     Completed   0          11h
helm-install-rke2-snapshot-validation-webhook-6bvl8     0/1     Completed   0          11h
kube-apiserver-rz-master01                              1/1     Running     0          11h
kube-controller-manager-rz-master01                     1/1     Running     0          11h
kube-proxy-rz-master01                                  1/1     Running     0          11h
kube-proxy-rz-worker01                                  1/1     Running     0          11h
kube-proxy-rz-worker02                                  1/1     Running     0          11h
kube-scheduler-rz-master01                              1/1     Running     0          11h
rke2-canal-ds46q                                        2/2     Running     0          11h
rke2-canal-fqmh4                                        2/2     Running     0          11h
rke2-canal-rgvz8                                        2/2     Running     0          11h
rke2-coredns-rke2-coredns-546587f99c-2f7v5              1/1     Running     0          11h
rke2-coredns-rke2-coredns-546587f99c-nmwss              1/1     Running     0          11h
rke2-coredns-rke2-coredns-autoscaler-797c865dbd-d5clk   1/1     Running     0          11h
rke2-ingress-nginx-controller-6xfx4                     1/1     Running     0          11h
rke2-ingress-nginx-controller-dfhzh                     1/1     Running     0          11h
rke2-ingress-nginx-controller-dlxrc                     1/1     Running     0          11h
rke2-metrics-server-78b84fff48-8vccl                    1/1     Running     0          11h
rke2-snapshot-controller-849d69c748-7xtbk               1/1     Running     0          11h
rke2-snapshot-validation-webhook-654f6677b-w94fm        1/1     Running     0          11h
...

Deploy Rancher (Dashboard UI)

Instal Helm 3

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Tambahkan Repo Rancher dan Deploy

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo update
kubectl create namespace cattle-system
helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.kambingjantan.my.id \
  --set bootstrapPassword='kambingjantan' \
  --set tls=external

Cek status pod Rancher. Pastikan semua pod Rancher sudah Running agar UI bisa diakses melalui browser.

kubectl get pods -n cattle-system
...
NAME                                        READY   STATUS    RESTARTS      AGE
rancher-6bf9cffccd-s2nq7                    1/1     Running   2 (11h ago)   11h
rancher-6bf9cffccd-z6zbh                    1/1     Running   0             11h
rancher-6bf9cffccd-zkdch                    1/1     Running   0             11h
rancher-webhook-dfc8596d-p4hkf              1/1     Running   0             10h
system-upgrade-controller-96dbb8b78-9w6qv   1/1     Running   0             10h
...

0
Subscribe to my newsletter

Read articles from Rivaldy Ahmad Azhar directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Rivaldy Ahmad Azhar
Rivaldy Ahmad Azhar