Эта статья является свободной интерпретацей официального руководства Creating Highly Available Clusters with kubeadm для Stacked control plane nodes. Мне не нравятся сложный язык и примеры использованные в нем, поэтому я написал свое руководство.
Если у вас появятся какие-либо вопросы или вам будет что-то неясно, обратитесь к официальной документации или спросите Google. Все этапы описаны здесь в максимально простой и сдержанной форме.
Вводные данные
У нас есть 3 ноды:
- node1 (10.9.8.11)
- node2 (10.9.8.12)
- node3 (10.9.8.13)
Мы сделаем для них один отказоустойчивый IP-адрес:
- 10.9.8.10
Затем установим кластер etcd и Kubernetes на них.
Настройка балансировщика
Первым делом нам нужно установить Keepalived на все три ноды:
apt-get -y install keepalived
Теперь запишем конфиг /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 } }
Активируем и запустим Keepalived на всех трех нодах:
systemctl start keepalived systemctl enable keepalived
Теперь мы можем проверить, что одна из нод получила адрес 10.9.8.10 на интерфейсе eth0.
Разворачиваем Kubernetes кластер.
Убедитесь, что на всех нодах установлены последние пакеты Kubernetes:
apt-get -y install kubeadm kubelet kubectl
Так же остановите Keepalived демон на всех нодах кроме последней.
systemctl stop keepalived
Первая нода
Теперь мы сгенерируем конфиг для kubeadm:
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/v1alpha3 kind: ClusterConfiguration kubernetesVersion: stable apiServerCertSANs: - "${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
Инициируем etcd на первой ноде, сгенерируем сертификаты и admin-config
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm alpha phase preflight master $kubeadm alpha phase certs all $kubeadm alpha phase kubelet config write-to-disk $kubeadm alpha phase kubelet write-env-file $kubeadm alpha phase kubeconfig kubelet $kubeadm alpha phase etcd local $kubeadm alpha phase kubeconfig admin systemctl start kubelet
Скопируем сгенерированные сертификаты и kubeadm конфиги на остальные control plane ноды.
NODES="node1 node2" CERTS=$(find /etc/kubernetes/pki/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') ETCD_CERTS=$(find /etc/kubernetes/pki/etcd/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') 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
Вторая нода
Инициируем etcd на второй ноде:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm alpha phase preflight master $kubeadm alpha phase certs all $kubeadm alpha phase kubelet config write-to-disk $kubeadm alpha phase kubelet write-env-file $kubeadm alpha phase kubeconfig kubelet $kubeadm alpha phase etcd local systemctl start kubelet
Третья нода
Инициируем Kubernetes master с etcd на последней ноде.
(убедитесь что IP балансировщика установлен и указывает на эту ноду)
kubeadm init --config kubeadm-config-${HOSTNAME}.yaml
Первая и вторая ноды
Теперь мы можем инициировать Kubernetes master на первых двух нодах:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm alpha phase kubeconfig all $kubeadm alpha phase controlplane all $kubeadm alpha phase kubelet config annotate-cri $kubeadm alpha phase mark-master
А также запустить демон Keepalived:
systemctl start keepalived
ссылка на оригинал статьи https://habr.com/post/427941/
Добавить комментарий