Deckhouse Virtualization Platform на bare metal

Ваш браузер не поддерживает генерацию Ed25519-ключей (Web Crypto API). Обновите браузер или сгенерируйте пару ключей вручную командой ssh-keygen -t ed25519 и подставьте её вместо <CAPS_SSH_PUBLIC_KEY> и <CAPS_SSH_PRIVATE_KEY>.

Выберите редакцию Deckhouse Virtualization Platform

  • Community Edition
  • Enterprise Edition

Ниже сгенерированы рекомендованные настройки для установки DVP Community Edition:

  • config.yml — файл первичной конфигурации кластера. Содержит параметры инсталлятора и начальные параметры кластера.

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

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

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

# Общие параметры кластера.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/cr.html#clusterconfiguration
apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Static
# Адресное пространство подов кластера.
# Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
podSubnetCIDR: <POD_SUBNET_CIDR>
# Адресное пространство сети сервисов кластера.
# Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
serviceSubnetCIDR: <SERVICE_SUBNET_CIDR>
kubernetesVersion: "Automatic"
# Домен кластера.
clusterDomain: "internal.cluster.local"
# Тип container runtime, используемый на узлах кластера (в NodeGroup’ах) по умолчанию.
defaultCRI: "ContainerdV2"
---
# Настройки модуля deckhouse.
# https://deckhouse.ru/modules/deckhouse/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    bundle: Default
    # Канал обновлений Deckhouse. Канал Early Access достаточно стабилен для тестовых сред.
    # Подробнее: https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/release-channels.html
    releaseChannel: EarlyAccess
    logLevel: Info
    # Настройки для доступа к хранилищу образов контейнеров с образами Deckhouse.
    registry:
      mode: Unmanaged
      unmanaged:
        imagesRepo: registry.deckhouse.ru/deckhouse/ce
---
# Глобальные настройки Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/global.html#parameters
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  version: 2
  settings:
    # StorageClass, который используется для PVC кластера, если он не указан явно.
    defaultClusterStorageClass: nfs-storage-class
    modules:
      # Шаблон адресов системных приложений в кластере.
      # Например, Grafana для `%s.example.com` будет на `grafana.example.com`, веб-интерфейс DVP — на `console.example.com`.
      # Домен НЕ ДОЛЖЕН совпадать с доменом кластера (`clusterDomain`).
      # Возможно, захотите изменить.
      publicDomainTemplate: "<PUBLIC_DOMAIN_TEMPLATE>"
      # Способ реализации протокола HTTPS, используемый модулями Deckhouse.
      # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/global.html#parameters-modules-https
      https:
        certManager:
          # Самоподписанные сертификаты: Let's Encrypt не сможет проверить домен, не опубликованный в интернете.
          clusterIssuerName: selfsigned
---
# Настройки модуля cert-manager.
# https://deckhouse.ru/modules/cert-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cert-manager
spec:
  version: 1
  enabled: true
  settings:
    # ClusterIssuer'ы Let's Encrypt не создаются: домен кластера не опубликован в интернете.
    disableLetsencrypt: true
---
# Настройки модуля user-authn.
# https://deckhouse.ru/modules/user-authn/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 2
  enabled: true
  settings:
    # Включение доступа к API-серверу Kubernetes через Ingress.
    # https://deckhouse.ru/modules/user-authn/configuration.html#parameters-publishapi
    publishAPI:
      enabled: true
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: ""
---
# Настройки модуля cni-cilium.
# https://deckhouse.ru/modules/cni-cilium/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cni-cilium
spec:
  version: 1
  # Включить модуль cni-cilium.
  enabled: true
  settings:
    tunnelMode: VXLAN
---
# Настройки модуля admission-policy-engine.
# https://deckhouse.ru/modules/admission-policy-engine/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: admission-policy-engine
spec:
  version: 1
  enabled: true
---
# Настройки модуля multitenancy-manager (проекты, квоты).
# https://deckhouse.ru/modules/multitenancy-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: multitenancy-manager
spec:
  version: 1
  enabled: true
---
# Параметры статического кластера (внутренние сети узлов).
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/cr.html#staticclusterconfiguration
apiVersion: deckhouse.io/v1
kind: StaticClusterConfiguration
# Внутренние сети узлов для компонентов Kubernetes (kube-apiserver, kubelet и т.д.).
# Обязательны для статического кластера с virtualization и при нескольких сетевых интерфейсах на узлах.
# Должны включать IP-адреса master и worker.
internalNetworkCIDRs:
  # Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
  - <INTERNAL_NETWORK_CIDRS>
---
# Группа worker-узлов для статических машин.
# https://deckhouse.ru/modules/node-manager/cr.html#nodegroup
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: worker
spec:
  nodeType: Static
  staticInstances:
    # Один worker StaticInstance в этом быстром старте.
    count: 1
    labelSelector:
      matchLabels:
        role: worker
  # Лейблы, которые проставляются на каждый узел группы.
  nodeTemplate:
    labels:
      storage: "true"
---
# SSH-доступ для Cluster API Provider Static (CAPS) к worker-узлу (приватный ключ генерируется в браузере на шаге 2).
# https://deckhouse.ru/modules/node-manager/cr.html#sshcredentials
apiVersion: deckhouse.io/v1alpha2
kind: SSHCredentials
metadata:
  name: caps
spec:
  user: caps
  privateSSHKey: <CAPS_SSH_PRIVATE_KEY_BASE64>
---
# Статический worker для CAPS (адрес из параметров кластера на шаге 2).
# https://deckhouse.ru/modules/node-manager/cr.html#staticinstance
apiVersion: deckhouse.io/v1alpha2
kind: StaticInstance
metadata:
  name: dvp-worker-1
  labels:
    role: worker
spec:
  address: "<WORKER_NODE_IP>"
  credentialsRef:
    kind: SSHCredentials
    name: caps
---
# Настройки модуля csi-nfs.
# https://deckhouse.ru/modules/csi-nfs/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: csi-nfs
spec:
  version: 1
  enabled: true
---
# Настройки модуля virtualization (Deckhouse Virtualization Container Registry (DVCR), сети ВМ).
# https://deckhouse.ru/modules/virtualization/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: virtualization
spec:
  version: 1
  enabled: true
  settings:
    dvcr:
      storage:
        persistentVolumeClaim:
          # Размер хранилища образов DVCR.
          size: 50Gi
        type: PersistentVolumeClaim
    # CIDR для трафика виртуальных машин (не должен пересекаться с pod/service).
    virtualMachineCIDRs:
      # Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
      - <VIRTUAL_MACHINE_CIDRS>
---
# NFS StorageClass для хранения в кластере и виртуализации.
# https://deckhouse.ru/modules/csi-nfs/cr.html#nfsstorageclass
apiVersion: storage.deckhouse.io/v1alpha1
kind: NFSStorageClass
metadata:
  name: nfs-storage-class
spec:
  connection:
    # Возможно, захотите изменить.
    host: <NFS_HOST>
    # Возможно, захотите изменить.
    share: <NFS_SHARE>
    nfsVersion: "4.1"
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer
  # Узлы, на которых разрешено монтировать тома этого StorageClass.
  workloadNodes:
    nodeSelector:
      matchLabels:
        storage: "true"
---
# Настройки модуля ingress-nginx.
# https://deckhouse.ru/modules/ingress-nginx/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: ingress-nginx
spec:
  version: 1
  enabled: true
---
# Ingress NGINX Controller (HostPort на control-plane для быстрого старта).
# https://deckhouse.ru/modules/ingress-nginx/cr.html
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: nginx
spec:
  ingressClass: nginx
  # HostPort публикует HTTP/HTTPS на master-узле (порты 80 и 443).
  inlet: HostPort
  hostPort:
    httpPort: 80
    httpsPort: 443
  # Возможно, захотите изменить. Сколько NGINX ждёт завершения worker-процессов при перезагрузке конфигурации.
  config:
    worker-shutdown-timeout: 300s
  nodeSelector:
    node-role.kubernetes.io/control-plane: ""
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/control-plane
      operator: Exists
