Подготовка конфигурации

Для установки платформы нужно подготовить YAML-файл конфигурации установки. При необходимости, добавьте YAML-файл для ресурсов, которые будут созданы после успешной установки платформы.

Файл конфигурации установки

YAML-файл конфигурации установки содержит параметры нескольких ресурсов (манифесты):

  • InitConfiguration — начальные параметры конфигурации платформы. С этой конфигурацией платформа запустится после установки.

    В этом ресурсе, в частности, указываются параметры, без которых платформа не запустится или будет работать некорректно. Например, параметры размещения компонентов платформы, используемый storageClass, параметры доступа к container registry, шаблон используемых DNS-имен и другие.

  • ClusterConfiguration — общие параметры кластера, такие как версия control plane, сетевые параметры, параметры CRI и т.д.

    Использовать ресурс ClusterConfiguration в конфигурации необходимо, только если при установке платформы нужно предварительно развернуть кластер Kubernetes. То есть ClusterConfiguration не нужен, если платформа устанавливается в существующем кластере Kubernetes.

  • StaticClusterConfiguration — параметры кластера Kubernetes, разворачиваемого на серверах bare metal.

    Как и в случае с ресурсом ClusterConfiguration, ресурсStaticClusterConfiguration не нужен, если платформа устанавливается в существующем кластере Kubernetes.

  • ModuleConfig — набор ресурсов, содержащих параметры конфигурации встроенных модулей платформы.

Если кластер изначально создается с узлами, выделенными под определенный вид нагрузки (системные узлы, узлы под мониторинг и т. п.), то для модулей, использующих тома постоянного хранилища (например, для модуля prometheus), рекомендуется явно указать соответствующий nodeSelector в конфигурации модуля. Например, для модуля prometheus это параметр nodeSelector.

Пример файла конфигурации установки (config.yaml)…

1apiVersion: deckhouse.io/v1
2kind: ClusterConfiguration
3clusterType: Static
4podSubnetCIDR: 10.88.0.0/16
5serviceSubnetCIDR: 10.99.0.0/16
6kubernetesVersion: "Automatic"
7clusterDomain: "cluster.local"
8---
9apiVersion: deckhouse.io/v1alpha1
10kind: ModuleConfig
11metadata:
12  name: deckhouse
13spec:
14  enabled: true
15  settings:
16    releaseChannel: Stable
17    bundle: Default
18    logLevel: Info
19  version: 1
20---
21apiVersion: deckhouse.io/v1alpha1
22kind: ModuleConfig
23metadata:
24  name: global
25spec:
26  enabled: true
27  settings:
28    modules:
29      publicDomainTemplate: "%s.dvp.example.com"
30  version: 1
31---
32apiVersion: deckhouse.io/v1alpha1
33kind: ModuleConfig
34metadata:
35  name: cni-cilium
36spec:
37  version: 1
38  enabled: true
39  settings:
40    tunnelMode: VXLAN

Файл ресурсов установки

YAML-файл ресурсов установки содержит манифесты платформы, которые инсталлятор применит после ее успешной установки.

Файл необязателен, но может быть полезен для дополнительной настройки кластера после установки платформы. С его помощью можно создать Ingress-контроллер, дополнительные группы узлов, ресурсы конфигурации, настройки прав и пользователей и т.д.

Внимание! В файле ресурсов установки нельзя использовать ModuleConfig для встроенных модулей. Используйте для них файл конфигурации.

Пример файла ресурсов (resources.yaml)…

1# Создать группу из двух рабочих узлов
2apiVersion: deckhouse.io/v1
3kind: NodeGroup
4metadata:
5  name: worker
6spec:
7  disruptions:
8    approvalMode: Manual
9  nodeType: Static
10  staticInstances:
11    count: 2
12---
13# SSH-ключ, для доступа к рабочим узлам для автоматизированной установки
14apiVersion: deckhouse.io/v1alpha1
15kind: SSHCredentials
16metadata:
17  name: worker-key
18spec:
19  # Имя технического ползователя, созданного на этапе подготовки узлов платформы
20  user: install-user
21  # Закрытый ключ, созданный на этапе подготовки узлов платформы, кодированный в base64 формате
22  privateSSHKey: ZXhhbXBsZQo=
23---
24apiVersion: deckhouse.io/v1alpha1
25kind: StaticInstance
26metadata:
27  name: worker-01
28  labels:
29    role: worker
30spec:
31  # Адрес первого рабочего узла
32  address: 192.88.99.10
33  credentialsRef:
34    kind: SSHCredentials
35    name: worker-key
36---
37apiVersion: deckhouse.io/v1alpha1
38kind: StaticInstance
39metadata:
40  name: worker-01
41  labels:
42    role: worker
43spec:
44  # Адрес второго рабочего узла
45  address: 192.88.99.20
46  credentialsRef:
47    kind: SSHCredentials
48    name: worker-key
49---
50apiVersion: deckhouse.io/v1alpha1
51kind: ModuleConfig
52metadata:
53  name: virtualization
54spec:
55  enabled: true
56  settings:
57    dvcr:
58      storage:
59        persistentVolumeClaim:
60          size: 10G
61        type: PersistentVolumeClaim
62    virtualMachineCIDRs:
63      - 192.168.10.0/24
64  version: 1
65---
66apiVersion: deckhouse.io/v1
67kind: IngressNginxController
68metadata:
69  name: main
70spec:
71  inlet: HostPort
72  enableIstioSidecar: true
73  ingressClass: nginx
74  hostPort:
75    httpPort: 80
76    httpsPort: 443
77  nodeSelector:
78    node-role.kubernetes.io/master: ''
79  tolerations:
80    - effect: NoSchedule
81      operator: Exists
82---
83apiVersion: deckhouse.io/v1
84kind: ClusterAuthorizationRule
85metadata:
86  name: admin
87spec:
88  subjects:
89  - kind: User
90    name: admin@deckhouse.io
91  accessLevel: SuperAdmin
92  portForwarding: true
93---
94apiVersion: deckhouse.io/v1
95kind: User
96metadata:
97  name: admin
98spec:
99  email: admin@deckhouse.io
100  password: '$2a$10$isZrV6uzS6F7eGfaNB1EteLTWky7qxJZfbogRs1egWEPuT1XaOGg2'

Установка платформы

При установке платформы, отличной от редакции Community Edition, из официального container registry registry.deckhouse.io необходимо предварительно авторизоваться с помощью лицензионного ключа:

1docker login -u license-token registry.deckhouse.io

Пример запуска контейнера инсталлятора из публичного container registry платформы:

1docker run --pull=always -it [<MOUNT_OPTIONS>] registry.deckhouse.io/deckhouse/<REVISION>/install:<RELEASE_CHANNEL> bash

где:

  • <REVISION>редакция платформы (например ee — для Enterprise Edition, ce — для Community Edition и т. д.)
  • <MOUNT_OPTIONS> — параметры монтирования файлов в контейнер инсталлятора, таких как:
    • SSH-ключи доступа;
    • файл конфигурации;
    • файл ресурсов и т. д.
  • <RELEASE_CHANNEL>канал обновлений платформы в kebab-case. Должен совпадать с установленным в config.yaml:
    • alpha — для канала обновлений Alpha;
    • beta — для канала обновлений Beta;
    • early-access — для канала обновлений Early Access;
    • stable — для канала обновлений Stable;
    • rock-solid — для канала обновлений Rock Solid.

Пример запуска контейнера инсталлятора платформы в редакции CE:

1docker run -it --pull=always \
2  -v "$PWD/config.yaml:/config.yaml" \
3  -v "$PWD/resources.yaml:/resources.yaml" \
4  -v "$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.io/deckhouse/ce/install:stable bash

Установка платформы запускается в контейнере инсталлятора с помощью команды dhctl:

  • Для запуска установки платформы с развертыванием кластера (это все случаи, кроме установки в существующий кластер) используйте команду dhctl bootstrap.
  • Для запуска установки платформы в существующем кластере используйте команду dhctl bootstrap-phase install-deckhouse.

Для получения справки по параметрам выполните dhctl bootstrap -h.

Пример запуска установки платформы:

1dhctl bootstrap \
2  --ssh-user=<SSH_USER> --ssh-agent-private-keys=/tmp/.ssh/id_rsa \
3  --config=/config.yaml --config=/resources.yaml

где:

  • /config.yaml — файл конфигурации установки;
  • /resources.yaml — файл манифестов ресурсов;
  • <SSH_USER> — пользователь на сервере для подключения по SSH;
  • --ssh-agent-private-keys — файл приватного SSH-ключа для подключения по SSH.

Далее подключитесь к master-узлу по SSH (IP-адрес master-узла выводится инсталлятором по завершении установки):

1ssh <USER_NAME>@<MASTER_IP>

Запуск Ingress-контроллера после завершения установки платформы может занять какое-то время. Прежде чем продолжить, убедитесь что Ingress-контроллер запустился:

1d8 k -n d8-ingress-nginx get po

Дождитесь перехода подов в статус Ready.

Также дождитесь готовности балансировщика:

1d8 k -n d8-ingress-nginx get svc nginx-load-balancer

Значение EXTERNAL-IP должно быть заполнено публичным IP-адресом или DNS-именем.

Настройка DNS

Для того чтобы получить доступ к веб-интерфейсам компонентов платформы, необходимо:

  1. Настроить работу DNS.
  2. Указать в параметрах платформы шаблон DNS-имен.

Шаблон DNS-имен используется для настройки Ingress-ресурсов системных приложений. Например, интерфейсу Grafana закреплено имя grafana. Тогда, для шаблона %s.kube.company.my, Grafana будет доступна по адресу grafana.kube.company.my, и т.д.

Чтобы упростить настройку, будет использоваться сервис sslip.io.

Чтобы получить IP-адрес балансировщика и настроить шаблон DNS-имен сервисов платформы на использование sslip.io, выполните команду на master-узле:

1BALANCER_IP=$(d8 k -n d8-ingress-nginx get svc nginx-load-balancer -o json | jq -r '.status.loadBalancer.ingress[0].ip') && \
2echo "Balancer IP is '${BALANCER_IP}'." && d8 k patch mc global --type merge \
3  -p "{\"spec\": {\"settings\":{\"modules\":{\"publicDomainTemplate\":\"%s.${BALANCER_IP}.sslip.io\"}}}}" && echo && \
4echo "Domain template is '$(d8 k get mc global -o=jsonpath='{.spec.settings.modules.publicDomainTemplate}')'."

Команда также выведет установленный шаблон DNS-имен. Пример вывода:

1Balancer IP is '1.2.3.4'.
2moduleconfig.deckhouse.io/global patched
3Domain template is '%s.1.2.3.4.sslip.io'.

Установка систем хранения

Для корректного функционирования платформы необходимо установить одну или несколько систем хранения. Они предоставляют возможности:

  • постоянного хранения системных данных платформы (метрики, логи, образы);
  • хранения дисков и образов виртуальных машин.

Описание поддерживаемых систем хранения и инструкция по их подключению приведены в разделе Настройка хранилищ.

Установка модуля Сilium

Для получения информации по установке и настройке модуля, обратитесь к разделу Настройки Cilium.

Установка модуля виртуализации

Для обеспечения возможностей виртуализации (создание виртуальных машин, образов, дисков и так далее), необходимо включить модуль виртуализации. Чтобы сделать это, создайте ресурс ModuleConfig virtualization, предварительно указав, какой StorageClass следует использовать:

1# Укажите имя своего ресурса StorageClass.
2STORAGE_CLASS_NAME=replicated-storage-class
3# Создайте ModuleConfig `virtualization`.
4d8 k apply -f - <<EOF
5apiVersion: deckhouse.io/v1alpha1
6kind: ModuleConfig
7metadata:
8 name: virtualization
9spec:
10 enabled: false
11 settings:
12   dvcr:
13     storage:
14       type: PersistentVolumeClaim
15       persistentVolumeClaim:
16         size: 50G
17         storageClassName: ${STORAGE_CLASS_NAME}
18   virtualMachineCIDRs:
19     - 10.66.10.0/24
20     - 10.66.20.0/24
21     - 10.66.30.0/24
22 version: 1
23EOF

После создания ресурса ModuleConfig virtualization дождитесь выполнения заданий из очереди:

1d8 k -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue main
2# Queue 'main': length 0, status: 'waiting for task 1m1s'

Если все выполнено правильно, после включения модуля появится Namespase d8-virtualization:

1d8 k get ns d8-virtualization
2# NAME                STATUS   AGE
3# d8-virtualization   Active   1h