Deploy HA Kubernetes Cluster di Rocky Linux 8 menggunakan RKE2

Kubernetes , disingkat K8s adalah alat sumber terbuka yang digunakan untuk mengatur beban kerja dalam container agar dapat dijalankan pada sekelompok host. Ini digunakan untuk mengotomatiskan penerapan sistem, skala, dan mengelola aplikasi kemas.

Biasanya, Kubernetes mendistribusikan beban kerja di seluruh cluster dan mengotomatiskan kebutuhan jaringan container. Ini juga mengalokasikan penyimpanan dan volume persisten dan bekerja terus menerus untuk mempertahankan keadaan aplikasi kontainer yang diinginkan.

Ada beberapa alat yang dapat digunakan untuk menyiapkan cluster Kubernetes. Alat-alat ini termasuk Minikube , Kubeadm , Kubernetes on AWS (Kube-AWS), Amazon EKS dll. Dalam panduan ini, kita akan memandu cara menerapkan HA Kubernetes Cluster di Rocky Linux 8 menggunakan RKE2.

Apa itu RKE2?

RKE adalah singkatan dari Rancher Kubernetes Engine . RKE2 juga dikenal sebagai (RKE Pemerintah) adalah kombinasi dari RKE1 dan K3s. Ini mewarisi kegunaan, kemudahan pengoperasian, dan model penerapan dari K3 dan keselarasan yang erat dengan Kubernet hulu dari RKE1. Biasanya, RKE2 tidak bergantung pada buruh pelabuhan, ia meluncurkan komponen bidang kontrol sebagai pod statis yang dikelola oleh kubelet.

Diagram di bawah ini akan membantu Anda memahami topologi cluster RKE2.

RKE2 mengirimkan sejumlah komponen sumber terbuka yang meliputi:

  • K3s
    • Pengendali Helm
  • K8s
    • Server API
    • Manajer Pengontrol
    • kubelet
    • PenjadwalMenyiapkan Node Linux
    • Proksi
  • dll
  • containerd/cri
  • runc
  • Kemudi
  • Server Metrik
  • Pengontrol Masuknya NGINX
  • CoreDNS
  • CNI: Kanal (Calico & Flanel), Cilium atau Calico

Persyaratan sistem

Gunakan sistem yang memenuhi persyaratan di bawah ini:

  • RAM: Minimum 4GB (kami merekomendasikan setidaknya 8GB)
  • CPU: 2 Minimum (kami merekomendasikan setidaknya 4CPU)
  • 3 Rocky Linux 8 Node
  • Nol atau lebih node agen yang dirancang untuk menjalankan aplikasi dan layanan Anda
  • Sebuah penyeimbang beban untuk mengarahkan lalu lintas front-end ke tiga node.
  • Catatan DNS untuk memetakan URL ke penyeimbang beban

Langkah 1 – Siapkan Rocky Linux 8 Node

Untuk panduan ini, kami akan menggunakan 3 node Rocky Linux, penyeimbang beban, dan agen RKE2 (1 atau lebih).

TUGAS NAMA HOST ALAMAT IP
Node Server 1 server1.computingforgeeks.com 192.168.205.2
Node Server 2 server2.computingforgeeks.com 192.168.205.3
Node Server 3 server3.computingforgeeks.com 192.168.205.33
Penyeimbang Beban rke.computingforgeeks.com 192.168.205.9
Node Agen1 agent1.computingforgeeks.com 192.168.205.43
Agen Node2 agent2.computingforgeeks.com 192.168.205.44

Atur nama host seperti yang ditunjukkan:

##On Node1 sudo hostnamectl set-hostname server1.computingforgeeks.com ##On Node2 sudo hostnamectl set-hostname server2.computingforgeeks.com ##On Node3 sudo hostnamectl set-hostname server3.computingforgeeks.com ##On Loadbalancer(Node4) sudo hostnamectl set-hostname rke.computingforgeeks.com ##On Node5 sudo hostnamectl set-hostname agent1.computingforgeeks.com ##On Node6 sudo hostnamectl set-hostname agent2.computingforgeeks.com

Tambahkan nama host ke /etc/hosts di setiap node

$ sudo vim /etc/hosts 192.168.205.2 server1.computingforgeeks.com 192.168.205.3 server2.computingforgeeks.com 192.168.205.33 server3.computingforgeeks.com 192.168.205.43 agent1.computingforgeeks.com 192.168.205.44 agent2.computingforgeeks.com 192.168.205.9 rke.computingforgeeks.com

Konfigurasikan firewall pada semua node seperti yang ditunjukkan:

sudo systemctl stop firewalld sudo systemctl disable firewalld sudo systemctl start nftables sudo systemctl enable nftables

Langkah 2 – Konfigurasikan Alamat Pendaftaran Tetap

Untuk mencapai ketersediaan tinggi, Anda harus menyiapkan jumlah node bidang server yang ganjil (menjalankan etcd, Kubernetes API, dan layanan bidang kontrol lainnya). Node server dan node agen lainnya memerlukan URL yang dapat digunakan untuk mendaftar. Ini adalah IP atau nama domain dari salah satu node kontrol. Hal ini terutama dilakukan untuk mempertahankan kuorum sehingga cluster dapat kehilangan koneksi dengan salah satu node tanpa mempengaruhi fungsionalitas cluster.

