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:
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