Дерево страниц

Создание проекта и сборка образов squashfs

1. Перейдите в каталог установленного astra-elafris 

$ cd /opt/elafris

2. Создайте файл для инвентаризации 5 серверов

$ sudo tee template_servers.yaml << EOF
servers:
- hostname: kube-mngr04
  mac: bc:24:11:6f:96:f8
  ip: 192.168.0.14
  machine_id: 1532e6be21db3ad58d8c93ff694e79db
- hostname: kube-mngr05
  mac: bc:24:11:2e:6d:63
  ip: 192.168.0.15
  machine_id: c4832a69b44e5909abe5ec0e694e79db
- hostname: kube-mngr06
  mac: bc:24:11:06:6a:8e
  ip: 192.168.0.16
  machine_id: d526c0a04f716c6316f0e50b694e79db
- hostname: kube-wrkr03
  mac: bc:24:11:27:f1:cd
  ip: 192.168.0.23
  machine_id: 72f69836ae991eff1092b251694e79db
- hostname: kube-wrkr04
  mac: bc:24:11:b0:38:56
  ip: 192.168.0.24
  machine_id: 84425015614389ef4cf7668b694e79db
EOF

Такой способ для большого количества серверов в проекте более удобный, чем формирование инвентаризационной информации через параметр --servers.

Все параметры серверов обязательны.
Имена хостов, MAC-адреса интерфесов, IP и идентификаторы машин замените на актуальные данные для ваших серверов.

3. Создайте проект, используя файл инвентаризации

$ sudo astra-elafris genproject -p cluster-project --preset kubernetes:v1.34_orel_1.8.4 --servers-file template_servers.yaml

В процессе подготовки первого проекта будет осуществлена загрузка Установочного диска ALSE, а также бинарных компонентов kubernetes, поэтому создание шаблона может занять длительное время, в зависимости от скорости сетевого соединения с центром загрузки Astra Linux и центром загрузки, указанном в шаблоне проекта.

Создание проекта возможно и без файла инвентаризации. Используйте для этого ключ --servers <MAC1>:<hostname1>:<IP1>,<MAC2>:<hostname2>:<IP2>,...
Идентификатор машины в данном случае будет генерироваться автоматически.

4. Соберите образы для сетевой загрузки ОС

$ sudo astra-elafris build -p cluster-project -o sqsh

Результат выполнения - набор файлов в каталогах:

  • cluster-project/output/kernels/ - ядро и initrd для публикации на pxe-инфраструктуру сетевой загрузки

  • cluster-project/output/sqsh/ - squashfs-образы для публикации на файловую систему samba инфраструктуры сетевой загрузки

Подготовка инфраструктуры сетевой загрузки

Подготовка инфраструктуры делается один раз для Узла сетевой загрузки. 
При публикации следующих проектов этот этап можно пропустить

1. Сконфигурируйте на узле статический IP-адрес, на котором будет работать DHCP-сервер

2. Установите пакет astra-elafris-boot, если не сделали этого на предыдущих этапах, и перейдите в каталог astra-elafris-boot

$ cd /opt/elafris-boot

3. Откройте файл elafris-boot.yaml и, если требуется, измените свойства boot_srv.ip и boot_srv.dhcp_range

4. Запустите создание инфраструктуры сетевой загрузки

$ sudo astra-elafris-boot --boot

5. Настройте NAT.
Для этого можно воспользоваться входящим в состав репозиториев Astra Linux инструментом командной строки iptables.

NAT нужен для процедуры инициализации узлов в кластере для загрузки компонентов kubernetes из сети интернет.

Публикация проекта на инфраструктуру сетевой загрузки

1. Подготовьте структуру файлов и конфигурацию сетевой загрузки

$ sudo astra-elafris-boot -p cluster-project --links

2. Сконфигурируйте dhcp-сервер на выдачу фиксированных IP серверам кластера

$ sudo astra-elafris-boot -p cluster-project --dhcp

Инициализация кластера kubernetes в сервисном (отладочном) режиме

1. Подготовьте балансировщик

На примере haproxy и отдельного IP 192.168.0.101:

  • установить haproxy
    $ sudo apt install haproxy
  • Изменить файл конфигурации
    # /etc/haproxy/haproxy.cfg
    global
    	...				# конфиг по умолчанию можно оставить без изменения
    
    defaults
            log     global
            mode    tcp
            timeout connect 5000
            timeout client  50000
            timeout server  50000
    
    frontend control
        bind 192.168.0.101:6443	# IP-адрес балансировщика
        mode tcp
    
        # Stats endpoint
        stats enable
        stats uri /stats
        stats auth admin:admin
    
        # Default backend
        default_backend kube_control
    
    backend kube_control
        mode tcp
        balance roundrobin
        server kube_mngr04 192.168.0.14:6443 check
        server kube_mngr05 192.168.0.15:6443 check
        server kube_mngr06 192.168.0.16:6443 check

В примере простая балансировка по порту нв уровне tcp. Для более продвинутых настроек воспользуйтесь документацией к haproxy.

2. Для каждого узла в кластере настройте постоянное хранилище

На примере диска sda

2.1. Загрузитесь в отладочном режиме Debug и аутентифицируйтесь в системе

По умолчанию предусмотрена загрузка в рабочем режиме Regular без возможности логина. У вас будет 10 секунд, чтобы выбрать режим Debug.
Логин/пароль по умолчанию - administrator/admin. При необходимости, его можно изменить в файле preseed.yaml конфигурации проекта перед сборкой.

2.2. Подключите постоянный диск

$ cd /opt/first_boot
sudo chmod +x create_partition_sda.sh
sudo ./create_partition_sda.sh
sudo mount /dev/sda1 /mnt
sudo cp persistence.conf /mnt/
sudo umount /mnt

2.3. Перезагрузите ОС снова в отладочном режиме Debug.

3. Инициализируйте первый узел Kubernetes

$ cd /usr/local/bin
sudo chmod +x kubeadm
sudo chmod +x crictl
sudo kubeadm init --ignore-preflight-errors=KubeletVersion --pod-network-cidr=192.169.0.0/16 --control-plane-endpoint=192.168.0.101:6443 --upload-certs

В качестве --control-plane-endpoint укажите адрес и порт балансировщика.


4. Сохраните или скопируйте команды присоединения остальных узлов

Команды будут выведены в консоль программой инициализации кластера и выглядят следующим образом.

Пример команды на добавление узла controle-plane (master)

   kubeadm join 192.168.0.101:6443 --token orgmb3.73wvahitomd3txwr \  
      --discovery-token-ca-cert-hash sha256:8e3ed4d7dd74ad64e4b6cc8c0af3afdba1d25393d33b13dad7691eca091a7adb \
      --control-plane --certificate-key 54efba8f806284b5f780488eb2f46cb7c23f9e0c29abd043d6f32203bfa7fc4d

Пример команды на добавление рабочего узла (worker)

   kubeadm join 192.168.0.101:6443 --token orgmb3.73wvahitomd3txwr \
      --discovery-token-ca-cert-hash sha256:8e3ed4d7dd74ad64e4b6cc8c0af3afdba1d25393d33b13dad7691eca091a7adb

Токены и ключи для каждого инстанса уникальны.

IP-адрес:порт - это эндпойнт балансировщика, через который осуществляется ha-доступ к узлам control-plane.

5. Завершите формирование кластера control-plane.

Для этого на узлах kube-mngr05 (192.168.0.15) и kube-mngr06 (192.168.0.16) выполните 

$ cd /usr/local/bin
sudo chmod +x kubeadm
sudo chmod +x crictl
sudo kubeadm join 192.168.0.101:6443 --token <token> \
        --discovery-token-ca-cert-hash sha256:<sha> \
        --control-plane --certificate-key <key>

6. Добавьте рабочие узлы в кластер

Для этого на узлах kube-wrkr03 (192.168.0.23) и kube-wrkr04 (192.168.0.24) выполните 

$ cd /usr/local/bin
sudo chmod +x kubeadm
sudo chmod +x crictl
sudo kubeadm join 192.168.0.101:6443 --token <token> \
        --discovery-token-ca-cert-hash sha256:<sha>

7. Настройте управление кластером

Рабочий режим ALS COS не предоставляет возможности логина, а постоянные перезагрузки в отладочный режим не являются целевым сценарием для работы сервера.
Поэтому для управления кластером через kubectl файл конфигурации кластера нужно перенести на рабочее место, допускающее возможность подключения администратора.

В примере ниже в качестве рабочего места будет использоваться Узел сборки, поскольку там, в процессе подготовки проекта сборки скачивается kubectl.

7.1. На одном из узлов control-plane (например, 192.168.0.14) выполните команды

$ mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7.2. На узле сборки выполните команды

$ mkdir -p $HOME/.kube
scp administrator@192.168.0.14:$HOME/.kube/config $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Сейчас пользователь, под чьей учёткой выполнялись команды, получил возможность выполнять команду kubectl для наблюдения и управления собранным кластером.

8. Перезагрузите все узлы кластера в рабочем режиме

На узле кластера достаточно выполнить команду

$ sudo reboot

Рабочий режим Regular при загрузке ОС будет выбран по умолчанию

Управление кластером в рабочем режиме

В примере ниже существляется с Узла сборки

1. Проверка кластера

$ kubectl get nodes

NAME          STATUS     ROLES           AGE   VERSION
kube-mngr04   NotReady   control-plane   56m   v1.34.1
kube-mngr05   NotReady   control-plane   35m   v1.34.1
kube-mngr06   NotReady   control-plane   29m   v1.34.1
kube-wrkr03   NotReady   <none>          28m   v1.34.1
kube-wrkr04   NotReady   <none>          26m   v1.34.1

Узлы имеют статус NotReady, потому что отсутствует сетевой плагин.

2. Установите сетевой плагин Calico

$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml

3. Через некоторое время снова проверьте состояние кластера

$ kubectl get nodes

NAME          STATUS   ROLES           AGE   VERSION
kube-mngr04   Ready    control-plane   67m   v1.34.1
kube-mngr05   Ready    control-plane   45m   v1.34.1
kube-mngr06   Ready    control-plane   39m   v1.34.1
kube-wrkr03   Ready    <none>          38m   v1.34.1
kube-wrkr04   Ready    <none>          36m   v1.34.1

Поздравляем! Ваш кластер kubernetes готов к работе на серверах под управлением Astra Linux Server Container OS!

  • Нет меток