Ini dapat dicapai dengan menggunakan yang berikut:

  • Penyeimbang beban lapisan 4 (TCP)
  • DNS round-robin
  • Alamat IP virtual atau elastis

Dalam panduan ini, kami akan mengonfigurasi NGINX sebagai penyeimbang beban layer 4 (TCP) untuk meneruskan koneksi ke salah satu node RKE.

Instal dan konfigurasikan Nginx di Node4

sudo yum install nginx

Buat file konfigurasi:

sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak sudo vim /etc/nginx/nginx.conf

Buat file Nginx baru dengan mengganti baris di bawah ini jika diperlukan:

user nginx; worker_processes 4; worker_rlimit_nofile 40000; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 8192; } stream { upstream backend { least_conn; server <IP_NODE_1>:9345 max_fails=3 fail_timeout=5s; server <IP_NODE_2>:9345 max_fails=3 fail_timeout=5s; server <IP_NODE_3>:9345 max_fails=3 fail_timeout=5s; } # This server accepts all traffic to port 9345 and passes it to the upstream. # Notice that the upstream name and the proxy_pass need to match. server { listen 9345; proxy_pass backend; } upstream rancher_api { least_conn; server <IP_NODE_1>:6443 max_fails=3 fail_timeout=5s; server <IP_NODE_2>:6443 max_fails=3 fail_timeout=5s; server <IP_NODE_3>:6443 max_fails=3 fail_timeout=5s; } server { listen 6443; proxy_pass rancher_api; } upstream rancher_http { least_conn; server 192.168.205.2:80 max_fails=3 fail_timeout=5s; server 192.168.205.3:80 max_fails=3 fail_timeout=5s; server 192.168.205.33:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_http; } upstream rancher_https { least_conn; server 192.168.205.2:443 max_fails=3 fail_timeout=5s; server 192.168.205.3:443 max_fails=3 fail_timeout=5s; server 192.168.205.33:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_https; } }

Simpan file, nonaktifkan SELinux dan mulai ulang Nginx:

 

sudo setenforce 0 sudo systemctl restart nginx

Langkah 3 – Unduh skrip penginstal di Rocky Linux 8 Nodes

Semua node Rocky Linux 8 yang dimaksudkan untuk penggunaan ini perlu dikonfigurasi dengan repositori RKE2 yang menyediakan paket yang diperlukan. Instal alat curl di sistem Anda:

sudo yum -y install curl vim wget

Dengan curl unduh skrip yang digunakan untuk menginstal server RKE2 di server Rocky Linux 8 Anda.

curl -sfL https://get.rke2.io --output install.sh

Jadikan skrip dapat dieksekusi:

chmod +x install.sh

Untuk melihat opsi penggunaan skrip, jalankan:

 

less ./install.sh 

Setelah ditambahkan, Anda dapat menginstal dan mengonfigurasi server dan agen RKE2 pada node yang diinginkan.

Langkah 4 – Siapkan Node Server Pertama (Master Node)

Instal server RKE2:

sudo INSTALL_RKE2_TYPE=server ./install.sh

Keluaran yang diharapkan:

[INFO] finding release for channel stable [INFO] using 1.23 series from channel stable Rocky Linux 8 - AppStream 19 kB/s | 4.8 kB 00:00 Rocky Linux 8 - AppStream 11 MB/s | 9.6 MB 00:00 Rocky Linux 8 - BaseOS 18 kB/s | 4.3 kB 00:00 Rocky Linux 8 - BaseOS 11 MB/s | 6.7 MB 00:00 Rocky Linux 8 - Extras 13 kB/s | 3.5 kB 00:00 Rocky Linux 8 - Extras 41 kB/s | 11 kB 00:00 Rancher RKE2 Common (stable) 1.7 kB/s | 1.7 kB 00:00 Rancher RKE2 1.23 (stable) 4.8 kB/s | 4.6 kB 00:00 Dependencies resolved. ====================================================================================================================================================================================================== ....... Transaction Summary ====================================================================================================================================================================================================== Install 5 Packages Total download size: 34 M Installed size: 166 M Downloading Packages: .....

Setelah terinstal, Anda perlu membuat file konfigurasi secara manual. File konfigurasi berisi tls-sanparameter yang menghindari kesalahan sertifikat dengan alamat pendaftaran tetap.

 

File konfigurasi dapat dibuat dengan perintah:

sudo vim /etc/rancher/rke2/config.yaml

Tambahkan baris di bawah ini ke file yang diganti jika diperlukan.

write-kubeconfig-mode: "0644" tls-san: - rke.computingforgeeks.com - 192.168.205.9

Menggantirke.computingforgeeks.comdengan alamat pendaftaran tetap Anda dan192.168.205.9dengan alamat IP-nya.

Simpan file dan mulai layanan;

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

Konfirmasi status layanan setelah memulainya:

 

$ systemctl status rke2-server ● rke2-server.service - Rancher Kubernetes Engine v2 (server) Loaded: loaded (/usr/lib/systemd/system/rke2-server.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2022-08-27 10:17:17 UTC; 1min 32s ago Docs: https://github.com/rancher/rke2#readme Process: 3582 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS) Process: 3576 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS) Process: 3573 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS) Main PID: 3587 (rke2) Tasks: 163 Memory: 1.8G CGroup: /system.slice/rke2-server.service ├─3587 /usr/bin/rke2 server ....

Installkubectl

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin

Ekspor konfigurasi:

 

$ vim ~/.bashrc #Add line below export PATH=$PATH:/var/lib/rancher/rke2/bin export KUBECONFIG=/etc/rancher/rke2/rke2.yaml #Source bashrc file $ source ~/.bashrc

Setelah beberapa waktu, periksa apakah node dan pod sudah aktif:

kubectl get nodes kubectl get pods -A

Contoh Keluaran:

Dapatkan tokennya:

 

$ sudo cat /var/lib/rancher/rke2/server/node-token K1079187d01ac73b1a17261a475cb1b8486144543fc59a189e0c4533ef252a26450::server:33f5c1a2b7721992be25e340ded19cac

Mengakses Cluster dari Luar dengan kubectl

Salin /etc/rancher/rke2/rke2.yamlpada mesin Anda yang terletak di luar cluster sebagai ~/.kube/config. Kemudian ganti 127.0.0.1 dengan IP atau nama host server RKE2 Anda. kubectl sekarang dapat mengelola cluster RKE2 Anda.

scp /etc/rancher/rke2/rke2.yaml [email protected]:~/.kube/config

Langkah 5 – Siapkan Node Server tambahan (Master Nodes)

Sekarang instal RKE2 pada dua node server lainnya;

curl -sfL https://get.rke2.io --output install.sh chmod +x install.sh sudo INSTALL_RKE2_TYPE=server ./install.sh

Setelah terinstal, buat file konfigurasi:

 

sudo vim /etc/rancher/rke2/config.yaml

Tambahkan baris di bawah ini ke file

server: https://rke.computingforgeeks.com:9345 token: [token from /var/lib/rancher/rke2/server/node-token on server node 1] write-kubeconfig-mode: "0644" tls-san: - rke.computingforgeeks.com

Jika Anda tidak memiliki catatan server DNS A untuk Load Balancer dalam /etc/hostsfile:

$ sudo vi /etc/hosts 192.168.205.9 rke.computingforgeeks.com

Simpan file dan mulai ulang rke2-server satu per satu

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

Setelah beberapa waktu, periksa status node

Kami memiliki 3 node master yang dikonfigurasi.

Langkah 6 – Siapkan Node Agen (Node Pekerja)

Untuk menyiapkan node agen, instal paket agen RKE2 menggunakan perintah di bawah ini:

curl -sfL https://get.rke2.io --output install.sh chmod +x install.sh sudo INSTALL_RKE2_TYPE=agent ./install.sh

Jika Anda tidak memiliki catatan server DNS A untuk Load Balancer dalam /etc/hostsfile:

$ sudo vi /etc/hosts 192.168.205.9 rke.computingforgeeks.com

Buat dan ubah file konfigurasi agar sesuai dengan penggunaan Anda.

$ sudo vim /etc/rancher/rke2/config.yaml server: https://rke.computingforgeeks.com:9345 token: [token from /var/lib/rancher/rke2/server/node-token on server node 1]

Mulai dan aktifkan layanan:

sudo systemctl start rke2-agent sudo systemctl enable rke2-agent

Periksa node:

 

Dari output, kami memiliki satu node agen yang ditambahkan ke cluster.

Periksa polong.

Output ini menunjukkan semua pod yang tersedia, kami memiliki pod untuk ingress rke2 dan metrik yang di-deploy secara default di namespace sistem kube.

Langkah 7 – Terapkan Aplikasi.

Setelah konfigurasi di atas dibuat, terapkan dan aplikasikan di cluster Anda. Untuk panduan ini, kami akan menerapkan aplikasi demo Nginx.

kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 EOF

Periksa apakah pod sudah habis:

 

$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-cc7df4f8f-frv65 1/1 Running 0 13s nginx-deployment-cc7df4f8f-l9xdb 1/1 Running 0 13s

Sekarang ekspos layanan:

$ kubectl expose deployment nginx-deployment --type=NodePort --port=80 service/nginx-deployment exposed

Dapatkan port tempat layanan telah diekspos:

$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 85m nginx-deployment NodePort 10.43.135.164 <none> 80:31042/TCP 2s

Dalam kasus saya, layanan telah diekspos ke port 31042 . Akses aplikasi menggunakan pengontrol atau alamat IP node pekerja dengan sintaks http://IP_Address:31042

 

Itu saja untuk saat ini.

Anda telah berhasil men-deploy HA Kubernetes Cluster di Rocky Linux 8 menggunakan RKE2. Sekarang lanjutkan dan jelajahi lebih banyak menggunakan panduan di bawah ini: