Wir implementieren Kubernetes HA-Cluster auf Baremetal mit Kubeadm und Keepalived (eine einfache Anleitung)

Ursprünglicher Autor: kvaps
  • Übersetzung
  • Tutorial

Dieser Artikel ist ein kostenloser Interpret des offiziellen Leitfadens zum Erstellen von hoch verfügbaren Clustern mit kubeadm für Stacked- Steuerebenen- Knoten . Ich mag die komplexe Sprache und die darin verwendeten Beispiele nicht, also habe ich mein Handbuch geschrieben.


Wenn Sie Fragen haben oder etwas unklar ist, konsultieren Sie die offizielle Dokumentation oder wenden Sie sich an Google . Alle Stufen werden hier auf die einfachste und zurückhaltendste Weise beschrieben.


Daten eingeben


Wir haben 3 Knoten:


  • node1 (10.9.8.11)
  • Knoten2 (10.9.8.12)
  • node3 (10.9.8.13)

Wir machen für sie eine ausfallsichere IP-Adresse:


  • 10.9.8.10

Dann installieren wir den etcd-Cluster und Kubernetes darauf.


Balancer-Einstellung


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


apt-get -y install keepalived

Jetzt schreiben wir die Konfig /etc/keepalived/keepalived.conf:


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

Aktivieren Sie Keepalived auf allen drei Knoten:


systemctl start keepalived
systemctl enable keepalived

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


Erweitern Sie Kubernetes Cluster


UPD: Dieser Artikel wurde geschrieben v1.12 und trotz der Tatsache , dass sie angepasst wurde v1.13 , ist nun ein Cluster Bereitstellung Verfahren ist viel einfacher und logischer.
Sehen Sie sich diese einfachere Anleitung an .

Im Moment kann alles jetzt 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 Keepalive-Dämon auf allen Knoten außer dem letzten .


systemctl stop keepalived

Erster Knoten


Jetzt werden wir Konfigurationsdateien für kubeadm generieren (für jeden Master-Knoten 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[@]}"; doecho"${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

Kopieren Sie die generierten Zertifikate und kubeadm-Konfigurationen auf die restlichen 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 Kubernetes Master mit etcd am letzten Knoten.


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


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

Der erste und der zweite Knoten


Nun 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 auch den Keepalived-Dämon aus:


systemctl start keepalived

Jetzt auch beliebt: