Решил попробовать поднять кластер Kubernetes через VirtualBox используя windows11.
В VirtualBox использовал ubuntu-22.04.2-live-server.
Использовал тип подключения: «Сетевой мост».

Получилось так:
192.168.0.20 - master
192.168.0.21 - node1
192.168.0.22 - node2
192.168.0.23 - node3
192.168.0.24 - node4
Теперь по пунктам, с чего я начинал.
Для удобной работы с ВМ (если это так можно назвать) использовал MobaXterm по ssh подключению.
1) Ставлю статический ip на каждой машинеsudo nano /etc/netplan/00-installer-config.yaml
network:
version: 2
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.0.xx/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Где xx- ip машины
2) Отключаем свап на каждой машине:sudo swapoff -a
Чтобы после ребута свап не включался, редактируем:sudo nano /etc/fstab
Комментим последнюю строку, пример:#UUID=xxxx-xxxx-xxxx-xxxx none swap sw 0 0
3) Обновим файл /etc/hosts, добавив IP-адреса и имена хостов на каждой машине sudo nano /etc/hosts
Добавляем список хостов:
192.168.0.20 master
192.168.0.21 node1
192.168.0.22 node2
192.168.0.23 node3
192.168.0.24 node4
Получается так:
127.0.0.1 localhost
127.0.1.1 node4
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.0.20 master
192.168.0.21 node1
192.168.0.22 node2
192.168.0.23 node3
192.168.0.24 node4
4) Установим kubelet, kubeadm и kubectl на всех машинах:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /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
5) Ставим Docker на всех машинах:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
6) Меняем настройки ядра на мастере (Без них я получал ошибки при ините):
sudo sysctl net.bridge.bridge-nf-call-iptables=1
sudo sysctl net.ipv4.ip_forward=1
Чтобы сделать эти настройки постоянными, добавьте следующие строки в файл /etc/sysctl.conf
:
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
7) Инициализируем Kubernetes на master-ноде:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Запишите вывод команды, особенно команду kubeadm join
, которая потребуется для подключения остальных нод к кластеру.
8) Настройте kubectl на мастер-ноде:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
9) Теперь вы должны развернуть установить на кластер плагин CNI (Container Networking Interface )
Я использовал Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
10) Подключаем рабочие узлы к нашему кластеру:
kubeadm join <master-ip>:<master-port> --token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
Используем данные которые мы сохранили при ините мастера.
11) Проверяем что все ноды на мастере отображаются:
kubectl get nodes