Be Geek

Be Geek 

DevOps, отец, программист, муж, фотограф

389subscribers

76posts

Showcase

11
goals1
4 of 300 paid subscribers
Верю в вашу любовь и поддержку! Я безумно рад, что вы у меня есть

Установка Kubernetes мультимастер кластера

## Настройка окружения
Для начала необходимо подготовить минимум три хоста под мастеров, минимальные требования:
по мне проще работать на Ubuntu, поэтому ставим последнюю версию, чтобы поддержка была как можно дольше и не забываем выключить swap
| Name | CPU | RAM | DISK |
| :-: | :-: | - | - |
| k8s-master01 | 2 | 4 | 100Gb |
| k8s-master02 | 2 | 4 | 100Gb |
| k8s-master03 | 2 | 4 | 100Gb |
Так же нужен балансировщик, через который будут связыкаться ноды в кластере и через который будем работать. Это все требования по настройке кубера. Я делаю через haproxy.
### Установка необходимого софта
Для работы кубера нужен docker ( можно и на другой контейрной реализации, но всем проще работать с docker):
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 нужно выбрать с какой сетью будем работать, об этом можно почитать [здесь](https://kubernetes.io/docs/concepts/cluster-administration/networking/)
Я выбираю 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
Берем полученную команду и топаем на вторую и третью ноду, устанавливаем там докер и кубер пакеты и выполняем команду:
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
Subscription levels1

Подписка стандарт 🧡

$4.3 per month
Поддержка блогера и доступ к части контента с более глубокой экспертизой
Go up