Установка k8s kubespray proxmox ubuntu 20.04
Введение
Планируется в учебно познавательных целях на домашнем сервере поднять кластер Kubernetes, далее пошаговые действия в подробностях.
Для тех кто не хочет заморачиваться с установкой, но есть желание пощупать Kubernetes рекомендую попробовать minikube
1. Подготовка
1. Машина на Linux — для настройки, установки, управления (Можно железо, виртуалку, LXC) Далее его буду называть — Admin PC, чтоб не было путаницы
2. Кластер (ноды) — у себя буду использовать 4 виртуальные машины (VM) на сервере Proxmox с Ubuntu 20.04 (Так же можно использовать другие гипервизоры или реальное железо).
Пытался ноды на LXC поднять, такого шаманства не осилил, а на VM нет проблем.
Минимальные требования
- Memory: 1500 MB
- CPU: 2 Cores
Для удобства создаю один temlpate VM в Proxmox
- установка Ubuntu 20.04
- обновление пакетов
- копирование SSH ключ (с Admin PC)
- Shutdown -> Convert to template
Данный template клонирую для 4 VM (Full clone)
- node 1 — Master
- node 2
- node 3
- node 4
После клонирования все MAC адреса отмечаю в DHCP сервер для выдачи статичных IP адресов и запускаю VM .
На Admin PC, проверяю есть ли доступ по SSH ключу на каждую VM
ssh node1
2. Подготовка kubespray
Далее все действия происходят на Admin PC
Клонирую репозиторий kubespray и перехожу на последнюю стабильную ветку
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray/
git checkout v2.18.1
Установка зависимостей
pip3 install -r requirements-2.11.txt
Копирую папку шаблонов с inventory и подставляю туда свои значения
cp -rfp inventory/sample inventory/mycluster
nano inventory/mycluster/inventory.ini
Базу etcd желательно раскатать на 3 ноды, но для экспериментов оставлю только на master node (node1) т.к. в планах использовать БД на отдельных серверах.
2. Конфигурация kubespray
Конфигурационные файлы так же лежат в скопированной директории
~/kubespray/inventory/mycluster/group_vars#
2.1 k8s cluster/addons.yml
Начну с файла k8s cluster/addons.yml
Включаю (true):
- Установку helm, это пакетный менеджер и шаблонизатор.
- ingress nginx controller
- cert-manager-enabled (генерация, управление сертификатами приложений)
2.2 k8s_cluster/k8s-cluster.yml
Тут можно изменить
- kube_version
- kube-network-plugin: calico (CNI)
- kube-pods-subnet: 10.233.64.0/18
- kube-proxy-mode: ipvs
- dns-mode: coredns
- container_manager: containerd (CRI)
Настройки по умолчанию вполне устраивают, в этом файле ничего не менял.
2.3 all/all.yml
Здесь можно указать external load balancer и его настройки.
Так же оставил все по умолчанию.
3. Установка
Перехожу в корневую папку с kubespray и запускаю установку
ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root cluster.yml
Установка заняла 10 минут
Подключаюсь к master node смотрю файл конфигурации, проверяю ноды
cat /etc/kubernetes/admin.conf
kubectl get nodes
Кластер Kubernetes на VM Proxmox с Ubuntu готов. Весь процесс занял примерно 30 минут.