GNU/Linux >> Belajar Linux >  >> Linux

Cara Mengatur Cluster Kubernetes(k8s) di HA dengan Kubeadm

Saat kami menyiapkan Kubernetes (k8s) cluster di tempat untuk lingkungan produksi maka disarankan untuk menyebarkannya dalam ketersediaan tinggi. Di sini ketersediaan tinggi berarti menginstal master atau control plane Kubernetes di HA. Pada artikel ini saya akan mendemonstrasikan cara setup cluster Kubernetes(k8s) di HA (High Availability) dengan utilitas kubeadm.

Untuk demonstrasi, saya telah menggunakan lima sistem CentOS 7 dengan rincian sebagai berikut:

  • k8s-master-1 – Minimal CentOS 7 – 192.168.1.40 – RAM 2 GB, 2vCPU, Disk 40 GB
  • k8s-master-2 – Minimal CentOS 7 – 192.168.1.41 – RAM 2GB, 2vCPU, Disk 40 GB
  • k8s-master-3 – Minimal CentOS 7 – 192.168.1.42 – RAM 2 GB, 2vCPU, Disk 40 GB
  • k8s-worker-1 – Minimal CentOS 7 – 192.168.1.43 – RAM 2GB, 2vCPU, Disk 40 GB
  • k8s-worker-2 – Minimal CentOS 7 – 192.168.1.44 – RAM 2GB, 2vCPU, Disk 40 GB

Catatan:cluster etcd juga dapat dibentuk di luar node master tetapi untuk itu kita memerlukan perangkat keras tambahan, jadi saya menginstal etcd di dalam node master saya.

Persyaratan minimum untuk menyiapkan cluster Sangat K8

  • Instal Kubeadm , kubelet dan kubectl pada semua Node master dan pekerja
  • Konektivitas Jaringan antara node master dan pekerja
  • Konektivitas Internet di semua node
  • Kredensial root atau sudo memberikan hak istimewa kepada pengguna di semua node

Mari masuk ke langkah instalasi dan konfigurasi

Langkah 1) Atur Hostname dan tambahkan entri di file /etc/hosts

Jalankan perintah hostnamectl untuk mengatur nama host pada setiap node, contoh ditunjukkan untuk node k8s-master-1,

$ hostnamectl set-hostname "k8s-master-1"$ exec bash

Demikian pula, jalankan perintah di atas pada node yang tersisa dan atur nama host masing-masing. Setelah nama host disetel di semua node master dan pekerja, tambahkan entri berikut di /etc/hosts file di semua node.

192.168.1.40   k8s-master-1192.168.1.41   k8s-master-2192.168.1.42   k8s-master-3192.168.1.43   k8s-worker-1192.168.1.44   k8s-worker-2192.168.1.45   vip-k8s-master

Saya telah menggunakan satu entri tambahan “192.168.1.45   vip-k8s-master” di file host karena saya akan menggunakan IP dan nama host ini saat mengonfigurasi haproxy dan tetap hidup di semua node master. IP ini akan digunakan sebagai kube-apiserver penyeimbang beban ip. Semua permintaan kube-apiserver akan datang ke IP ini dan kemudian permintaan tersebut akan didistribusikan di antara kube-apiservers backend yang sebenarnya.

Langkah 2) Instal dan Konfigurasi Keepalive dan HAProxy di semua node master / control plane

Instal keepalived dan haproxy pada setiap node master menggunakan perintah yum berikut,

$ sudo yum install haproxy keepalived -y

Konfigurasi Keepalive di k8s-master-1 terlebih dahulu, buat script check_apiserver.sh akan konten berikut,

[[email protected] ~]$ sudo vi /etc/keepalived/check_apiserver.sh#!/bin/shAPISERVER_VIP=192.168.1.45APISERVER_DEST_PORT=6443errorExit() {    echo "*** $*" 1>&2    exit 1 }curl --silent --max-time 2 --insecure https://localhost:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Kesalahan DAPATKAN https://localhost:${APISERVER_DEST_PORT}/"jika ip addr | grep -q ${APISERVER_VIP}; lalu    curl --silent --max-time 2 --insecure https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Kesalahan DAPATKAN https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/"fi

simpan dan keluar dari file.

Setel izin yang dapat dieksekusi

$ sudo chmod +x /etc/keepalive/check_apiserver.sh

Ambil cadangan file keepalived.conf lalu potong file tersebut.

[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-org[[email protected] ~]$ sudo sh -c '> /etc/keepalived/ keepalived.conf'

Sekarang rekatkan konten berikut ke file /etc/keepalived/keepalived.conf

[[email protected] ~]$ sudo vi /etc/keepalived/keepalived.conf! /etc/keepalive/keepalived.conf! File Konfigurasi untuk keepalivedglobal_defs {    router_id LVS_DEVEL}vrrp_script check_apiserver {  script "/etc/keepalived/check_apiserver.sh"  interval 3  weight -2  fall 10  rise 2}vrrp_instance VI_1 {    state MASTER    interface enp0   _ id aupass autentikasi      prioritas id dilindungi]##D321! }    virtual_ipaddress {        192.168.1.45/24    }    track_script {        check_apiserver    }}

Simpan dan tutup file.

Catatan: Hanya dua parameter dari file ini yang perlu diubah untuk master-2 &3 node. Negara Bagian akan menjadi BUDAK untuk master 2 dan 3, prioritas masing-masing adalah 254 dan 253.

Konfigurasi HAProxy pada node k8s-master-1, edit file konfigurasinya dan tambahkan konten berikut:

[[email protected] ~]$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org

Hapus semua baris setelah bagian default dan tambahkan baris berikut

[[email protected] ~]$ sudo vi /etc/haproxy/haproxy.cfg#---------------------------- -----------------------------------------# frontend apiserver yang diproksi ke master# -------------------------------------------------- -------------------frontend apiserver    bind *:8443    mode tcp    option tcplog    default_backend apiserver#------------------ -------------------------------------------------- -# penyeimbangan round robin untuk apiserver#------------------------------------------ ---------------------------backend apiserver    option httpchk GET /healthz    http-check expect status 200    mode tcp    option ssl-hello-chk    balance     roundrobin server k8s-master-1 192.168.1.40:6443 periksa        server k8s-master-2 192.168.1.41:6443 periksa        server k8s-master-3 192.168.1.42:6443 periksa

Simpan dan keluar dari file

Sekarang salin tiga file ini (check_apiserver.sh , keepalived.conf dan haproxy.cfg) dari k8s-master-1 ke k8s-master-2 &3

Jalankan for loop berikut untuk scp file-file ini ke master 2 dan 3

[[email protected] ~]$ for f in k8s-master-2 k8s-master-3; do scp /etc/keepalived/check_apiserver.sh /etc/keepalived/keepalived.conf [email protected]$f:/etc/keepalived; scp /etc/haproxy/haproxy.cfg [dilindungi email]$f:/etc/haproxy; selesai

Catatan: Jangan lupa ubah dua parameter di file keepalived.conf yang sudah kita bahas di atas untuk k8s-master-2 &3

Jika firewall berjalan pada node master, tambahkan aturan firewall berikut pada ketiga node master

$ sudo firewall-cmd --add-rich-rule='rule protokol value="vrrp" accept' --permanent$ sudo firewall-cmd --permanent --add-port=8443/tcp$ sudo firewall- cmd --reload

Sekarang Akhirnya mulai dan aktifkan layanan keepalived dan haproxy pada ketiga node master menggunakan perintah berikut:

$ sudo systemctl aktifkan keepalived --now$ sudo systemctl aktifkan haproxy --now

Setelah layanan ini dimulai dengan sukses, verifikasi apakah VIP (IP virtual) diaktifkan pada node k8s-master-1 karena kami telah menandai k8s-master-1 sebagai node MASTER dalam file konfigurasi keepalive.

Sempurna, output di atas mengonfirmasi bahwa VIP telah diaktifkan di k8s-master-1.

Langkah 3) Nonaktifkan Swap, setel SELinux sebagai aturan permisif dan firewall untuk node Master dan pekerja

Nonaktifkan Swap Space pada semua node termasuk node pekerja, Jalankan perintah berikut

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

Tetapkan SELinux sebagai Permisif pada semua node master dan pekerja, jalankan perintah berikut,

$ sudo setenforce 0$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

Aturan Firewall untuk Node Master:

Jika firewall berjalan pada node master, maka izinkan port berikut di firewall,

Jalankan perintah firewall-cmd berikut di semua node master,

$ sudo firewall-cmd --permanent --add-port=6443/tcp$ sudo firewall-cmd --permanent --add-port=2379-2380/tcp$ sudo firewall-cmd --permanent --add -port=10250/tcp$ sudo firewall-cmd --permanent --add-port=10251/tcp$ sudo firewall-cmd --permanent --add-port=10252/tcp$ sudo firewall-cmd --permanent -- add-port=179/tcp$ sudo firewall-cmd --permanent --add-port=4789/udp$ sudo firewall-cmd --reload$ sudo modprobe br_netfilter$ sudo sh -c "echo '1'> /proc/ sys/net/bridge/bridge-nf-call-iptables"$ sudo sh -c "echo '1'> /proc/sys/net/ipv4/ip_forward"

Aturan Firewall untuk node Pekerja:

Jika firewall berjalan pada node pekerja, maka izinkan port berikut di firewall pada semua node pekerja

Jalankan perintah berikut pada semua node pekerja,

$ sudo firewall-cmd --permanent --add-port=10250/tcp$ sudo firewall-cmd --permanent --add-port=30000-32767/tcp                                     -port=179/tcp$ sudo firewall-cmd --permanent --add-port=4789/udp$ sudo firewall-cmd --reload$ sudo modprobe br_netfilter$ sudo sh -c "echo '1'> /proc/sys /net/bridge/bridge-nf-call-iptables"$ sudo sh -c "echo '1'> /proc/sys/net/ipv4/ip_forward"

Langkah 4) Instal Docker Container Run Time (CRI) pada Master &Worker Nodes

Instal Docker (Container Run Time) di semua node master dan node pekerja, jalankan perintah berikut,

$ sudo yum install -y yum-utils$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo$ sudo yum install docker-ce -y

Jalankan perintah systemctl berikut untuk memulai dan mengaktifkan layanan buruh pelabuhan, (Jalankan perintah ini juga pada semua node master dan pekerja)

$ sudo systemctl aktifkan buruh pelabuhan --now

Sekarang, mari kita instal kubeadm , kubelet dan kubectl di langkah selanjutnya

Langkah 5) Instal Kubeadm, kubelet dan kubectl

Instal kubeadm, kubelet dan kubectl di semua node master serta node pekerja. Sebelum menginstal paket-paket ini terlebih dahulu, kita harus mengkonfigurasi repositori Kubernetes, jalankan perintah berikut pada setiap node master dan pekerja,

kucing < 

Sekarang jalankan perintah yum di bawah ini untuk menginstal paket-paket ini,

$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

Jalankan perintah systemctl berikut untuk mengaktifkan layanan kubelet di semua node ( node master dan pekerja)

$ sudo systemctl aktifkan kubelet --now

Langkah 6) Inisialisasi Cluster Kubernetes dari node master pertama

Sekarang pindah ke master node / control plane pertama dan jalankan perintah berikut,

[[email protected] ~]$ sudo kubeadm init --control-plane-endpoint "vip-k8s-master:8443" --upload-certs

Pada perintah di atas, –control-plane-endpoint atur nama dns dan port untuk penyeimbang beban (kube-apiserver), dalam kasus saya nama dns adalah “vip-k8s-master” dan port adalah “8443”, selain ini ‘–upload-certs ' akan membagikan sertifikat di antara node master secara otomatis,

Output dari perintah kubeadm akan seperti di bawah ini:

Bagus, output di atas mengonfirmasi bahwa cluster Kubernetes telah berhasil diinisialisasi. Dalam output, kami juga mendapatkan perintah untuk node master dan pekerja lain untuk bergabung dengan cluster.

Catatan: Disarankan untuk menyalin output ini ke file teks untuk referensi di masa mendatang.

Jalankan perintah berikut untuk mengizinkan pengguna lokal menggunakan perintah kubectl untuk berinteraksi dengan cluster,

[[email protected] ~]$ mkdir -p $HOME/.kube[[email protected] ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[[email protected ] ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config[[email protected] ~]$

Sekarang, Mari kita gunakan jaringan pod (CNI – Antarmuka Jaringan Kontainer), dalam kasus saya, saya akan menggunakan addon belacu sebagai jaringan pod, jalankan perintah kubectl berikut

[[email protected] ~]$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

Setelah jaringan pod berhasil di-deploy, tambahkan dua node master yang tersisa ke cluster. Cukup salin perintah untuk master node untuk bergabung dengan cluster dari output dan paste di k8s-master-2 dan k8s-master-3, contoh di bawah ini

[[email protected] ~]$ sudo kubeadm join vip-k8s-master:8443 --token tun848.2hlz8uo37jgy5zqt  --discovery-token-ca-cert-hash sha256:d035f143d4bea38d54a3d827729954ab kunci a0b31bb346e8d819558f8204d940782e497892ec9d3d74f08d1c0376dc3d3ef4

Outputnya adalah:

Jalankan juga perintah yang sama pada k8s-master-3,

[[email protected] ~]$ sudo kubeadm join vip-k8s-master:8443 --token tun848.2hlz8uo37jgy5zqt  --discovery-token-ca-cert-hash sha256:d035f143d4bea38d54a3d827729954ab kunci a0b31bb346e8d819558f8204d940782e497892ec9d3d74f08d1c0376dc3d3ef4

Outputnya adalah:

Output di atas mengkonfirmasi bahwa k8s-master-3 juga telah berhasil bergabung dengan cluster. Mari kita verifikasi status node dari perintah kubectl, buka node master-1 dan jalankan perintah di bawah ini,

[[email protected] ~]$ kubectl get nodesNAME          PERAN STATUS   USIA     VERSIONk8s-master-1   Siap    master   31m    v1.18.6k8s-master-2   Siap   master   10m     vmaster-38.6k     master [[dilindungi email] ~]$

Sempurna, ketiga node master atau control plane kami sudah siap dan bergabung dengan cluster.

Langkah 7) Bergabung dengan node Worker ke cluster Kubernetes

Untuk menggabungkan node pekerja ke cluster, salin perintah untuk node pekerja dari output dan melewatinya di kedua node pekerja, contoh ditunjukkan di bawah ini:

[[dilindungi email] ~]$ sudo kubeadm join vip-k8s-master:8443 --token tun848.2hlz8uo37jgy5zqt --discovery-token-ca-cert-hash sha256:d035f143d4bea38d54a3d827729954ab kubeadm bergabung dengan vip-k8s-master:8443 --token tun848.2hlz8uo37jgy5zqt --discovery-token-ca-cert-hash sha256:d035f143d4bea38d54a3d827729954ab4b1d9620631ee330b8243fbc

Outputnya akan seperti di bawah ini:

Sekarang menuju ke node k8s-master-1 dan jalankan perintah kubectl di bawah ini untuk mendapatkan node status worker,

[[email protected] ~]$ kubectl get nodesNAME          STATUS   PERAN    USIA     VERSIONk8s-master-1   Siap    master   43m     v1.18.6k8s-master-2   Siap   master   21m     vmaster-38.6k     master k8s-worker-1   Siap       6m11s   v1.18.6k8s-worker-2   Siap       5m22s   v1.18.6[[email protected] ~]$

Output di atas mengkonfirmasi bahwa kedua pekerja juga telah bergabung dengan cluster dan dalam kondisi siap.

Jalankan perintah di bawah ini untuk memverifikasi status infra pod yang di-deploy di namespace kube-system.

[[email protected] ~]$ kubectl get pods -n kube-system

Langkah 8) Uji cluster Kubernetes yang sangat tersedia

