Déployer Kubernetes HA-cluster sur Baremetal à l'aide de Kubeadm et Keepalived (guide simple)

Cet article est une interprétation gratuite du didacticiel officiel de création de clusters hautement disponibles avec kubeadm pour les nœuds de plan de contrôle empilés . Je n'aime pas le langage complexe et les exemples qui y sont utilisés, j'ai donc écrit mon guide.


Si vous avez des questions ou n'êtes pas clair, consultez la documentation officielle ou demandez à Google . Toutes les étapes sont décrites ici sous la forme la plus simple et la plus restreinte.


Entrer les données


Nous avons 3 nœuds:


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

Nous allons leur créer une adresse IP à tolérance de pannes:


  • 10.9.8.10

Installez ensuite le cluster etcd et Kubernetes dessus.


Configuration de l'équilibreur


Tout d'abord, nous devons installer Keepalived sur les trois nœuds:


apt-get -y install keepalived 

Maintenant, nous écrivons la 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 } } 

Nous activons et exécutons Keepalived sur les trois nœuds:


 systemctl start keepalived systemctl enable keepalived 

Nous pouvons maintenant vérifier que l'un des nœuds a reçu l'adresse 10.9.8.10 sur l'interface eth0 .


Déployer le cluster Kubernetes


UPD: Cet article a été écrit pour la v1.12 et bien qu'il ait été adapté pour la v1.13 , maintenant la procédure de déploiement d'un cluster semble beaucoup plus simple et plus logique.
Regardez ce guide plus simple .

en ce moment tout peut être beaucoup plus facile maintenant


Assurez-vous que les derniers packages Kubernetes sont installés sur tous les nœuds:


 apt-get -y install kubeadm kubelet kubectl 

Arrêtez également le démon Keepalived sur tous les nœuds sauf le dernier .


 systemctl stop keepalived 

Première note


Nous allons maintenant générer des configurations pour kubeadm (pour chaque nœud maître, nous avons besoin d'une configuration distincte):


 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 

Nous initialisons etcd sur le premier nœud, générons des certificats et 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 

Nous copions les certificats générés et les configurations kubeadm vers les nœuds de plan de contrôle restants.


 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 

Deuxième nœud


Nous initialisons etcd sur le deuxième noeud:


 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 

Troisième nœud


Nous lançons Kubernetes master avec etcd sur le dernier nœud.


(assurez-vous que l'adresse IP de l'équilibreur est définie et pointe vers ce nœud)


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

Les premier et deuxième nœuds


Nous pouvons maintenant lancer Kubernetes master sur les deux premiers nœuds:


 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 

Et exécutez également le démon Keepalived:


 systemctl start keepalived 

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


All Articles