Featured image of post Установка K8S кластера через Kubespray

Установка K8S кластера через Kubespray

Базовое развертывание кластера Kubernetes

Kubespray - является набором Ansible скриптов, для установки Kubernetes.

Кластер будет состоять из 2-х Master node, 2-х Worker node.

Установку кластера будем производить с Master-1, поэтому на него установим компоненты для ansible. Пользователь на всех машинах - admin с правами sudo.

Требования по ресурсам:

Master:

  • CPU: 2
  • RAM: 4 Gb
  • SSD: 50 Gb
  • OS: Ubuntu 22.04

Worker:

  • CPU: 4
  • RAM: 8 Gb
  • SSD: 100 Gb
  • OS: Ubuntu 22.04

IP-addresses:

  • Master-1: 192.168.10.201

  • Master-2: 192.168.10.202

  • Node-1: 192.168.10.205

  • Node-2: 192.168.10.206

Локальный пользователь, под которым выполняются команды: admin

Шаг 1. Подготовка виртуальных серверов

Предполагается установка ОС Ubuntu 22.04 на один хост, с дальнейшим клонированием хостов

Сервер: master-1

Создаем машину, с именем master-1. Первым делом отключаем подкачку:

1
sudo swapoff -a

Удаляем строку из /etc/fstab

1
/swap.img   none    swap   sw   0   0

Убираем DHCP. Открываем на редактирование:

1
nano /etc/netplan/00-installer-config.yaml

Прописываем статику для master-1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses:
      - 192.168.10.201/24
      routes:
      - to: default
        via: 192.168.10.2
      nameservers:
        addresses:
        - 8.8.8.8

Сохраняем, закрываем, применяем:

1
admin@master-1:~$ sudo netplan apply -f

Установим авторизацию для пользователя admin (мой локальный пользователь с sudo привилегиями) без пароля, для этого. В директории /etc/sudoers.d/ создаём файл admin:

1
admin ALL=(ALL) NOPASSWD: ALL

Сервер: master-2

  • Клонируем master-1
  • Меняем имя хоста на master-2 и IP в netplan
1
sudo hostnamectl set-hostname master-2

Не забудьте изменить имя сервера в файле /etc/hosts

Убираем DHCP. Открываем на редактирование:

1
admin@master-1:~$ nano /etc/netplan/00-installer-config.yaml

Прописываем статику для master-2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses:
      - 192.168.10.202/24
      routes:
      - to: default
        via: 192.168.10.2
      nameservers:
        addresses:
        - 8.8.8.8

Сохраняем, закрываем, применяем:

1
admin@master-1:~$ sudo netplan apply -f

Сервер: node-1

  • Клонируем master-1
  • Меняем имя хоста на node-1 и IP в netplan
1
sudo hostnamectl set-hostname node-1

Не забудьте изменить имя сервера в файле /etc/hosts

Убираем DHCP. Открываем на редактирование:

1
admin@master-1:~$ nano /etc/netplan/00-installer-config.yaml

Прописываем статику для node-1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses:
      - 192.168.10.205/24
      routes:
      - to: default
        via: 192.168.10.2
      nameservers:
        addresses:
        - 8.8.8.8

Сохраняем, закрываем, применяем:

1
admin@master-1:~$ sudo netplan apply -f

Сервер: node-2

  • Клонируем master-1
  • Меняем имя хоста на node-2 и IP в netplan
1
sudo hostnamectl set-hostname node-2

Не забудьте изменить имя сервера в файле /etc/hosts

Убираем DHCP. Открываем на редактирование:

1
admin@master-1:~$ nano /etc/netplan/00-installer-config.yaml

Прописываем статику для node-2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses:
      - 192.168.10.206/24
      routes:
      - to: default
        via: 192.168.10.2
      nameservers:
        addresses:
        - 8.8.8.8

Сохраняем, закрываем, применяем:

1
admin@master-1:~$ sudo netplan apply -f

Шаг 2. Настраиваем подключение к хостам для Kubespray

На master-1 создаём SSH-ключ для подключения к другим машинам:

1
ssh-keygen -t rsa

И копируем его на все сервера:

1
2
3
sudo ssh-copy-id admin@192.168.10.202
sudo ssh-copy-id admin@192.168.10.205
sudo ssh-copy-id admin@192.168.10.206

Устаналиваем компоненты Python:

1
2
sudo apt update
sudo apt install python3-pip

Устанавливаем компонент, для использования ssh паролей:

1
sudo apt install sshpass

Так как вначале мы обусловились, что установка кластера будет происходить с ноды master-1, то переходим в директорию opt и выполняем клонирование репозитория:

1
2
3
cd /opt
sudo git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray

Устанавливаем зависимости из файла:

1
pip3 install -r requirements.txt

Делаем копию директории:

1
sudo cp -rfp inventory/sample inventory/k8s_cluster

Удаляем все из файла /k8s_cluster/inventory.ini:

Открываем на редактирование:

1
sudo nano inventory/k8s_cluster/inventory.ini

Опишем список наших машин в файле inventory:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[all]
master-1 ansible_host=192.168.10.201 ip=192.168.10.201
master-2 ansible_host=192.168.10.202 ip=192.168.10.202
node-1   ansible_host=192.168.10.205 ip=192.168.10.205
node-2   ansible_host=192.168.10.206 ip=192.168.10.206

[kube_control_plane]
master-1
master-2

[etcd]
master-1

[kube_node]
node-1
node-2

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

Чтобы в дальнейшем использовать Helm-charts заранее выполним отметим этот компонент на установку для всего кластера в файле /k8s_cluster/group_vars/k8s_cluster/addons.yaml:

1
helm_enabled: true

В файле group_vars/k8s_cluster/k8s-cluster.yml указываем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
container_manager: containerd

kube_network_plugin: calico
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/18
kube_proxy_mode: ipvs
cluster_name: cluster.k8s.local #Имя и домен вашего кластера, меняйте на свой

event_ttl_duration: "2h0m0s"
auto_renew_certificates: true

В файле group_vars/k8s_cluster/addons.yml включаем ingress:

1
2
3
metrics_server_enabled: true
ingress_nginx_enabled: true
ingress_nginx_host_network: true

Чтобы постоянно не указывать от какого пользователя мы хотим запускать команды ansible можно указать в файле ansible.cfg:

1
remote_user=admin

Шаг 3. Запуск развертывания

После всех настроек выше мы запускаем наш кластер:

1
ansible-playbook -u admin -i inventory/k8s_cluster/inventory.ini -b cluster.yml

Установка занимает в среднем от 30 до 60 минут

После выполнения всех шагов проверяем состояние нод:

1
admin@master-1:/opt/kubespray$ kubectl get nodes

Затем проверяем запуск всех системных подов:

1
admin@master-1:/opt/kubespray$ kubectl get pods -n kube-system

Статус нод должен быть: Ready, если возникают ошибки смотрите логи.

Развертывание кластера завершено.

Дополнения

Чтобы добавить новую ноду, без изменений для уже существующих внесите её в файл inventory/k8s_cluster/inventory.ini и запустите с параметром –limit:

1
ansible-playbook -u admin -i inventory/k8s_cluster/inventory.ini --limit=nodename -b scale.yml

Чтобы удалить ноду:

1
ansible-playbook -u admin -i inventory/k8s_cluster/inventory.ini -e node=nodename -b remove-node.yml

Чтобы удалить весь кластер:

1
ansible-playbook -u admin -i inventory/k8s_cluster/inventory.ini -b reset.yml
Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Создано при помощи Hugo
Тема Stack, дизайн Jimmy