Stellen Sie den Kubernetes HA-Cluster auf Baremetal mit Kubeadm und Keepalived bereit (einfache Anleitung).

Dieser Artikel ist eine kostenlose Interpretation des offiziellen Tutorials zum Erstellen hochverfügbarer Cluster mit Kubeadm für gestapelte Steuerebenenknoten . Ich mag die komplexe Sprache und die darin verwendeten Beispiele nicht, deshalb habe ich meinen Leitfaden geschrieben.


Wenn Sie Fragen haben oder unklar sind, überprüfen Sie die offizielle Dokumentation oder fragen Sie Google . Alle Stufen werden hier in der einfachsten und zurückhaltendsten Form beschrieben.


Daten eingeben


Wir haben 3 Knoten:


  • Knoten1 (10.9.8.11)
  • Knoten2 (10.9.8.12)
  • Knoten 3 (10.9.8.13)

Wir werden eine fehlertolerante IP-Adresse für sie erstellen:


  • 10.9.8.10

Installieren Sie dann den etcd-Cluster und Kubernetes darauf.


Balancer-Setup


Zunächst müssen wir Keepalived auf allen drei Knoten installieren:


apt-get -y install keepalived 

Jetzt schreiben wir die 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 } } 

Wir aktivieren und führen Keepalived auf allen drei Knoten aus:


 systemctl start keepalived systemctl enable keepalived 

Jetzt können wir überprüfen, ob einer der Knoten die Adresse 10.9.8.10 auf der eth0 Schnittstelle erhalten hat.


Stellen Sie den Kubernetes-Cluster bereit


UPD: Dieser Artikel wurde für Version 1.12 geschrieben und obwohl er für Version 1.13 angepasst wurde, sieht das Verfahren zum Bereitstellen eines Clusters jetzt viel einfacher und logischer aus.
Schauen Sie sich diese einfachere Anleitung an .

Im Moment kann jetzt alles viel einfacher sein


Stellen Sie sicher, dass die neuesten Kubernetes-Pakete auf allen Knoten installiert sind:


 apt-get -y install kubeadm kubelet kubectl 

Stoppen Sie außerdem den Keepalived-Daemon auf allen Knoten außer dem letzten .


 systemctl stop keepalived 

Erste Anmerkung


Jetzt werden wir Konfigurationen für kubeadm generieren (für jeden Masterknoten benötigen wir eine separate Konfiguration):


 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 

Wir initiieren etcd auf dem ersten Knoten, generieren Zertifikate und 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 

Wir kopieren die generierten Zertifikate und Kubeadm-Konfigurationen in die verbleibenden Knoten der Steuerebene.


 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 

Zweiter Knoten


Wir initiieren etcd auf dem zweiten Knoten:


 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 

Dritter Knoten


Wir initiieren den Kubernetes-Master mit etcd auf dem letzten Knoten.


(Stellen Sie sicher, dass die Balancer-IP festgelegt ist und auf diesen Knoten zeigt.)


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

Der erste und zweite Knoten


Jetzt können wir den Kubernetes-Master auf den ersten beiden Knoten initiieren:


 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 

Führen Sie außerdem den Keepalived-Daemon aus:


 systemctl start keepalived 

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


All Articles