---
# Настройки модуля snapshot-controller.
# https://deckhouse.ru/modules/snapshot-controller/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: snapshot-controller
spec:
  version: 1
  enabled: true
---
# Настройки модуля console.
# https://deckhouse.ru/modules/console/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: console
spec:
  version: 2
  enabled: true
---
# Настройки модуля prometheus (метрики, Grafana).
# https://deckhouse.ru/modules/prometheus/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: prometheus
spec:
  version: 2
  enabled: true
  settings:
    # Долговременное хранение метрик не запускается; основной Prometheus хранит метрики 15 дней.
    longtermRetentionDays: 0
---
# Настройки модуля upmeter (метрики доступности, страница статуса).
# https://deckhouse.ru/modules/upmeter/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: upmeter
spec:
  enabled: true
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: local-path-provisioner
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: pod-reloader
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: secret-copier
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: namespace-configurator
spec:
  enabled: false
---
# Проект для multitenancy-manager (квота ресурсов и администраторы).
# https://deckhouse.ru/modules/multitenancy-manager/cr.html#project
apiVersion: deckhouse.io/v1alpha2
kind: Project
metadata:
  name: test-project
spec:
  description: test-project
  projectTemplateName: default
  parameters:
    resourceQuota:
      requests:
        cpu: 20
        memory: 20Gi
      limits:
        cpu: 20
        memory: 20Gi
    # Возможно, захотите изменить. С `Isolated` (значение шаблона по умолчанию) образы ВМ не скачаются по HTTP, а у самих ВМ не будет доступа в интернет.
    networkPolicy: NotRestricted
    administrators:
      - subject: User
        name: admin@deckhouse.io
---
# Доступ администратора ко всему кластеру для Dex / веб-интерфейсов (нужно для веб-интерфейса DVP).
# https://deckhouse.ru/modules/user-authz/cr.html#clusterauthorizationrule
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
  name: admin
spec:
  # Список учётных записей Kubernetes RBAC.
  subjects:
    - kind: User
      name: admin@deckhouse.io
  # Предустановленный шаблон уровня доступа.
  accessLevel: SuperAdmin
  # Разрешить kubectl port-forward.
  portForwarding: true
---
# Статический пользователь для входа через Dex (веб-интерфейс DVP и другие веб-интерфейсы).
# https://deckhouse.ru/modules/user-authn/cr.html#user
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: admin
spec:
  # E-mail пользователя (логин).
  email: admin@deckhouse.io
  # Возможно, захотите изменить. Генерируется автоматически.
  # Хеш пароля `<GENERATED_PASSWORD>`.
  # echo -n '<GENERATED_PASSWORD>' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n' | base64 -w0; echo
  password: '<GENERATED_PASSWORD_HASH>'

При загрузке больших образов ВМ (особенно при медленном канале), если загрузка обрывается при перезагрузке конфигурации Ingress-контроллера, замените значение worker-shutdown-timeout в config.yml (ресурс IngressNginxController / nginx) на 1800s или больше:

  config:
    worker-shutdown-timeout: 1800s  # 30 минут или более при необходимости

Без него используется значение по умолчанию — 300s (5 минут).

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

Ввести

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

  • config.yml — файл первичной конфигурации кластера. Содержит параметры инсталлятора и начальные параметры кластера.

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

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

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

# Общие параметры кластера.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/cr.html#clusterconfiguration
apiVersion: deckhouse.io/v1
kind: ClusterConfiguration
clusterType: Static
# Адресное пространство подов кластера.
# Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
podSubnetCIDR: <POD_SUBNET_CIDR>
# Адресное пространство сети сервисов кластера.
# Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
serviceSubnetCIDR: <SERVICE_SUBNET_CIDR>
kubernetesVersion: "Automatic"
# Домен кластера.
clusterDomain: "internal.cluster.local"
# Тип container runtime, используемый на узлах кластера (в NodeGroup’ах) по умолчанию.
defaultCRI: "ContainerdV2"
---
# Настройки модуля deckhouse.
# https://deckhouse.ru/modules/deckhouse/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: deckhouse
spec:
  version: 1
  enabled: true
  settings:
    bundle: Default
    # Канал обновлений Deckhouse.
    # Подробнее: https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/release-channels.html
    releaseChannel: Stable
    logLevel: Info
    # Настройки для доступа к хранилищу образов контейнеров с образами Deckhouse.
    registry:
      mode: Unmanaged
      unmanaged:
        imagesRepo: registry.deckhouse.ru/deckhouse/ee
        license: <YOUR_ACCESS_STRING_IS_HERE>
---
# Глобальные настройки Deckhouse.
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/global.html#parameters
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: global
spec:
  version: 2
  settings:
    # StorageClass, который используется для PVC кластера, если он не указан явно.
    defaultClusterStorageClass: nfs-storage-class
    modules:
      # Шаблон адресов системных приложений в кластере.
      # Например, Grafana для `%s.example.com` будет на `grafana.example.com`, веб-интерфейс DVP — на `console.example.com`.
      # Домен НЕ ДОЛЖЕН совпадать с доменом кластера (`clusterDomain`).
      # Возможно, захотите изменить.
      publicDomainTemplate: "<PUBLIC_DOMAIN_TEMPLATE>"
      # Способ реализации протокола HTTPS, используемый модулями Deckhouse.
      # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/global.html#parameters-modules-https
      https:
        certManager:
          # Самоподписанные сертификаты: Let's Encrypt не сможет проверить домен, не опубликованный в интернете.
          clusterIssuerName: selfsigned
---
# Настройки модуля cert-manager.
# https://deckhouse.ru/modules/cert-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cert-manager
spec:
  version: 1
  enabled: true
  settings:
    # ClusterIssuer'ы Let's Encrypt не создаются: домен кластера не опубликован в интернете.
    disableLetsencrypt: true
---
# Настройки модуля user-authn.
# https://deckhouse.ru/modules/user-authn/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 2
  enabled: true
  settings:
    # Включение доступа к API-серверу Kubernetes через Ingress.
    # https://deckhouse.ru/modules/user-authn/configuration.html#parameters-publishapi
    publishAPI:
      enabled: true
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: ""
---
# Настройки модуля cni-cilium.
# https://deckhouse.ru/modules/cni-cilium/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: cni-cilium
spec:
  version: 1
  # Включить модуль cni-cilium.
  enabled: true
  settings:
    tunnelMode: VXLAN
---
# Настройки модуля admission-policy-engine.
# https://deckhouse.ru/modules/admission-policy-engine/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: admission-policy-engine
spec:
  version: 1
  enabled: true
---
# Настройки модуля multitenancy-manager (проекты, квоты).
# https://deckhouse.ru/modules/multitenancy-manager/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: multitenancy-manager
spec:
  version: 1
  enabled: true
---
# Параметры статического кластера (внутренние сети узлов).
# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/reference/api/cr.html#staticclusterconfiguration
apiVersion: deckhouse.io/v1
kind: StaticClusterConfiguration
# Внутренние сети узлов для компонентов Kubernetes (kube-apiserver, kubelet и т.д.).
# Обязательны для статического кластера с virtualization и при нескольких сетевых интерфейсах на узлах.
# Должны включать IP-адреса master и worker.
internalNetworkCIDRs:
  # Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
  - <INTERNAL_NETWORK_CIDRS>
---
# Группа worker-узлов для статических машин.
# https://deckhouse.ru/modules/node-manager/cr.html#nodegroup
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
  name: worker
