Установка#

В данном разделе описан сценарий установки DropApp с помощью утилиты Dactl.

Порядок установки:

Установка DropApp#

Шаги, приведенные в этой инструкции, описывают последовательность действий для установки DropApp на операционные системы Platform V SberLinux OS Server и/или Platform V SberLinux OS Core (далее – SberLinux) с помощью утилиты Dactl.

Подготовка машин для кластера#

Высокодоступная конфигурация#

Высокодоступная конфигурация DropApp (HA-конфигурация) — это архитектура кластера DropApp, которая обеспечивает высокую доступность и устойчивость к сбоям, гарантируя, что кластер всегда доступен и работает даже в условиях аварий. В данной конфигурации обеспечивается дублирование критических компонентов, резервирование ресурсов и механизмы автоматического восстановления после отказа.

Для высокодоступной конфигурации потребуется:

  • 3 control plane машины:

    Минимальная конфигурация Control plane node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    4 (с поддержкой VT*)

    ОЗУ [RAM]

    8192 Мб

    Размер диска [HDD/SSD]

    15 Гб

    Рекомендуемая конфигурация Control plane node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    8 (с поддержкой VT*)

    ОЗУ [RAM]

    16000 Мб

    Размер диска [HDD/SSD]

    50 Гб

  • 2 worker машины:

    Минимальная конфигурация worker node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    4 (с поддержкой VT*)

    ОЗУ [RAM]

    8192 Мб

    Размер диска [HDD/SSD]

    30 Гб

    Рекомендуемая конфигурация worker node#

    Значение

    Размер

    ЦПУ [CPU] (в ядрах)

    8 (с поддержкой VT*)

    ОЗУ [RAM]

    16000 Мб

    Размер диска [HDD/SSD]

    100 Гб

Минимальная конфигурация#

Минимальная конфигурация DropApp (min-config) — это базовая структура кластера DropApp, которая включает в себя минимальное количество компонентов, необходимых для обеспечения базовой функциональности кластера.

Для минимальной конфигурации потребуется 1 control plane машина и 2 worker машины.

Создание SSH-ключа на машине администратора#

Сгенерируйте пару SSH-ключей на машине администратора, используя команду ssh-keygen.

Пример с использованием типа RSA#

Для генерации SSH-ключей с использованием типа RSA и длиной не менее 4096 бит используйте команду:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_dapp

Где:

-t - тип ключа, например rsa или ed25519; -b - длина ключа (для RSA рекомендуется 4096 бит); -C - комментарий, обычно email; -f - путь и имя файла для сохранения ключей.

Пример с использованием типа Ed25519#

Для генерации SSH-ключей с использованием типа Ed25519 используйте команду:

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_dapp

Дополнительные настройки для каждой машины кластера#

На каждой машине кластера:

Остальные настройки обеспечит Dactl.

Установка базовой языковой региональной настройки#
  1. Для установки базовой языковой региональной настройки, системной локали, установите пакет поддержки английского языка в приложениях с помощью команды:

    dnf install glibc-langpack-en
    
  2. Измените системную локаль с помощью команды:

    localectl set-locale LANG=en_US.UTF-8
    

    Пример вывода:

    LANG=en_US.UTF-8
    LC_TIME=ru_RU.UTF-8
    LC_MONETARY=en_US.UTF-8
    
Создание пользователя dapp#

На каждой машине:

  1. Создайте пользователя с домашним каталогом:

    useradd dapp
    
  2. Добавьте пользователя dapp в группу sudo:

    usermod -aG wheel dapp
    
  3. Предоставьте пользователю dapp права на использование команды sudo без пароля:

    echo "dapp ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/99-dapp-nopasswd
    
  4. Назначьте необходимые права пользователю dapp:

    chmod 440 /etc/sudoers.d/99-dapp-nopasswd
    
Перемещение публичного ключа#
  1. На машине администратора выведите сгенерированный ключ:

    cat ~/.ssh/id_dapp.pub
    

    Пример вывода:

    "ssh-rsa AAAAaaaaa.....11111== email@example.com"
    
  2. Для перемещения публичного ключа на каждой машине кластера:

    • Переключитесь на пользователя dapp:

    sudo su - dapp
    
    • Создайте каталог для ключа:

    mkdir -p ~/.ssh
    
    • Скопируйте ключ:

    echo "ssh-rsa AAAAaaaaa.....11111== email@example.com" >> ~/.ssh/authorized_keys
    
    • Назначьте необходимые права для каталога ~/.ssh:

    chmod 700 ~/.ssh
    
    • Назначьте необходимые права для каталога ~/.ssh/authorized_keys:

    chmod 600 ~/.ssh/authorized_keys
    
Проверка доступа по SSH#

Чтобы проверить, что с машины администратора для пользователя dapp есть доступ без пароля по протоколу SSH на каждую машину кластера, воспользуйтесь командами:

  • для control palne:

ssh dapp@<ip-address-control-plane> -i .ssh/id_dapp
  • для каждого worker node:

ssh dapp@<ip-address-worker-node> -i .ssh/id_dapp

Где: id_dapp - имя файла приватного ключа SSH, который используется для аутентификации при подключении к удаленному серверу.

Добавление локального реестра с RPM-репозиторием#

Для добавления локального реестра с RPM-репозиторием отредактируйте файл sberlinux.repo:

vi /etc/yum.repos.d/sberlinux.repo

Пример конфигурации:

[sbel-<version>-appstream]
name=sbel-<version>-appstream Repository
baseurl=http://<repository_ip>:8080/sbel-<version>-appstream
enabled=1
gpgcheck=0

[sbel-<version>-baseos]
name=sbel-<version>-appstream Repository
baseurl=http://<repository_ip>:8080/sbel-<version>-baseos
enabled=1
gpgcheck=0

Где: <repository_ip> содержится в выводе скрипта rpm_repo_install.sh, в разделе Подготовка окружения.

Формирование конфигурационного файла DropAppConfiguration#

Перед формированием конфигурационного файла DropAppConfiguration для Dactl, убедитесь в наличии:

  • реестра с образами контейнеров DropApp, созданного в разделе «Подготовка окружения»;

  • сертификата для реестра образов Harbor, созданного в разделе «Подготовка окружения»;

  • репозитория с RPM-пакетами DropApp, например http://my-rpm-repo.com/dapp/<version>;

  • репозитория с RPM-пакетами Platform V SberLinux OS Server, например http://my-rpm-repo.com/SLO/<version>, в этом репозитории есть зависимости для DropApp;

  • машины с пользователем dapp;

  • токена аутентификации для Harbor, указанного в файле da.yaml в поле credentials:.

  1. Создайте конфигурационный файл (далее - файл, манифест) da.yaml:

    da.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: DropAppConfiguration
    metadata:
      name: "da-cluster"
    spec:
      network:
          publicDomain: domain.local
          metallb:
            pools:
            - addresses: "000.000.00.000/32" # Адрес из пула адресов для Metallb, описанный в разделе "Подготовка окружения"
              name: "dapp"
              l2Advertisement: true
      artifacts:
        # Реестр образов, куда были загружены образы в разделе "Подготовке окружения"
        imageRegistry:
          host: registry.da-cluster.domain.local
          path: dapp
          # Если реестр без аутентификации - поле можно удалить
          credentials: <credentials> # Токен аутентификации в base64 для Harbor, в приведенном примере это echo -n 'admin:Harbor12345' | base64 | base64
          certificate: <certificate> # Сертификат реестра. Если реестр имеет доверенный сертификат - поле можно удалить
        rpmRepository:
          - name: "dapp-<version>"
            baseUrl: http://000.000.00.27:8080/dapp-<version>-sbel9
            gpgCheck: 0
            enabled: 1
            #gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
          - name: "slo-baseos-9.5"
            baseUrl: http://000.000.10.27:8080/sbel-9.5-baseos
            gpgCheck: 0
            enabled: 1
            #gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
          - name: "slo-appstream-9.5"
            baseUrl: http://000.000.10.27:8080/sbel-9.5-appstream
            gpgCheck: 0
            enabled: 1
            #gpgKey: "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-SberLinux"
    
    
      compute:
        sshAccess:
          user: dapp
          privateKeyPath: "~/.ssh/id_dapp"
        userProvisioned:
          nodes:
            # Для высокодоступной конфигурации впишите еще 2 control-plane в список controlPlane
            controlPlane:
              - ip: "000.000.00.28"
                nodePool: "control-plane"
            worker:
              - ip: "000.000.00.29"
                nodePool: "worker"
              #- ip: "000.000.00.26"
              #  nodePool: "worker"
      k8s:
        cni:
          cilium:
            values: 
              tunnelProtocol: geneve
        podSubnetCIDR: 00.111.0.0/16 # При необходимости, настройте сеть для pods
        serviceSubnetCIDR: 00.22.0.0/16 #  При необходимости, настройте сеть для сервисов
        # При необходимости, настройте ingressTLS. Если не указан, будет сгенерирован автоматически
        #ingressTLS:
        #  cert: <certificate>...
        #  key: <key>...
    
  2. Заполните поле credentials в блоке imageRegistry. Для этого получите токен аутентификации для Harbor, выполнив на машине администратора следующую команду:

    echo -n "admin:<harbor-admin-password>" | base64 | base64
    

    Пример вывода:

    <credentials>==
    
  3. Заполните поле certificate в блоке imageRegistry. Для этого используйте сертификат для Harbor, выполнив на машине администратора следующую команду:

    ~~bash at ./harbor/certs/harbor.crt | base64 -w0 ~~

    Пример вывода:

    <certificate>
    

Запуск установки кластера#

Для установки кластера выполните команду:

./dactl/dactl create cluster --config ./da.yaml

Примечание

Для вывода полного лога увеличьте уровень verbosity, добавив флаг -v=6.

В конце установки появится сообщение:

======================================

Done! DropApp cluster with name 'da-cluster' and version '<version>' is successfully installed!

Next steps are:
 - Cluster config is stored to this machine as /home/dapp/.dropapp/da-cluster/kubeconfig
   you may need to export this path to the KUBECONFIG environment variable
   or copy it as '~/.kube/config'
   otherwise use it as --kubeconfig parameter value for kubectl or dactl commands
 - Check pods and nodes by executing `kubectl get pods -A; kubectl get nodes`
 - Check installed Platform V DropApp components by executing `kubectl get components -o wide`
 - Check installed Platform V DropApp tools by executing `kubectl get tools -o wide`
 - Visit Platform V DropApp UI: https://console.da-cluster.domain.ru
   login: kubeadmin
   password is stored in: /home/dapp/.dropapp/da-cluster/kubeadmin-password

Описание установленного кластера#

Артефакты установки#

После завершения процесса установки на машине администратора будут доступны следующие артефакты:

  • конфигурационный файл кластера: /home/dapp/.dropapp/da-cluster/kubeconfig

  • параметры учетной записи пользователя kubeadmin, в частности пароль для учетной записи в файле /home/dapp/.dropapp/da-cluster/kubeadmin-password. Данный артефакт можно использовать для доступа в пользовательскую консоль по адресу из примера https://console.da-cluster.domain.ru.

Компоненты и инструменты#

Компонент (Component) - группа, состоящая из одного и более инструментов, объединенная для решения конкретной задачи. Например компонент Monitoring может состоять из нескольких операторов - Victoria-metrics-operator, Console-dashboards, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack.

Инструмент (Tool) - оператор, pods, deployments и другие ресурсы k8s, выполняющие отдельную функцию. Устанавливаются с помощью Helm-чарт.

Основные компоненты:

Компонент

Инструменты в составе компонента

Auth

Dex, Role-model

Cert-management

Cert-manager

Cni

Cilium

Ingress-controller

Ingress-nginx

Load-balancer

Metallb

Ui

Console

Дополнительные компоненты

Компонент

Инструменты в составе компонента

Alerting

Alertmanager

Logging

Vector

Security

Gatekeeper

Monitoring

Victoria-metrics-operator
Console-dashboards
Kube-state-metrics
Prometheus-node-exporter
Metrics-server
Victoria-metrics-k8s-stack

Установленные компоненты#

Для проверки перечня установленных компонентов, с помощью утилиты Kubectl, выполните команду:

./kubectl get components -o wide

Вывод команды покажет список установленных по умолчанию компонентов:

NAME                 STATUS    AGE     DAPP VERSION   TOOLS
auth                 success   2m10s   <version>      dex, role-model
cert-management      success   2m10s   <version>      cert-manager
cni                  success   2m10s   <version>      cilium
ingress-controller   success   2m10s   <version>      ingress-nginx
load-balancer        success   2m10s   <version>      metallb
ui                   success   2m10s   <version>      console

Установка утилиты Kubectl#

Для установки утилиты Kubectl выполните следующие шаги:

  1. Скопируйте файл конфигурации в каталог ~/.kube/config с помощью команды:

    cp -p ~/.dropapp/da-cluster/kubeconfig ~/.kube/config
    
  2. Извлеките Kubectl

    unzip k8sc-binaries-<version>-<distrib_number>-distrib.zip
    

Установленные инструменты#

Для проверки перечня установленных инструментов, с помощью утилиты Kubectl из релизного дистрибутива, выполните команду:

./kubectl get tools -o wide

Вывод команды покажет список установленных по умолчанию инструментов и их версии:

NAME                         STATUS    RETRY   AGE     VERSION            DAPP VERSION   COMPONENT
cert-manager                 success   0       2m10s   v1.16.2            <version>      cert-management
cilium                       success   0       2m10s   1.16.5             <version>      cni
console                      success   0       2m10s   4.12.0             <version>      ui
dex                          success   0       2m10s   2.41.1             <version>      auth
ingress-nginx                success   0       2m10s   1.11.3             <version>      ingress-controller
metallb                      success   0       2m10s   v0.14.9            <version>      load-balancer
role-model                   success   0       2m10s   <version>          <version>      auth

Ручная установка дополнительных компонентов#

Установка компонента Alerting#

Компонент Alerting устанавливает инструмент Alertmanager, который отвечает за отправку уведомлений настроенных событий кластера по адресатам настроенным для Alertmanager.

Для установки компонента Alerting:

  1. Создайте файл component-alerting.yaml:

    component-alerting.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: alerting
    
  2. Примените файл:

    ./kubectl apply -f component-alerting.yaml
    
  3. Дождитесь статуса success для инструмента Alertmanager:

    ./kubectl get tool alertmanager
    
    NAME           STATUS    AGE   COMPONENT
    alertmanager   success   9s    alerting
    
  4. Ресурсы Alertmanager созданы автоматически в namespace dapp-alerting, проверьте pods:

    ./kubectl get all -n dapp-alerting
    
    NAME                 READY   STATUS    RESTARTS   AGE
    pod/alertmanager-0   2/2     Running   0          66s
    
    NAME                            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    service/alertmanager            ClusterIP   00.00.00.000   <none>        9093/TCP   66s
    service/alertmanager-headless   ClusterIP   None           <none>        9093/TCP   66s
    
    NAME                            READY   AGE
    statefulset.apps/alertmanager   1/1     66s
    

Установка компонента Logging#

Компонент Logging устанавливает инструмент Vector.

Для установки компонента Logging:

  1. Создайте файл component-logging.yaml:

    component-logging.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: logging
    
  2. Примените файл:

    ./kubectl apply -f component-logging.yaml
    
  3. Дождитесь статуса success для инструмента Vector:

    ./kubectl get tools -o wide | grep logging
    vector          success   0       32s     0.43.1        <version>      logging
    
  4. Ресурсы Logging созданы автоматически в namespace dapp-logging, проверьте pods:

    ./kubectl get pods -n dapp-logging
    NAME                       READY   STATUS    RESTARTS   AGE
    vector-0                   1/1     Running   0          28s
    

Установка компонента Security#

Компонент Security устанавливает инструмент Gatekeeper, который реализует функции безопасности настроек в кластере.

Для установки компонента Security:

  1. Создайте файл component-security.yaml, укажите в нем логин и пароль для реестра, в котором лежит база данных Trivy:

    component-security.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: security
    
  2. Примените файл:

    ./kubectl apply -f component-security.yaml
    
  3. Дождитесь статуса success для инструмента Gatekeeper:

    ./kubectl get tools -o wide | grep security
    gatekeeper                   success   0       15s    v3.17.1       <version>    security
    
  4. Ресурсы Security созданы автоматически в namespace dapp-security, проверьте pods:

    ./kubectl get pods -n dapp-security
    NAME                                             READY   STATUS      RESTARTS      AGE
    gatekeeper-audit-7565f7dc86-f55nj                1/1     Running     0             2m
    gatekeeper-controller-manager-6566c97597-l99kn   1/1     Running     0             2m
    gatekeeper-controller-manager-6566c97597-xt6sh   1/1     Running     0             2m
    

Установка компонента Monitoring#

Компонент Monitoring устанавливает инструменты Victoria-metrics-operator, Console-dashboards, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack, которые реализуют функции мониторинга и наблюдаемости в кластере.

Для установки компонента Monitoring:

  1. Создайте файл component-monitoring.yaml:

    component-monitoring.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: monitoring
    
  2. Примените файл:

    ./kubectl apply -f component-monitoring.yaml
    
  3. Дождитесь статуса success для инструментов Victoria-metrics-operator, Console-dashboards, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack:

    ./kubectl get tools -o wide | grep monitoring
    
    NAME                         STATUS    RETRY     AGE   VERSION       DAPP VERSION   COMPONENT
    console-dashboards           success     0       56s   <version>     <version>      monitoring
    kube-state-metrics           success     0       46s   2.8.2         <version>      monitoring
    metrics-server               success     0       36s   0.7.1         <version>      monitoring
    prometheus-node-exporter     success     0       46s   1.7.0         <version>      monitoring
    victoria-metrics-k8s-stack   success     0       26s   v1.101.0      <version>      monitoring
    victoria-metrics-operator    success     0       66s   0.43.5        <version>      monitoring
    
  4. Ресурсы Monitoring созданы автоматически в namespace dapp-security, проверьте pods:

    ./kubectl get pods -n dapp-monitoring
    
    NAME                                                   READY   STATUS    RESTARTS   AGE
    kube-state-metrics-779cc7f75d-bmswf                    1/1     Running   0          109s
    metrics-server-d46d68bd-6vgjm                          1/1     Running   0          97s
    prometheus-node-exporter-9f84q                         1/1     Running   0          109s
    prometheus-node-exporter-bmv9q                         1/1     Running   0          109s
    prometheus-node-exporter-hvgz7                         1/1     Running   0          109s
    prometheus-node-exporter-jld9q                         1/1     Running   0          110s
    prometheus-node-exporter-nrp8t                         1/1     Running   0          110s
    prometheus-node-exporter-tj472                         1/1     Running   0          110s
    victoria-metrics-operator-5dc4c77bc7-28dzn             1/1     Running   0          2m6s
    vmagent-victoria-metrics-k8s-stack-567d9f8497-mz54b    2/2     Running   0          77s
    vmalert-victoria-metrics-k8s-stack-848d7655d8-r292r    2/2     Running   0          76s
    vminsert-victoria-metrics-k8s-stack-857469cd74-5f2f8   1/1     Running   0          22s
    vminsert-victoria-metrics-k8s-stack-857469cd74-nwfvr   1/1     Running   0          22s
    vmselect-victoria-metrics-k8s-stack-0                  1/1     Running   0          52s
    vmselect-victoria-metrics-k8s-stack-1                  1/1     Running   0          52s
    vmstorage-victoria-metrics-k8s-stack-0                 1/1     Running   0          78s
    vmstorage-victoria-metrics-k8s-stack-1                 1/1     Running   0          78s
    

Настройка постоянного хранилища для дополнительных компонентов#

После установки кластера инструменты разворачиваются с использованием томов EmptyDir. Для промышленной эксплуатации необходимо переконфигурировать их на использование постоянных томов - Persistent Volumes. В результате создания кластера с утилитой Dactl по умолчанию создается StorageClass local-storage.

Примечание

Использование внешних хранилищ является рекомендуемой практикой, обеспечивающей надежность и доступность данных. Необходимо установить подходящий StorageClass, который обеспечит необходимую производительность, надежность и доступность системы.

Настройка постоянного хранилища для Alerting#

  1. Создайте файл alerting-persistence.yaml и настройте persistence для Alertmanager:

    logging-persistence.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: alerting
    spec:
      tools:
      - name: alertmanager
        values:
          persistence:
            enabled: true
            storageClass: openebs-hostpath # openebs тут как пример
            accessModes:
            - ReadWriteOnce
            size: 100Mi
    

    Важно

    Просто обновить конфигурацию не получится, так как Kubernetes не позволяет обновлять разделы volume для StatefulSet, поэтому нужно удалить компонент Alerting.

  2. Удалите компонент Alerting:

    ./kubectl delete component alerting
    
  3. Пересоздайте ресурсы конфигурационного файла с постоянным хранилищем, применив манифест:

    ./kubectl apply -f ./alerting-persistence.yaml
    

Ресурсы компонента Alerting будут пересозданы.

Настройка постоянного хранилища для Logging#

  1. Создайте файл logging-persistence.yaml и настройте persistence для Vector:

    logging-persistence.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: logging
    spec:
      tools:
      - name: vector
        values:
          persistence:
            enabled: true
            storageClassName: openebs-hostpath # openebs приведен как пример
    

    Важно

    Просто обновить конфигурацию не получится, так как Kubernetes не позволяет обновлять разделы volume для StatefulSet, поэтому нужно удалить компонент Logging.

  2. Удалите компонент Logging:

    ./kubectl delete component logging
    
  3. Пересоздайте ресурсы конфигурационного файла с постоянным хранилищем, применив манифест:

    ./kubectl apply -f ./logging-persistence.yaml
    

Ресурсы компонента Logging будут пересозданы.

Настройка постоянного хранилища для Monitoring#

  1. Создайте файл logging-persistence.yaml и настройте persistence для Victoria-metrics-operator, Console-dashboards, Kube-state-metrics, Prometheus-node-exporter, Metrics-server, Victoria-metrics-k8s-stack:

    monitoring-persistence.yaml
    apiVersion: config.dropapp.ru/v1alpha1
    kind: Component
    metadata:
      name: monitoring
    spec:
      tools:
      - name: victoria-metrics-k8s-stack
        values:
          vmcluster:
            spec:
              vmstorage:
                storage:
                  volumeClaimTemplate:
                    spec:
                      storageClassName: openebs-hostpath # openebs приведен как пример
                      resources:
                        requests:
                          storage: 10Gi
              vmselect:
                storage:
                  volumeClaimTemplate:
                    spec:
                      storageClassName: openebs-hostpath # openebs приведен как пример
                      resources:
                        requests:
                          storage: 2Gi
    

    Важно

    Просто обновить конфигурацию не получится, так как Kubernetes не позволяет обновлять разделы volume для StatefulSet, поэтому нужно удалить компонент Monitoring.

  2. Удалите компонент Monitoring:

    ./kubectl delete component monitoring
    
  3. Пересоздайте ресурсы конфигурационного файла с постоянным хранилищем, применив манифест:

    ./kubectl apply -f ./monitoring-persistence.yaml
    

Ресурсы компонента Monitoring будут пересозданы.

Добавление новых node в кластер#

Добавление node в кластер происходит через создание Custom Resource с типом DropAppNode.

Подготовка машины#

Подготовьте машину, как описано в разделе «Подготовка машин для кластера».

Подготовка DropAppNode манифеста#

Создайте манифест с именем, например, dapp-node.yaml:

dapp-node.yaml
apiVersion: nodes.dropapp.ru/v1alpha1
kind: DropAppNode
metadata:
  name: <DropAppNode-name> # например dapp-worker-03.da-cluster.domain.ru
spec:
  compute:
    hostname: <DropAppNode-name> # например dapp-worker-03.da-cluster.domain.ru
    ip: 00.00.00.53
    nodePool: worker # Значение подставится как роль для node (kubectl get nodes)
    nodeType: worker # Значение для добавления worker. Можно будет добавлять узлы с типом control plane
  sshAccessRef:
    kind: SSHAccess
    name: primary-nodes-access # ресурс SSHAccess с именем primary-nodes-access создан автоматически при создании кластера

Примечание

Значения полей metadata.name и spec.compute.hostname должны совпадать. Также важно следить, чтобы не было конфликтов с существующими dropappnodes. Посмотреть существующие dropappnodes, которые создаются Dactl автоматически, можно командой kubectl get dropappnodes -o wide.

Применение DropAppNode манифеста#

Примените манифест

./kubectl apply -f ./dapp-node.yaml

Валидация добавления нового node в кластер#

Проверьте, что node добавлен:

./kubectl get nodes

NAME                                          STATUS   ROLES           AGE   VERSION
dapp-cp-01.da-cluster.domain.ru               Ready    control-plane   83m   v1.27.16
dapp-worker-01.da-cluster.domain.ru           Ready    worker          83m   v1.27.16
dapp-worker-02.da-cluster.domain.ru           Ready    worker          83m   v1.27.16
dapp-worker-03.da-cluster.domain.ru           Ready    worker          83m   v1.27.16

Проверьте, что ресурс dropappnode создан, дождитесь пока он будет в статусе ready:

./kubectl get dropappnodes

NAME                                  STATUS   AGE     TYPE            IP ADDRESS
dapp-cp-01.da-cluster.domain.ru       ready    5m28s   control-plane   00.00.00.41
dapp-worker-01.da-cluster.domain.ru   ready    5m28s   worker          00.00.00.51
dapp-worker-02.da-cluster.domain.ru   ready    5m28s   worker          00.00.00.52
dapp-worker-03.da-cluster.domain.ru   ready    74s     worker          00.00.00.53