Установка и настройка кластера Kubernetes на Ubuntu Server
https://www.dmosk.ru/instruktions.php?object=kubernetes-ubuntu
Подготовка системы
Данные действия выполняем на всех узлах будущего кластера. Это необходимо, чтобы удовлетворить программные системные требования для нашего кластера.
Настройка системы
1. Задаем имена узлам. Для этого выполняем команды на соответствующих серверах:
hostnamectl set-hostname k8s-master1.dmosk.local
hostnamectl set-hostname k8s-worker1.dmosk.local
hostnamectl set-hostname k8s-worker2.dmosk.local
* в данном примере мы зададим имя k8s-master1 для мастера и, соответственно, k8s-worker1 и k8s-worker2 — для первого и второго рабочих нод. Каждая команда выполняется на своем сервере.
Необходимо, чтобы наши серверы были доступны по заданным именам. Для этого необходимо на сервере DNS добавить соответствующие А-записи. Или на каждом сервере открываем hosts:
vi /etc/hosts
И добавляем записи на подобие:
192.168.0.15 k8s-master1.dmosk.local k8s-master1
192.168.0.20 k8s-worker1.dmosk.local k8s-worker1
192.168.0.25 k8s-worker2.dmosk.local k8s-worker2
* где, 192.168.0.15, 192.168.0.20, 192.168.0.25 — IP-адреса наших серверов, k8s-master1, k8s-worker1, k8s-worker2 — имена серверов, dmosk.local — наш внутренний домен.
2. Устанавливаем необходимые компоненты — дополнительные пакеты и утилиты. Для начала, обновим список пакетов и саму систему:
apt-get update && apt-get upgrade
Выполняем установку пакетов:
apt-get install curl apt-transport-https git iptables-persistent
* где:
- git — утилита для работы с GIT. Понадобиться для загрузки файлов из репозитория git.
- curl — утилита для отправки GET, POST и других запросов на http-сервер. Понадобиться для загрузки ключа репозитория Kubernetes.
- apt-transport-https — позволяет получить доступ к APT-репозиториям по протоколу https.
- iptables-persistent — утилита для сохранения правил, созданных в iptables (не обязательна, но повышает удобство).
В процессе установки iptables-persistent может запросить подтверждение сохранить правила брандмауэра — отказываемся.
3. Отключаем файл подкачки. С ним Kubernetes не запустится.
Выполняем команду для разового отключения:
swapoff -a
Чтобы swap не появился после перезагрузки сервера, открываем на редактирование файл:
vi /etc/fstab
И комментируем строку:
#/swap.img none swap sw 0 0
4. Загружаем дополнительные модули ядра.
vi /etc/modules-load.d/k8s.conf
br_netfilter
overlay
* модуль br_netfilter расширяет возможности netfilter (подробнее); overlay необходим для Docker.
Загрузим модули в ядро:
modprobe br_netfilter
modprobe overlay
Проверяем, что данные модули работают:
lsmod | egrep "br_netfilter|overlay"
Мы должны увидеть что-то на подобие:
overlay 114688 10
br_netfilter 28672 0
bridge 176128 1 br_netfilter
5. Изменим параметры ядра.
Создаем конфигурационный файл:
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* net.bridge.bridge-nf-call-iptables контролирует возможность обработки трафика через bridge в netfilter. В нашем примере мы разрешаем данную обработку для IPv4 и IPv6.
Применяем параметры командой:
sysctl --system
Брандмауэр
Для мастер-ноды и рабочей создаем разные наборы правил.
По умолчанию, в Ubuntu брандмауэр настроен на разрешение любого трафика. Если мы настраиваем наш кластер в тестовой среде, настройка брандмауэра не обязательна.
1. На мастер-ноде (Control-plane)
Выполняем команду:
iptables -I INPUT 1 -p tcp --match multiport --dports 6443,2379:2380,10250:10252 -j ACCEPT
* в данном примере мы открываем следующие порты:
- 6443 — подключение для управления (Kubernetes API).
- 2379:2380 — порты для взаимодействия мастера с воркерами (etcd server client API).
- 10250:10252 — работа с kubelet (соответственно API, scheduler, controller-manager).
Для сохранения правил выполняем команду:
netfilter-persistent save
2. На рабочей ноде (Worker):
На нодах для контейнеров открываем такие порты:
iptables -I INPUT 1 -p tcp --match multiport --dports 10250,30000:32767 -j ACCEPT
* где:
- 10250 — подключение к kubelet API.
- 30000:32767 — рабочие порты по умолчанию для подключения к подам (NodePort Services).
Сохраняем правила командой:
netfilter-persistent save
Удаление нод
При необходимости удалить ноду из нашего кластера, вводим 2 команды:
kubectl drain k8s-worker2.dmosk.local --ignore-daemonsets
kubectl delete node k8s-worker2.dmosk.local
* в данном примере мы удаляем ноду k8s-worker2.dmosk.local.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.