Deckhouse Kubernetes Platform в Selectel (OpenStack)

Введите лицензионный ключ

Ввести

Ниже сгенерированы рекомендованные настройки для установки Deckhouse Kubernetes Platform Enterprise Edition:

  • config.yml — файл первичной конфигурации кластера. Содержит параметры инсталлятора, параметры доступа облачного провайдера и начальные параметры кластера.
  • resources.yml — описание ресурсов для создания после установки (настройки узлов и Ingress-контроллера).

Обратите внимание:

  • Так выделены параметры, обязательные для самостоятельного заполнения.
  • Так выделены параметры, которые вы возможно захотите изменить.
  • Если вы запускаете инсталлятор под Windows, то убедитесь, что кодировка создаваемых YAML-файлов конфигурации UTF-8 (либо удалите примечания на русском языке).

Создайте файл config.yml.

# Общие параметры кластера.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#clusterconfiguration
apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Cloud
cloud:
  provider: OpenStack
  # Префикс объектов, создаваемых в облаке при установке.
  # Возможно, захотите изменить.
  prefix: cloud-demo
# Адресное пространство Pod’ов кластера.
podSubnetCIDR: 10.111.0.0/16
# Адресное пространство для service’ов кластера.
serviceSubnetCIDR: 10.222.0.0/16
kubernetesVersion: "Automatic"
clusterDomain: "cluster.local"
---
# Настройки первичной инициализации кластера Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration
apiVersion: deckhouse.io/v1
kind: InitConfiguration
deckhouse:
  imagesRepo: registry.deckhouse.ru/deckhouse/ee
  # Строка с ключом для доступа к Docker registry (сгенерировано автоматически для вашего токена доступа).
  registryDockerCfg: <YOUR_ACCESS_STRING_IS_HERE>
---
# Настройки модуля deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    bundle: Default
    releaseChannel: Stable
    logLevel: Info
---
# Глобальные настройки Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  version: 1
  settings:
    modules:
      # Шаблон, который будет использоваться для составления адресов системных приложений в кластере.
      # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'.
      # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration.
      # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки.
      publicDomainTemplate: "%s.example.com"
---
# Настройки модуля user-authn.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 2
  enabled: true
  settings:
    controlPlaneConfigurator:
      dexCAMode: DoNotNeed
    # Включение доступа к API-серверу Kubernetes через Ingress.
    # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/configuration.html#parameters-publishapi
    publishAPI:
      enabled: true
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: ""
---
# Настройки модуля для работы с OpenStack.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cloud-provider-openstack
spec:
  version: 1
  enabled: true
  settings:
    # Storage Class по умолчанию.
    storageClass:
      default: fast.ru-3a
---
# Настройки облачного провайдера.
# https://deckhouse.io/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cluster_configuration.html
apiVersion: deckhouse.io/v1
kind: OpenStackClusterConfiguration
layout: Standard
standard:
  # Кластера в Selectel VPC должны устанавливаться с bastion-хостом в целях безопасности, из-за отсутствия поддержки Security Groups.
  # В противном случае в WAN будут открыты порты на master-узлах.
  bastion:
    zone: ru-3a
    volumeType: fast.ru-3a
    instanceClass:
      flavorName: c2m2-d0
      imageName: ubuntu-22-04
      rootDiskSize: 20
  # Имя сети для внешнего взаимодействия. Значение по умолчанию: external-network
  externalNetworkName: external-network
  # Адресация для внутренней сети узлов кластера.
  internalNetworkCIDR: 192.168.198.0/24
  # Список адресов рекурсивных DNS внутренней сети.
  # Возможно, захотите изменить.
  internalNetworkDNSServers:
    - 8.8.8.8
    - 8.8.4.4
  # SecurityGroups не поддерживаются в Selectel VPC.
  internalNetworkSecurity: false
# параметры доступа к OpenStack API
provider:
  authURL: 'https://api.selvpc.ru/identity/v3'
  # Переменная OS_USER_DOMAIN_NAME из openrc-файла.
  domainName: *!CHANGE_DOMAINNAME*
  password: *!CHANGE_PASSWORD*
  # Возможно, захотите изменить.
  region: ru-3
  # Возможно вам нужно указать tenantName вместо tenantID.
  # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cluster_configuration.html#openstackclusterconfiguration-provider-tenantname
  # tenantName: PROJECT_NAME
  tenantID: *!CHANGE_PROJECT_ID*
  # Переменная OS_USERNAME из openrc-файла.
  username: *!CHANGE_USERNAME*
masterNodeGroup:
  replicas: 1
  # Массив используемых типов дисков.
  volumeTypeMap:
    # <availability zone>: <volume type>
    # Возможно, захотите изменить.
    ru-3a: "fast.ru-3a"
  instanceClass:
    # Используемый flavor.
    # Возможно, захотите изменить.
    flavorName: m1.large
    # Используемый образ виртуальной машины.
    # Возможно, захотите изменить.
    # Не используйте образы, предоставленные Selectel. Загружайте и используйте образы для облачных сред, предоставленные разработчиками дистрибутива.
    imageName: ubuntu-22.04
    # Размер диска для корневой ФС.
    rootDiskSize: 40
# Публичная часть SSH-ключа для доступа к узлам облака.
# Этот ключ будет добавлен пользователю на созданных узлах (имя пользователя зависит от используемого образа).
sshPublicKey: *!CHANGE_SSH_KEY*
# Общие параметры кластера. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#clusterconfiguration apiVersion: deckhouse.io/v1 kind: ClusterConfiguration clusterType: Cloud cloud: provider: OpenStack # Префикс объектов, создаваемых в облаке при установке. # Возможно, захотите изменить. prefix: cloud-demo # Адресное пространство Pod’ов кластера. podSubnetCIDR: 10.111.0.0/16 # Адресное пространство для service’ов кластера. serviceSubnetCIDR: 10.222.0.0/16 kubernetesVersion: "Automatic" clusterDomain: "cluster.local" --- # Настройки первичной инициализации кластера Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/installing/configuration.html#initconfiguration apiVersion: deckhouse.io/v1 kind: InitConfiguration deckhouse: imagesRepo: registry.deckhouse.ru/deckhouse/ee # Строка с ключом для доступа к Docker registry (сгенерировано автоматически для вашего токена доступа). registryDockerCfg: <YOUR_ACCESS_STRING_IS_HERE> --- # Настройки модуля deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/002-deckhouse/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: deckhouse spec: version: 1 enabled: true settings: bundle: Default releaseChannel: Stable logLevel: Info --- # Глобальные настройки Deckhouse. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/deckhouse-configure-global.html#%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: global spec: version: 1 settings: modules: # Шаблон, который будет использоваться для составления адресов системных приложений в кластере. # Например, Grafana для %s.example.com будет доступна на домене 'grafana.example.com'. # Домен НЕ ДОЛЖЕН совпадать с указанным в параметре clusterDomain ресурса ClusterConfiguration. # Можете изменить на свой сразу, либо следовать шагам руководства и сменить его после установки. publicDomainTemplate: "%s.example.com" --- # Настройки модуля user-authn. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: user-authn spec: version: 2 enabled: true settings: controlPlaneConfigurator: dexCAMode: DoNotNeed # Включение доступа к API-серверу Kubernetes через Ingress. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/configuration.html#parameters-publishapi publishAPI: enabled: true https: mode: Global global: kubeconfigGeneratorMasterCA: "" --- # Настройки модуля для работы с OpenStack. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/configuration.html apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: cloud-provider-openstack spec: version: 1 enabled: true settings: # Storage Class по умолчанию. storageClass: default: fast.ru-3a --- # Настройки облачного провайдера. # https://deckhouse.io/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cluster_configuration.html apiVersion: deckhouse.io/v1 kind: OpenStackClusterConfiguration layout: Standard standard: # Кластера в Selectel VPC должны устанавливаться с bastion-хостом в целях безопасности, из-за отсутствия поддержки Security Groups. # В противном случае в WAN будут открыты порты на master-узлах. bastion: zone: ru-3a volumeType: fast.ru-3a instanceClass: flavorName: c2m2-d0 imageName: ubuntu-22-04 rootDiskSize: 20 # Имя сети для внешнего взаимодействия. Значение по умолчанию: external-network externalNetworkName: external-network # Адресация для внутренней сети узлов кластера. internalNetworkCIDR: 192.168.198.0/24 # Список адресов рекурсивных DNS внутренней сети. # Возможно, захотите изменить. internalNetworkDNSServers: - 8.8.8.8 - 8.8.4.4 # SecurityGroups не поддерживаются в Selectel VPC. internalNetworkSecurity: false # параметры доступа к OpenStack API provider: authURL: 'https://api.selvpc.ru/identity/v3' # Переменная OS_USER_DOMAIN_NAME из openrc-файла. domainName: *!CHANGE_DOMAINNAME* password: *!CHANGE_PASSWORD* # Возможно, захотите изменить. region: ru-3 # Возможно вам нужно указать tenantName вместо tenantID. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cluster_configuration.html#openstackclusterconfiguration-provider-tenantname # tenantName: PROJECT_NAME tenantID: *!CHANGE_PROJECT_ID* # Переменная OS_USERNAME из openrc-файла. username: *!CHANGE_USERNAME* masterNodeGroup: replicas: 1 # Массив используемых типов дисков. volumeTypeMap: # <availability zone>: <volume type> # Возможно, захотите изменить. ru-3a: "fast.ru-3a" instanceClass: # Используемый flavor. # Возможно, захотите изменить. flavorName: m1.large # Используемый образ виртуальной машины. # Возможно, захотите изменить. # Не используйте образы, предоставленные Selectel. Загружайте и используйте образы для облачных сред, предоставленные разработчиками дистрибутива. imageName: ubuntu-22.04 # Размер диска для корневой ФС. rootDiskSize: 40 # Публичная часть SSH-ключа для доступа к узлам облака. # Этот ключ будет добавлен пользователю на созданных узлах (имя пользователя зависит от используемого образа). sshPublicKey: *!CHANGE_SSH_KEY*

Создайте файл resources.yml.

# Секция, описывающая параметры инстанс-класса для узлов c компонентами, обеспечивающими рабочую нагрузку.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cr.html
apiVersion: deckhouse.io/v1
kind: OpenStackInstanceClass
metadata:
  name: worker
spec:
  # Используемый flavor для данного инстанс-класса.
  # Возможно, захотите изменить.
  flavorName: m1.large
  rootDiskSize: 30
  # Используемый образ виртуальной машины.
  # Возможно, захотите изменить.
  imageName: ubuntu-22.04
---
# Секция, описывающая параметры группы узлов c компонентами, обеспечивающими рабочую нагрузку.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/040-node-manager/cr.html#nodegroup
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: worker
spec:
  cloudInstances:
    classReference:
      kind: OpenStackInstanceClass
      name: worker
    # Максимальное количество инстансов в каждой зоне (используется при масштабировании).
    # Возможно, захотите изменить.
    maxPerZone: 1
    # Минимальное количество инстансов в каждой зоне.
    minPerZone: 1
    # Список зон, в которых создаются инстансы.
    # Возможно, захотите изменить.
    zones:
    - ru-3a
  disruptions:
    approvalMode: Automatic
  nodeType: CloudEphemeral
---
# Секция, описывающая параметры NGINX Ingress controller.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: nginx
spec:
  ingressClass: nginx
  inlet: LoadBalancer
  # Описывает, на каких узлах будет находиться Ingress-контроллер. Лейбл node.deckhouse.io/group: <NODE_GROUP_NAME> устанавливается автоматически.
  nodeSelector:
    node.deckhouse.io/group: worker
---
# Настройки RBAC и авторизации.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/140-user-authz/cr.html#clusterauthorizationrule
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
  name: admin
spec:
  subjects:
  - kind: User
    name: admin@deckhouse.io
  accessLevel: SuperAdmin
  portForwarding: true
---
# Данные статического пользователя.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/cr.html#user
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: admin
spec:
  # E-mail пользователя.
  email: admin@deckhouse.io
  # Это хэш пароля <GENERATED_PASSWORD>, сгенерированного при загрузке страницы "Быстрого Старта".
  # Сгенерируйте свой или используйте этот, но только для тестирования
  # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
  # Возможно, захотите изменить.
  password: <GENERATED_PASSWORD_HASH>
# Секция, описывающая параметры инстанс-класса для узлов c компонентами, обеспечивающими рабочую нагрузку. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/030-cloud-provider-openstack/cr.html apiVersion: deckhouse.io/v1 kind: OpenStackInstanceClass metadata: name: worker spec: # Используемый flavor для данного инстанс-класса. # Возможно, захотите изменить. flavorName: m1.large rootDiskSize: 30 # Используемый образ виртуальной машины. # Возможно, захотите изменить. imageName: ubuntu-22.04 --- # Секция, описывающая параметры группы узлов c компонентами, обеспечивающими рабочую нагрузку. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/040-node-manager/cr.html#nodegroup apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: worker spec: cloudInstances: classReference: kind: OpenStackInstanceClass name: worker # Максимальное количество инстансов в каждой зоне (используется при масштабировании). # Возможно, захотите изменить. maxPerZone: 1 # Минимальное количество инстансов в каждой зоне. minPerZone: 1 # Список зон, в которых создаются инстансы. # Возможно, захотите изменить. zones: - ru-3a disruptions: approvalMode: Automatic nodeType: CloudEphemeral --- # Секция, описывающая параметры NGINX Ingress controller. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/402-ingress-nginx/cr.html apiVersion: deckhouse.io/v1 kind: IngressNginxController metadata: name: nginx spec: ingressClass: nginx inlet: LoadBalancer # Описывает, на каких узлах будет находиться Ingress-контроллер. Лейбл node.deckhouse.io/group: <NODE_GROUP_NAME> устанавливается автоматически. nodeSelector: node.deckhouse.io/group: worker --- # Настройки RBAC и авторизации. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/140-user-authz/cr.html#clusterauthorizationrule apiVersion: deckhouse.io/v1 kind: ClusterAuthorizationRule metadata: name: admin spec: subjects: - kind: User name: admin@deckhouse.io accessLevel: SuperAdmin portForwarding: true --- # Данные статического пользователя. # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/150-user-authn/cr.html#user apiVersion: deckhouse.io/v1 kind: User metadata: name: admin spec: # E-mail пользователя. email: admin@deckhouse.io # Это хэш пароля <GENERATED_PASSWORD>, сгенерированного при загрузке страницы "Быстрого Старта". # Сгенерируйте свой или используйте этот, но только для тестирования # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0 # Возможно, захотите изменить. password: <GENERATED_PASSWORD_HASH>

Для установки Deckhouse Kubernetes Platform используется Docker-образ, в который необходимо передать конфигурационные файлы и SSH-ключи доступа на master-узел (далее подразумевается что используется SSH-ключ ~/.ssh/id_rsa).

Запустите установщик на персональном компьютере.

Linux / macOS Windows

 echo <LICENSE_TOKEN> | docker login -u license-token --password-stdin registry.deckhouse.ru
docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" \
  -v "$PWD/resources.yml:/resources.yml" -v "$PWD/dhctl-tmp:/tmp/dhctl" registry.deckhouse.ru/deckhouse/ee/install:stable bash
echo <LICENSE_TOKEN> | docker login -u license-token --password-stdin registry.deckhouse.ru docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" \ -v "$PWD/resources.yml:/resources.yml" -v "$PWD/dhctl-tmp:/tmp/dhctl" registry.deckhouse.ru/deckhouse/ee/install:stable bash

Авторизуйтесь на персональном компьютере в container image registry, введя лицензионный ключ на запрос пароля:

docker login -u license-token registry.deckhouse.ru
docker login -u license-token registry.deckhouse.ru

Запустите контейнер с установщиком:

docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.ssh\:/tmp/.ssh/" -v "%cd%\resources.yml:/resources.yml" -v "%cd%\dhctl-tmp:/tmp/dhctl"  registry.deckhouse.ru/deckhouse/ee/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"
docker run --pull=always -it -v "%cd%\config.yml:/config.yml" -v "%userprofile%\.ssh\:/tmp/.ssh/" -v "%cd%\resources.yml:/resources.yml" -v "%cd%\dhctl-tmp:/tmp/dhctl" registry.deckhouse.ru/deckhouse/ee/install:stable bash -c "chmod 400 /tmp/.ssh/id_rsa; bash"

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

dhctl bootstrap --ssh-user=ubuntu --ssh-agent-private-keys=/tmp/.ssh/id_rsa --config=/config.yml --config=/resources.yml
dhctl bootstrap --ssh-user=ubuntu --ssh-agent-private-keys=/tmp/.ssh/id_rsa --config=/config.yml --config=/resources.yml

В параметре --ssh-user укажите имя пользователя по умолчанию для выбранного образа виртуальной машины. Для предложенного в руководстве образа это ubuntu.

Если установка была прервана...

Если установка была прервана (не хватило квот, ошибки сети и т.п.), вы можете ее перезапустить. Установка корректно продолжится, никакие дублирующие ресурсы в облаке созданы не будут.

Если установка не может быть продолжена и вам нужно удалить созданные в облаке ресурсы, выполните следующую команду:

dhctl bootstrap-phase abort --ssh-user=ubuntu --ssh-agent-private-keys=/tmp/.ssh/id_rsa --config=/config.yml

Процесс установки может занять от 5 до 30 минут, в зависимости от качества соединения.

По окончании установки инсталлятор выведет IP-адрес master-узла (он вам потребуется далее). Пример вывода:

...
┌ 🎈 ~ Common: Kubernetes Master Node addresses for SSH
│ cloud-demo-master-0 | ssh ubuntu@1.2.3.4
└ 🎈 ~ Common: Kubernetes Master Node addresses for SSH (0.00 seconds)

Почти все готово для полноценной работы Deckhouse Kubernetes Platform!