Mari kita coba sambungkan ke cluster dari mesin jarak jauh (sistem CentOS) menggunakan nama dan port dns penyeimbang beban. Pada mesin remote terlebih dahulu, kita harus menginstal paket kubectl. Jalankan perintah di bawah ini untuk mengatur repositori kubernetes.

kucing < 

Sekarang tambahkan entri berikut di file /etc/host,

192.168.1.45   vip-k8s-master

Buat direktori kube dan salin file /etc/kubernetes/admin.conf dari node k8s-master-1 ke $HOME/.kube/config ,

$ mkdir -p $HOME/.kube$ scp [dilindungi email]:/etc/kubernetes/admin.conf $HOME/.kube/config$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Sekarang jalankan perintah “kubectl get node”,

[[email protected] ~]$ kubectl get nodesNAME          STATUS   PERAN    USIA    VERSIONk8s-master-1   Siap    master   3h5m   v1.18.6k8s-master-2   Siap    master   163m    v1.18.6k  Siap master   163m   v1.18.6k k8s-worker-1   Siap       148m   v1.18.6k8s-worker-2   Siap       147m   v1.18.6[[email protected] ~]$

Mari buat penerapan dengan nama nginx-lab dengan gambar ‘nginx ' dan kemudian mengekspos penerapan ini sebagai layanan jenis “NodePort

[[email protected] ~]$ kubectl create deployment nginx-lab --image=nginxdeployment.apps/nginx-lab created[[email protected] ~]$[[email protected] ~]$ kubectl get deployments.apps NGINX-LABNAME SIAP TRE-TO-TANGGAL TERSEBUT AGENGINX-LAB 1/1 1 1 59S [[Email Dilindungi] ~] $ Kubectl Dapatkan Podsname Siap Status Restart Agenginx-Lab-5DF4577D49-RZV9Q 1/1 Berjalan 0 68Stest-844B6666C-PXPH9Q 1/1 1/1     Berlari   3         154m[[email protected] ~]$

Mari kita coba skala replika dari 1 hingga 4, jalankan perintah berikut,

[[email protected] ~]$ kubectl scale deployment nginx-lab --replicas=4deployment.apps/nginx-lab scaled[[email protected] ~]$[[email protected] ~]$ kubectl get deployments.apps nginx-labNAME        SIAP   TERBARU   TERSEDIA   AGEnginx-lab   4/4     4          4          3m10s[[email protected] ~]$

Sekarang ekspos penerapan sebagai layanan, jalankan

[[email protected] ~]$ kubectl expose penerapan nginx-lab --name=nginx-lab --type=NodePort --port=80 --target-port=80service/nginx-lab terkena[[email protected ] ~]$

Dapatkan detail port dan coba akses server web nginx menggunakan curl,

[[email protected] ~]$ kubectl get svc nginx-labNAME       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGEnginx-lab   NodePort   10.102.3[     

Untuk mengakses server web nginx, kita dapat menggunakan IP dan port node master atau pekerja sebagai “31766”

[[email protected] ~]$ curl http://192.168.1.44:31766

Outputnya akan seperti di bawah ini:

Sempurna, itu konfirmasi bahwa kami telah berhasil menerapkan cluster Kubernetes yang sangat tersedia dengan kubeadm di server CentOS 7. Jangan ragu untuk membagikan umpan balik dan komentar Anda yang berharga.

Baca Juga :Cara Menyetel Pengontrol Ingress NGINX di Kubernetes


Linux
  1. Cara Mengatur Cluster Kubernetes dengan Rancher

  2. Siapkan cluster Kubernetes dengan Rancher

  3. Setup Cluster Kubernetes di Ubuntu 20.04 menggunakan kubeadm

  1. Cara Memasang Cluster Kubernetes (k8s) di RHEL 8

  2. Cara Menginstal Kubernetes(k8s) dengan Minikube di CentOS 8

  3. Cara Menyiapkan Cluster Kubernetes di Google Cloud Platform (GCP)

  1. Cara Mengatur Ingress Controller NGINX di Kubernetes

  2. Cara Mengatur Registri Docker Pribadi di Kubernetes (k8s)

  3. Cara mengatur kluster Apache Tomcat dengan 3 Node di Ubuntu