spec:
  nodeType: Static
  staticInstances:
    # Один worker StaticInstance в этом быстром старте.
    count: 1
    labelSelector:
      matchLabels:
        role: worker
  # Лейблы, которые проставляются на каждый узел группы.
  nodeTemplate:
    labels:
      storage: "true"
---
# SSH-доступ для Cluster API Provider Static (CAPS) к worker-узлу (приватный ключ генерируется в браузере на шаге 2).
# https://deckhouse.ru/modules/node-manager/cr.html#sshcredentials
apiVersion: deckhouse.io/v1alpha2
kind: SSHCredentials
metadata:
  name: caps
spec:
  user: caps
  privateSSHKey: <CAPS_SSH_PRIVATE_KEY_BASE64>
---
# Статический worker для CAPS (адрес из параметров кластера на шаге 2).
# https://deckhouse.ru/modules/node-manager/cr.html#staticinstance
apiVersion: deckhouse.io/v1alpha2
kind: StaticInstance
metadata:
  name: dvp-worker-1
  labels:
    role: worker
spec:
  address: "<WORKER_NODE_IP>"
  credentialsRef:
    kind: SSHCredentials
    name: caps
---
# Настройки модуля csi-nfs.
# https://deckhouse.ru/modules/csi-nfs/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: csi-nfs
spec:
  version: 1
  enabled: true
---
# Настройки модуля virtualization (Deckhouse Virtualization Container Registry (DVCR), сети ВМ).
# https://deckhouse.ru/modules/virtualization/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: virtualization
spec:
  version: 1
  enabled: true
  settings:
    dvcr:
      storage:
        persistentVolumeClaim:
          # Размер хранилища образов DVCR.
          size: 50Gi
        type: PersistentVolumeClaim
    # CIDR для трафика виртуальных машин (не должен пересекаться с pod/service).
    virtualMachineCIDRs:
      # Возможно, захотите изменить. Убедитесь, что не будет пересечений с другими подсетями.
      - <VIRTUAL_MACHINE_CIDRS>
---
# NFS StorageClass для хранения в кластере и виртуализации.
# https://deckhouse.ru/modules/csi-nfs/cr.html#nfsstorageclass
apiVersion: storage.deckhouse.io/v1alpha1
kind: NFSStorageClass
metadata:
  name: nfs-storage-class
spec:
  connection:
    # Возможно, захотите изменить.
    host: <NFS_HOST>
    # Возможно, захотите изменить.
    share: <NFS_SHARE>
    nfsVersion: "4.1"
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer
  # Узлы, на которых разрешено монтировать тома этого StorageClass.
  workloadNodes:
    nodeSelector:
      matchLabels:
        storage: "true"
---
# Настройки модуля ingress-nginx.
# https://deckhouse.ru/modules/ingress-nginx/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: ingress-nginx
spec:
  version: 1
  enabled: true
---
# Ingress NGINX Controller (HostPort на control-plane для быстрого старта).
# https://deckhouse.ru/modules/ingress-nginx/cr.html
apiVersion: deckhouse.io/v1
kind: IngressNginxController
metadata:
  name: nginx
spec:
  ingressClass: nginx
  # HostPort публикует HTTP/HTTPS на master-узле (порты 80 и 443).
  inlet: HostPort
  hostPort:
    httpPort: 80
    httpsPort: 443
  # Возможно, захотите изменить. Сколько NGINX ждёт завершения worker-процессов при перезагрузке конфигурации.
  config:
    worker-shutdown-timeout: 300s
  nodeSelector:
    node-role.kubernetes.io/control-plane: ""
  tolerations:
    - effect: NoSchedule
      key: node-role.kubernetes.io/control-plane
      operator: Exists
---
# Настройки модуля snapshot-controller.
# https://deckhouse.ru/modules/snapshot-controller/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: snapshot-controller
spec:
  version: 1
  enabled: true
---
# Настройки модуля console.
# https://deckhouse.ru/modules/console/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: console
spec:
  version: 2
  enabled: true
---
# Настройки модуля prometheus (метрики, Grafana).
# https://deckhouse.ru/modules/prometheus/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: prometheus
spec:
  version: 2
  enabled: true
  settings:
    # Долговременное хранение метрик не запускается; основной Prometheus хранит метрики 15 дней.
    longtermRetentionDays: 0
---
# Настройки модуля upmeter (метрики доступности, страница статуса).
# https://deckhouse.ru/modules/upmeter/configuration.html
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: upmeter
spec:
  enabled: true
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: local-path-provisioner
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: pod-reloader
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: secret-copier
spec:
  enabled: false
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: namespace-configurator
spec:
  enabled: false
---
# Проект для multitenancy-manager (квота ресурсов и администраторы).
# https://deckhouse.ru/modules/multitenancy-manager/cr.html#project
apiVersion: deckhouse.io/v1alpha2
kind: Project
metadata:
  name: test-project
spec:
  description: test-project
  projectTemplateName: default
  parameters:
    resourceQuota:
      requests:
        cpu: 20
        memory: 20Gi
      limits:
        cpu: 20
        memory: 20Gi
    # Возможно, захотите изменить. С `Isolated` (значение шаблона по умолчанию) образы ВМ не скачаются по HTTP, а у самих ВМ не будет доступа в интернет.
    networkPolicy: NotRestricted
    administrators:
      - subject: User
        name: admin@deckhouse.io
---
# Доступ администратора ко всему кластеру для Dex / веб-интерфейсов (нужно для веб-интерфейса DVP).
# https://deckhouse.ru/modules/user-authz/cr.html#clusterauthorizationrule
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
  name: admin
spec:
  # Список учётных записей Kubernetes RBAC.
  subjects:
    - kind: User
      name: admin@deckhouse.io
  # Предустановленный шаблон уровня доступа.
  accessLevel: SuperAdmin
  # Разрешить kubectl port-forward.
  portForwarding: true
---
# Статический пользователь для входа через Dex (веб-интерфейс DVP и другие веб-интерфейсы).
# https://deckhouse.ru/modules/user-authn/cr.html#user
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: admin
spec:
  # E-mail пользователя (логин).
  email: admin@deckhouse.io
  # Возможно, захотите изменить. Генерируется автоматически.
  # Хеш пароля `<GENERATED_PASSWORD>`.
  # echo -n '<GENERATED_PASSWORD>' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n' | base64 -w0; echo
  password: '<GENERATED_PASSWORD_HASH>'

При загрузке больших образов ВМ (особенно при медленном канале), если загрузка обрывается при перезагрузке конфигурации Ingress-контроллера, замените значение worker-shutdown-timeout в config.yml (ресурс IngressNginxController / nginx) на 1800s или больше:

  config:
    worker-shutdown-timeout: 1800s  # 30 минут или более при необходимости

Без него используется значение по умолчанию — 300s (5 минут).

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

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

  • Linux / macOS
  • Windows

Если при включенном VPN контейнер с установщиком не может получить доступ к сети, воспользуйтесь инструкцией.

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

docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.ru/deckhouse/ce/install:stable bash -c "chmod 400 /tmp/.ssh/id_ed25519; bash"

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

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

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

dhctl bootstrap --ssh-user=ubuntu --ssh-host=<MASTER_IP> --ssh-agent-private-keys=/tmp/.ssh/id_ed25519 \
  --config=/config.yml \
  --ask-become-pass

Переменные, используемые в данной команде:

  • <MASTER_IP> — адрес master-узла для подключения по SSH.
  • --ssh-user=ubuntu — имя пользователя на master-узле (по умолчанию ubuntu; замените, если на master используется другая учётная запись).
  • --ssh-agent-private-keys=/tmp/.ssh/id_ed25519 — приватный ключ Ed25519: файл id_ed25519 из ~/.ssh/ на персональном компьютере (в контейнере — /tmp/.ssh/id_ed25519).
  • --ask-become-pass — укажите параметр, если для запуска sudo на сервере необходим пароль; введите пароль в ответ на запрос [sudo] Password:.

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

Пример вывода при успешном окончании установки:

...
│ │ No more converge tasks found in Deckhouse queue.
│ │ Deckhouse pod is Ready!
│ └ Waiting for Deckhouse to become Ready (157.34 seconds)
└ ⛵ ~ Bootstrap: Install Deckhouse (158.47 seconds)

┌ ⛵ ~ Bootstrap: Create Resources
│ ...
│ 🎉 Succeeded!
└ ⛵ ~ Bootstrap: Create Resources (420.15 seconds)

┌ ⛵ ~ Bootstrap: Run post bootstrap actions
│ ...
│ │ 🎉 Succeeded!
│ └ Set release channel to deckhouse module config (25.35 seconds)
└ ⛵ ~ Bootstrap: Run post bootstrap actions (25.35 seconds)

┌ ⛵ ~ Bootstrap: Clear cache
│ ❗ ~ Next run of "dhctl bootstrap" will create a new Kubernetes cluster.
└ ⛵ ~ Bootstrap: Clear cache (0.00 seconds)

🎉 Deckhouse cluster was created successfully!

Кластер с worker-узлом готов. Перейдите к следующему шагу для настройки доступа к веб-интерфейсам DVP.

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

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

  • Linux / macOS
  • Windows

Авторизуйтесь на персональном компьютере в container image registry:

echo <LICENSE_TOKEN> | docker login -u license-token --password-stdin registry.deckhouse.ru

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

Если при включенном VPN контейнер с установщиком не может получить доступ к сети, воспользуйтесь инструкцией.

docker run --pull=always -it -v "$PWD/config.yml:/config.yml" -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.ru/deckhouse/ee/install:stable bash -c "chmod 400 /tmp/.ssh/id_ed25519; bash"

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

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

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

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

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

dhctl bootstrap --ssh-user=ubuntu --ssh-host=<MASTER_IP> --ssh-agent-private-keys=/tmp/.ssh/id_ed25519 \
  --config=/config.yml \
  --ask-become-pass

Переменные, используемые в данной команде:

  • <MASTER_IP> — адрес master-узла для подключения по SSH.
  • --ssh-user=ubuntu — имя пользователя на master-узле (по умолчанию ubuntu; замените, если на master используется другая учётная запись).
  • --ssh-agent-private-keys=/tmp/.ssh/id_ed25519 — приватный ключ Ed25519: файл id_ed25519 из ~/.ssh/ на персональном компьютере (в контейнере — /tmp/.ssh/id_ed25519).
  • --ask-become-pass — укажите параметр, если для запуска sudo на сервере необходим пароль; введите пароль в ответ на запрос [sudo] Password:.

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

Пример вывода при успешном окончании установки:

...
│ │ No more converge tasks found in Deckhouse queue.
│ │ Deckhouse pod is Ready!
│ └ Waiting for Deckhouse to become Ready (157.34 seconds)
└ ⛵ ~ Bootstrap: Install Deckhouse (158.47 seconds)

┌ ⛵ ~ Bootstrap: Create Resources
│ ...
│ 🎉 Succeeded!
└ ⛵ ~ Bootstrap: Create Resources (420.15 seconds)

┌ ⛵ ~ Bootstrap: Run post bootstrap actions
│ ...
│ │ 🎉 Succeeded!
│ └ Set release channel to deckhouse module config (25.35 seconds)
└ ⛵ ~ Bootstrap: Run post bootstrap actions (25.35 seconds)

┌ ⛵ ~ Bootstrap: Clear cache
│ ❗ ~ Next run of "dhctl bootstrap" will create a new Kubernetes cluster.
└ ⛵ ~ Bootstrap: Clear cache (0.00 seconds)

🎉 Deckhouse cluster was created successfully!

Кластер с worker-узлом готов. Перейдите к следующему шагу для настройки доступа к веб-интерфейсам DVP.