Найти в Дзене
BeGeek

Настройка кластера Kubernetes с неколькими master нодами

Если Вам интересно как работать с docker и что такое docker-swarm, то подробную информацию можно найти на моем канале. Настройка окружения Для начала необходимо подготовить минимум три хоста под три master ноды, минимальные требования для одной ноды - 2cpu / 4Gb Ram. Так же нужен балансировщик, через который будут связываться ноды в кластере и через который будем работать. Я делаю все через haproxy. Установка необходимого софта Для работы кубера нужен docker ( можно и на другой контейнейрной реализации, но всем проще работать с docker). Не забываем, что в конце 2021 года поддержка docker будет выпилена из k8s: apt-get remove docker docker-engine docker.io containerd runc apt-get update && apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && apt-key fingerprint 0EBFCD88 && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_re
Оглавление

Если Вам интересно как работать с docker и что такое docker-swarm, то подробную информацию можно найти на моем канале.

Настройка окружения

Для начала необходимо подготовить минимум три хоста под три master ноды, минимальные требования для одной ноды - 2cpu / 4Gb Ram.

Так же нужен балансировщик, через который будут связываться ноды в кластере и через который будем работать. Я делаю все через haproxy.

Установка необходимого софта

Для работы кубера нужен docker ( можно и на другой контейнейрной реализации, но всем проще работать с docker). Не забываем, что в конце 2021 года поддержка docker будет выпилена из k8s:

apt-get remove docker docker-engine docker.io containerd runc
apt-get update && apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && apt-key fingerprint 0EBFCD88 && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && apt-get install docker-ce docker-ce-cli containerd.io -y

И далее ставим сам кубер:

apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl

Создание кластера

Перед тем, как инициализировать кластер kubernetes нужно выбрать с какой сетью будем работать, об этом можно почитать здесь.

Я выбираю calico, а для calico нужно задать подсеть 192.168.0.0/16 при инициализации кластера:

kubeadm init --control-plane-endpoint=10.13.6.6:6443 --node-name=k8s-master01 --pod-network-cidr=192.168.0.0/16 --upload-certs --apiserver-advertise-address=10.13.1.161
  • --apiserver-advertise-address - IP текущего хоста
  • --control-plane-endpoint - IP адрес haproxy

Если все прошло успешно, то должны увидеть что то похожее на:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a Pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: /docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node as root:
kubeadm join 10.13.6.6:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Если есть желание управлять кластером с текущего хоста, то необходимо выполнить:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

Но можно просто скопировать этот конфиг себе на компьютер, поставить kubectl и рулить кластером, не заходя на удаленную машину.

Команда:

kubeadm join 10.13.6.6:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

нужна для присоединения worker ноды к кластеру.

Настройка плагина сети

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

И смотрим чтобы все поды поднялись:

kubectl get po -A

Добавление master node в кластер

Чтобы связать несколько мастеров, эта команда не подойдет, нужно выполнить на текущей машине (где инициализировали кластер):

kubeadm token create --print-join-command

Берем полученную команду и топаем на вторую и третью ноду, устанавливаем там docker и k8s пакеты и выполняем команду:

kubeadm join 10.13.6.6:6443 --token aa2vzc.jeuyx7ymm1d3wqrr --discovery-token-ca-cert-hash sha256:6fbb7c6b2e3e23777fad91a57013bbabfae52544d43723104320a8cc2c39ee61 --control-plane --certificate-key c4b2a5555672fd3ce44686876b06330e4e6b5f6a773323196fa3fde45474b6ac --node-name=k8s-master0N

MetalLB

Чтобы в дальнейшем была возможность использовать ingress контроллеры и назначать service IP адреса из нашей сети, нужно настроить MetalLB.