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