Skip to content

rotoro-cloud/kubeadm-cluster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 

Repository files navigation

Here infrastructure template for kubeadm task. Uses Vagrant and ubuntu.

Deploy multi-masters HA cluster with kubeadm, vagrant and ubuntu.

Скрипты из этого репозитория облегчают процесс установления кластера производственного уровня.

Итак, в курсе мы выяснили, что самый простой сетап с высокой доступностью состоит из 6 элементов:

  • балансировщика
  • 3 мастер-нод
  • 2 рабочих узлов

Склонируй этот репо

В корне лежит Vagrantfile.

По умолчанию он настроен на создание 2 мастеров, 1 воркера и 1 лоадбаленсера.

git clone https://github.com/rotoro-cloud/kubeadm-cluster.git
cd kubeadm-cluster
vagrant up

Поднимутся VMs. Их адреса:

  • 192.168.66.1X - для мастеров
  • 192.168.66.2X - для рабочих
  • 192.168.66.30 - для балансировщика

Т.е. controlplane01 будет 192.168.66.11, controlplane02 будет 192.168.66.12 и т.д.

Но сачала давай познакомимся с окружением

Окружение

Ты можешь подключиться прямо к виртуальной машине с помощью

vagrant ssh node01

Или сделай команду:

vagrant ssh-config

Это покажет тебе адреса VMs, их порты ssh и пути к ключам, чтобы подключиться к ним из твоего любимого ssh-клиента.

Балансировщик

Для сетапа высокой доступности необходимый элемент, без него не будет полноценной HA. В этом сетапе мы используем HAproxy, давай ее настроим.

Выполняется в VM lb

sudo apt update
sudo apt install -y haproxy

Далее внесем правки в /etc/haproxy/haproxy.cfg, добавив в конец следующее:

frontend kubernetes-frontend
    bind 192.168.66.30:6443
    mode tcp
    option tcplog
    default_backend kubernetes-backend

backend kubernetes-backend
    mode tcp
    option tcp-check
    balance roundrobin
    server controlplane01 192.168.66.11:6443 check fall 3 rise 2
    server controlplane02 192.168.66.12:6443 check fall 3 rise 2
    server controlplane03 192.168.66.13:6443 check fall 3 rise 2

Теперь балансировщик будет пересылать трафик на один из трех мастеров. И он достаточно умный не послылать трафик, если мастер в данный момент недоступен.

sudo systemctl restart haproxy

Мы закончили с балансировщиком, он нам больше не понадобится.

Выполняется во всех VMs-нодах, и мастерах и воркерах

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

lsmod | grep br_netfilter

Если пусто, то:

sudo modprobe br_netfilter

После этого

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

Далее подготовка среды выполнения контейнера. https://kubernetes.io/docs/setup/production-environment/container-runtimes/

У меня docker, поэтому:

wget get.docker.com
bash index.html
sudo systemctl enable docker
sudo usermod -aG docker vagrant

Теперь поставим kubeadm, kubelet и kubectl https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

Добавим нужные утилиты, хотя docker уже их должен был добавить:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

Добавим ключи репозитория google и сам репо:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Теперь поставим наши утилиты:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Выполняется на самом первом мастере

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ Проинициализируем мастер

sudo kubeadm init --control-plane-endpoint="192.168.66.30" --upload-certs --apiserver-advertise-address=192.168.66.11 --pod-network-cidr=10.244.0.0/16

Сразу сделаем себе доступ для kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Выполняется на других мастерах

Присоединим остальные матера командой из вывода kubeadm

sudo kubeadm join 192.168.66.30:6443 --apiserver-advertise-address=192.168.66.12...
Выполняется на воркерах

Присоединим остальные матера командой из вывода kubeadm

sudo kubeadm join 192.168.66.30:6443...
Последний шаг

Развернем сетевой плагин:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages