Перейти к содержанию

Шаг 0. Подготовка к инсталляции платформы Боцман

Перед началом инсталляции платформы "Боцман" убедитесь, что выполнены все шаги по подготовке:

  1. Подготовлен АРМ Администратора АРМ
  2. Подготовлен образ ОС Образ ОС

Заметка

Для работы кластера Bootsman c внешним ETCD потребуется дополнительная подготовка. Подробнее

Шаг 1. Подготовка файла конфигурации (bootsman.config.yaml)

На АРМ создайте конфиг файл bootsman.config.yaml в той же директории, где расположен инсталлятор-bootsmanctl

touch bootsman.config.yaml
И откройте его для редактирования любым текстовом редакторе, например nano:
nano bootsman.config.yaml

kubernetesVersion: KUBERNETES_VERSION (1)
# Раскоментируйте блок в случае airgap установки
# registry:
#  username: PRIVATE_REGISTRY_USERNAME (2)
#  password: PRIVATE_REGISTRY_PASSWORD (3)
#  path: PRIVATE_REGISTRY_URL (4)
#  insecure: PRIVATE_REGISTRY_INSECURE (5)
sshAuthorizedKeys: (6)
  - ssh-ed25519 AAAAC3NzaC1lZKKtLOCNv2g bootsman@stsoft.ru
wait:
  AddonHelmTimeout: 10m (37)
  clusterCtlTimeout: 30m0s (38)
  operationTimeout: 40m0s (39)
  operationRetryInterval: 15s (40)
  objCreateTimeout: 4m0s (41)
  objCreateInterval: 5s (42)
infrastructure:
  clusterNetwork:
    podCidrBlocks: ["POD_CIDR"] (7)
    servicesCidrBlocks: ["SERVICE_CIDR"] (8)
  yandex:
    auth:
      keyFileLocation: KEY_FILE_LOCATION (9)
    folderId: YANDEX_FOLDER_ID (10)
    zone: YANDEX_ZONE (11)
    network:
      name: YANDEX_NETWORK_NAME (12)
      useExisting: false (13)
    subNetworks:
      - availabilityZone: ru-central1-a (48)
    # Раскомментируйте блок для использования существующей подсети
      #   id: YANDEX_SUBNETWORK_ID (50)
      #   useExisting: true 
    # Раскомментируйте блок для создания новой подсети
      #   name: YANDEX_SUBNETWORK_NAME (14)
      #   podCIDR: YANDEX_SUBNETWORK_CIDR (16)
    privacy: YANDEX_PRIVACY (18)
controlPlane:
  endpoint:
    host: 
    port: KUBE_API_PORT (19)
  replicas: KCP_REPLICAS (20)
  label: master 
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    platformId: YANDEX_CONTROLPLANE_PLATFORM_ID (21)
    cores: YANDEX_CONTROLPLANE_CORES (22)
    memory: YANDEX_CONTROLPLANE_MEMORY (23)
    diskType: YANDEX_CONTROLPLANE_DISK_TYPE (24)
    diskSize: YANDEX_CONTROLPLANE_DISK_SIZE (25)
    imageId: YANDEX_CONTROLPLANE_IMAGE_ID (26)
  machineHealthCheck:  
      timeoutDuration: 10m0s (43)
      maxUnhealthy: 100% (44)
workerPool:
  replicas: WORKER_REPLICAS (27)
  label: worker
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    platformId: YANDEX_WORKER_PLATFORM_ID (28)
    cores: YANDEX_WORKER_CORES (29)
    memory: YANDEX_WORKER_MEMORY (30)
    diskType: YANDEX_WORKER_DISK_TYPE (31)
    diskSize: YANDEX_WORKER_DISK_SIZE (32)
    imageId: YANDEX_WORKER_IMAGE_ID (33)
    availabilityZones: (47)
      - ru-central1-a (49)
  machineHealthCheck:  
      timeoutDuration: 10m0s (45)
      maxUnhealthy: 40% (46)
web:
  bootstrapPassword: BOOTSMAN_WEB_BOOTSTRAPPASSWORD (34)
  hostname: BOOTSMAN_WEB_HOSTNAME (35)
  1. Версия Kubernetes. Поддерживаемые версии
  2. Имя пользователя в репозитории образов.

    Если установка будет производится online блок registry можно удалить

  3. Пароль для пользователя в репозитории образов.

    Если установка будет производится online блок registry можно удалить

  4. URL вашего репозитория образов.

    Если установка будет производится online блок registry можно удалить

  5. Это служебный параметр, всегда будет false
  6. Список ssh-ключей, которые будут добавлены на узлы
  7. Блок адресов для Pods.

    Должен не пересекаться с другими блоками внутри одного Kubernetes кластера.

    Допустимый размер блока /[1-20]

    Пример:

    podsCidrBlocks: ["172.20.0.0/16"]

  8. Блок адресов для Service.

    Должен не пересекаться с другими блоками внутри одного Kubernetes кластера.

    Допустимый размер блока /[1-20]

    Пример:

    servicesCidrBlocks: ["172.21.0.0/16"]

  9. Относительный путь до файла авторизации.

    Рабочая директория .bootsmanctl.

    Создание авторизованного ключа

  10. Директория в облаке Yandex.

    Должна быть создана до запуска.

    Как узнать мой FodlerID?

  11. Зона доступности облака Yandex.

    О Зонах Yandex

  12. Имя сети Yandex Cloud.

    Исключает установку YANDEX_NETWORK_ID

  13. true в случае использования существующего ресурса, false для создания нового
  14. Имя подсети Yandex Cloud.

    Исключает установку YANDEX_SUBNETWORK_ID

  15. true в случае использования существующего ресурса, false для создания нового
  16. Адресное пространство для новой подсети Yandex Cloud
  17. true в случае использования существующего ресурса, false для создания нового
  18. Выбор режима взаимодействия с кластером.

    Поддерживаемые значения Public, PrivateMachines, Private.

    Подробнее

  19. Порт kube-api. По-умолчанию 6443
  20. Количество узлов с ролью master.

    Может принимать значения 3 или 5

  21. Тип процессора.

    Типы Процессоров

  22. Число CPU.

    Требования к инфраструктуре

  23. Объём оперативной памяти. Измеряется в GB.

    Требования к инфраструктуре

  24. Тип дисков.

    Типы дисков

  25. Объём дискового пространства. Измеряется в GB.

    Требования к инфраструктуре

  26. ID образа операционной системы.

    Подготовьте ОС в соответствии с инструкцией или используйте уже подготовленные образа

  27. Число узлов в workerpool. Сумма узлов во всех workerpool должна быть >=3
  28. Тип процессора.

    Типы Процессоров

  29. Число CPU .

    Требования к инфраструктуре

  30. Объём оперативной памяти. Измеряется в GB.

    Требования к инфраструктуре

  31. Тип дисков.

    Типы дисков

  32. Объём дискового пространства. Измеряется в GB.

    Требования к инфраструктуре

  33. ID образа операционной системы.

    Подготовьте ОС в соответствии с инструкцией или используйте уже подготовленные образа

  34. Первоначальный пароль от web портала
  35. Доменное имя, по которому будет доступен web портал платформы.

    Имя должно иметь запись на DNS-сервере.

    Нельзя использовать Hosts

    Нельзя указывать IP-адрес

  36. blob
  37. {{ no such element: dict object['AddonHelmTimeout'] }}
  38. Таймаут на все действия bootsmanctl
  39. Таймаут по-умолчанию для всех операций
  40. Интервал по-умолчанию для всех операций
  41. Таймаут на создание или обновление объектов
  42. Интервал повторной попытки создания или обновления объектов
  43. Время, которое дается узлу на самостоятельное восстановление, прежде чем вмешается MachineHealthCheck.

    По-умолчанию 10m

    Подробнее

  44. Пороговое значение для MachineHealthCheck, при превышении которого не будет выполняться исправления.

    Для узлов с ролью master, значение по-умолчанию 100%.

    Для узлов с ролью worker, значение по-умолчанию 40%

    Подробнее

  45. Время, которое дается узлу на самостоятельное восстановление, прежде чем вмешается MachineHealthCheck.

    По-умолчанию 10m

    Подробнее

  46. Пороговое значение для MachineHealthCheck, при превышении которого не будет выполняться исправления.

    Для узлов с ролью master, значение по-умолчанию 100%.

    Для узлов с ролью worker, значение по-умолчанию 40%

    Подробнее

  47. Список зон, в которых будут размещены узлы кластера.

    Является неизменяемым параметром.

    Каждой зоне должна соответствовать своя подсеть(SubNetwork)

  48. Зона Yandex Cloud.

    Список доступных зон

  49. Зона Yandex Cloud.

    Список доступных зон

  50. ID подсети в Yandex Cloud

Пример заполненного файла конфигурации:

kubernetesVersion: "v1.28.4"
registry:
  username: demo
  password: demo
  path: redos-quay.stsoft.lan/bootsman-v210
  insecure: true
sshAuthorizedKeys:
  - ssh-ed25519 AAAAC3NzaC1lZKKtLOCNv2g bootsman@stsoft.ru
wait:
  clusterCtlTimeout: 50m0s
  operationTimeout: 40m0s
  operationRetryInterval: 15s
  objCreateTimeout: 4m0s
  objCreateInterval: 5s
infrastructure:
  yandex:
    auth:
      keyFileLocation: "key.json.bootsmanctl"
    folderId: b1gvs031ueof1otylrqr
    network:
      name: default-1
      useExisting: false
    subNetworks:
      - name: default-1
        availabilityZone: ru-central1-a
        podCIDR: 10.200.0.0/24
    privacy: Public
  clusterNetwork:
    podCidrBlocks: ["172.20.0.0/16"]
    servicesCidrBlocks: ["172.21.0.0/16"]
controlPlane:
  endpoint:
    host: ""
    port: 6443
  replicas: 3
  label: master
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    platformId: standard-v2
    cores: 4
    memory: 8
    diskType: network-ssd
    diskSize: 65
    imageId: fd8gq17vqe1ph4tiyrbc
workerPool:
  replicas: 3
  label: worker
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    availabilityZones:
      - ru-central1-a
    platformId: standard-v2
    cores: 4
    memory: 12
    diskType: network-ssd
    diskSize: 65
    imageId: fd8gq17vqe1ph4tiyrbc
web:
  bootstrapPassword: "somePassword123$"
  hostname: rancher.redos-v21-ag.dev.stsoft.lan
kubernetesVersion: "v1.28.4"
sshAuthorizedKeys:
  - ssh-ed25519 AAAAC3NzaC1lZKKtLOCNv2g bootsman@stsoft.ru
wait:
  clusterCtlTimeout: 50m0s
  operationTimeout: 40m0s
  operationRetryInterval: 15s
  objCreateTimeout: 4m0s
  objCreateInterval: 5s
infrastructure:
  yandex:
    auth:
      keyFileLocation: "key.json.bootsmanctl"
    folderId: b1gvs031ueof1otylrqr
    network:
      name: default-1
      useExisting: false
    subNetworks:
      - name: default-1
        availabilityZone: ru-central1-a
        podCIDR: 10.200.0.0/24
    privacy: Public
  clusterNetwork:
    podCidrBlocks: ["172.20.0.0/16"]
    servicesCidrBlocks: ["172.21.0.0/16"]
controlPlane:
  endpoint:
    host: ""
    port: 6443
  replicas: 3
  label: master
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    availabilityZones:
      - ru-central1-a
    platformId: standard-v2
    cores: 4
    memory: 8
    diskType: network-ssd
    diskSize: 65
    imageId: fd8gq17vqe1ph4tiyrbc
workerPool:
  replicas: 3
  label: worker
  kubeletExtraArgs:
    kubeReserved: ""
    systemReserved: ""
    evictionHard: ""
    evictionMinimumReclaim: ""
    evictionMaxPodGracePeriod: ""
    maxPods: ""
    seccompDefault: ""
  yandexMachine:
    platformId: standard-v2
    cores: 4
    memory: 12
    diskType: network-ssd
    diskSize: 65
    imageId: fd8gq17vqe1ph4tiyrbc
web:
  bootstrapPassword: "somePassword123$"
  hostname: rancher.redos-v21-ag.dev.stsoft.lan

Шаг 2. Запуск установки

Заметка

Установка платформы "Боцман" запускается с заранее подготовленным АРМ

Выполните команду запуска процесса установки:

./bootsmanctl mgmt create cluster-name -i yandex -c bootsman.config.yaml (1)
  1. cluster-name - Имя управляющего кластера

Вывод инсталляции должен окончиться так:

2023-09-10T17:49:46Z | INFO  | finished
В процессе установки кластера будет формироваться
журнал событий.

Неудачная инсталляция

В случае, если установка прервалась, и потребуется сделать еще одну попытку. Для новой попытки нужно сделать:

  • Удалить вручную все что успел создать установщик Ресурсы Bootsman
  • Удалить файлы инсталляции на АРМ администратора
    ./bootsmanctl mgmt delete cluster-name
    
  • Если лицензия была установлена в env операционной системы - удостовериться в ее наличии
    env | grep LICENSE
    

Доступ в интерфейс

Для успешного доступа в интерфейс нужно добавить запись в ваш DNS-сервер.

Запись состоит из двух параметров: IP-адрес и доменное имя(Оно указывалось в bootsman.config.yaml в виде опции BOOTSMAN_WEB_HOSTNAME).

IP-адрес можно получить двумя способами:

  • Использовать kubectl(потребуется отдельная установка) и kubeconfig управляющего кластера
    KUBECONFIG=~/.bootsmanctl/management/cluster-name-kubeconfig kubectl get ingress -n cattle-system | grep rancher | awk '{print $4}'
    
  • Зайти в Yandex Cloud в указанный Folder и найти балансировщик вида: yandex-ccm-*

После добавления записи, произведите вход в web-панель (1)

login login

login: admin
password: BOOTSMAN_WEB_BOOTSTRAPPASSWORD (2)
  1. Адрес web-панели содержится в опции BOOTSMAN_WEB_HOSTNAME
  2. Пароль для доступа в web-панель содержится в опции BOOTSMAN_WEB_BOOTSTRAPPASSWORD

Вы авторизовались под пользователем admin. Далее рекомендуем сменить этот пароль с помощью стандартного меню управления пользователями.

Следующий шаг