Хабрахабр

[Перевод] Разворачиваем Kubernetes HA-кластер на Baremethal с помощью Kubeadm и Keepalived (простое руководство)

Мне не нравятся сложный язык и примеры использованные в нем, поэтому я написал свое руководство. Эта статья является свободной интерпретацей официального руководства 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-адрес:

Затем установим кластер etcd и Kubernetes на них.

Первым делом нам нужно установить Keepalived на все три ноды:

apt-get -y install keepalived

Теперь запишем конфиг /etc/keepalived/keepalived.conf:

vrrp_instance VI_1 virtual_ipaddress { 10.9.8.10 }
}

Активируем и запустим Keepalived на всех трех нодах:

systemctl start keepalived
systemctl enable keepalived

9. Теперь мы можем проверить, что одна из нод получила адрес 10. 10 на интерфейсе eth0. 8.

Убедитесь, что на всех нодах установлены последние пакеты 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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть