Menyebarkan Kubernetes HA-cluster pada Baremetal menggunakan Kubeadm dan Keepalived (panduan sederhana)

Artikel ini adalah interpretasi gratis dari cluster resmi Membuat Sangat Tersedia dengan tutorial kubeadm untuk node bidang kontrol Stacked . Saya tidak suka bahasa yang rumit dan contoh yang digunakan di dalamnya, jadi saya menulis panduan saya.


Jika Anda memiliki pertanyaan atau tidak jelas, periksa dokumentasi resmi atau tanyakan ke Google . Semua tahapan dijelaskan di sini dalam bentuk yang paling sederhana dan terkendali.


Masukkan data


Kami memiliki 3 node:


  • simpul1 (10.9.8.11)
  • simpul2 (10.9.8.12)
  • simpul3 (10.9.8.13)

Kami akan membuat satu alamat IP yang toleran terhadap kesalahan untuk mereka:


  • 10.9.8.10

Kemudian instal etcd cluster dan Kubernetes pada mereka.


Setup Balancer


Pertama-tama, kita perlu menginstal Keepalived di ketiga node:


apt-get -y install keepalived 

Sekarang kita menulis config /etc/keepalived/keepalived.conf :


 vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 100 advert_int 1 nopreempt authentication { auth_type AH auth_pass iech6peeBu6Thoo8xaih } virtual_ipaddress { 10.9.8.10 } } 

Kami mengaktifkan dan menjalankan Keepalived di ketiga node:


 systemctl start keepalived systemctl enable keepalived 

Sekarang kita dapat memverifikasi bahwa salah satu node menerima alamat 10.9.8.10 pada antarmuka eth0 .


Sebarkan Cluster Kubernetes


UPD: Artikel ini ditulis untuk v1.12 dan meskipun diadaptasi untuk v1.13 , sekarang prosedur untuk menyebarkan cluster terlihat jauh lebih sederhana dan lebih logis.
Lihatlah panduan sederhana ini.

saat ini semuanya bisa lebih mudah sekarang


Pastikan bahwa paket Kubernetes terbaru diinstal pada semua node:


 apt-get -y install kubeadm kubelet kubectl 

Juga hentikan daemon Keepalived di semua node kecuali yang terakhir .


 systemctl stop keepalived 

Catatan pertama


Sekarang kita akan menghasilkan konfigurasi untuk kubeadm (untuk setiap node master kita membutuhkan konfigurasi terpisah):


 CLUSTER_IP=10.9.8.10 NODES=(node1 node2 node3) IPS=(10.9.8.11 10.9.8.12 10.9.8.13) POD_SUBNET="192.168.0.0/16" for i in "${!NODES[@]}"; do HOST=${IPS[$i]} NAME=${NODES[$i]} INITIAL_CLUSTER=$( for j in "${!NODES[@]}"; do echo "${NODES[$j]}=https://${IPS[$j]}:2380" done | xargs | tr ' ' , ) cat > kubeadm-config-${NODES[$i]}.yaml <<EOT apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: stable apiServer: certSANs: - "${CLUSTER_IP}" controlPlaneEndpoint: "${CLUSTER_IP}:6443" etcd: local: extraArgs: initial-cluster: "${INITIAL_CLUSTER}" initial-cluster-state: new name: ${NODES[$i]} listen-peer-urls: "https://${IPS[$i]}:2380" listen-client-urls: "https://127.0.0.1:2379,https://${IPS[$i]}:2379" advertise-client-urls: "https://${IPS[$i]}:2379" initial-advertise-peer-urls: "https://${IPS[$i]}:2380" serverCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" peerCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" networking: podSubnet: "${POD_SUBNET}" EOT done 

Kami menginisiasi etcd pada node pertama, menghasilkan sertifikat dan admin-config


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local $kubeadm init phase kubeconfig admin systemctl start kubelet 

Kami menyalin sertifikat yang dihasilkan dan konfigurasi kubeadm ke node bidang kontrol yang tersisa.


 NODES="node2 node3" CERTS=$(find /etc/kubernetes/pki/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') ETCD_CERTS=$(find /etc/kubernetes/pki/etcd/ -maxdepth 1 -name '*ca.*') for NODE in $NODES; do ssh $NODE mkdir -p /etc/kubernetes/pki/etcd scp $CERTS $NODE:/etc/kubernetes/pki/ scp $ETCD_CERTS $NODE:/etc/kubernetes/pki/etcd/ scp /etc/kubernetes/admin.conf $NODE:/etc/kubernetes scp kubeadm-config-$NODE.yaml $NODE: done 

Node kedua


Kami menginisiasi etcd pada node kedua:


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local systemctl start kubelet 

Simpul ketiga


Kami memulai master Kubernet dengan etcd pada node terakhir.


(pastikan bahwa IP penyeimbang diatur dan menunjuk ke simpul ini)


 kubeadm init --config kubeadm-config-${HOSTNAME}.yaml 

Node pertama dan kedua


Sekarang kita dapat memulai master Kubernet pada dua node pertama:


 kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase kubeconfig all $kubeadm init phase control-plane all $kubeadm init phase mark-control-plane $kubeadm init phase upload-config kubeadm 

Dan juga menjalankan daemon Keepalived:


 systemctl start keepalived 

Source: https://habr.com/ru/post/id427941/


All Articles