Розгортання Платформи в цільовому ЦОД на базі приватної хмари vSphere
- 1. Підготовка інфраструктури vSphere для встановлення OKD[1]
- 2. Розгортання та налаштування DNS і DHCP-компонентів
- 3. Створення конфігураційного файлу install-config.yaml
- 4. Запуск OKD4-інсталера та розгортання порожнього кластера OKD4
- 5. Заміна самопідписаних сертифікатів на довірені сертифікати
- 6. Створення MachineSet[2] для інфраструктури Ceph
- 7. Підготовка та запуск Інсталера[3] для розгортання Платформи у цільовому кластері
- 8. Управління налаштуваннями Платформи
1. Підготовка інфраструктури vSphere для встановлення OKD[1]
1.1. Налаштування довіреного інтерфейсу vCenter API
Інсталер вимагає доступу до довіреного інтерфейсу vCenter API, який надає можливість завантажити довірені кореневі сертифікати CA vCenter.
Перед підключенням до API, сертифікати vCenter root CA повинні бути додані до системи, з якої запускатиметься OKD-інсталер.
1.2. Завантаження CA-сертифікатів
Сертифікати можуть бути завантажені з домашньої сторінки vCenter.
За замовчуванням сертифікати зберігаються за посиланням <vCenter>/certs/download.zip
. Після завантаження і розархівування буде створено директорію, що містить сертифікати для ОС Linux, MacOS та Windows.
1.2.1. Приклад перегляду структури
Структуру директорій із розміщеними в ній сертифікатами можна переглянути за допомогою команди:
$ tree certs
В результаті буде зображено наступну структуру:
certs
├── lin
│ ├── 108f4d17.0
│ ├── 108f4d17.r1
│ ├── 7e757f6a.0
│ ├── 8e4f8471.0
│ └── 8e4f8471.r0
├── mac
│ ├── 108f4d17.0
│ ├── 108f4d17.r1
│ ├── 7e757f6a.0
│ ├── 8e4f8471.0
│ └── 8e4f8471.r0
└── win
├── 108f4d17.0.crt
├── 108f4d17.r1.crl
├── 7e757f6a.0.crt
├── 8e4f8471.0.crt
└── 8e4f8471.r0.crl
3 directories, 15 files
1.2.2. Приклад додавання сертифікатів
Необхідно додати відповідні сертифікати для вашої операційної системи.
Приклад для ОС Fedora:
$ sudo cp certs/lin/* /etc/pki/ca-trust/source/anchors
$ sudo update-ca-trust extract
1.3. Ресурси стандартної інсталяції
Стандартна інсталяція (Installer-Provisioned Infrastructure) створює наступні ресурси інфраструктури:
-
одну папку (1 Folder)
-
одну тег-категорію (1 Tag Category)
-
1 тег (1 Tag)
-
віртуальні машини (Virtual machines):
-
один шаблон (1 template)
-
одну тимчасову ноду bootstrap (1 temporary bootstrap node)
-
три ноди консолі для управління Платформою (3 control-plane nodes)
-
три обчислювальні машини (3 compute machines)
-
1.3.1. Необхідні вимоги до ресурсів
1.3.1.1. Сховище даних
Разом із ресурсами, описаними вище, стандартне розгортання OKD вимагає мінімум 800 Гб простору для сховища даних.
1.3.1.2. DHCP
Розгортання вимагає налаштування DHCP-сервера для конфігурації мережі.
2. Розгортання та налаштування DNS і DHCP-компонентів
2.1. IP-адреси
Розгортання інфраструктури vSphere (Іnstaller-provisioned vSphere) вимагає двох статичних IP-адрес:
-
Адреса програмного інтерфейсу (API) - використовується для доступу до API-кластера.
-
Вхідна IP-адреса (Ingress) - використовується для вхідного трафіку кластера.
Віртуальні ІР-адреси для кожного з них повинні бути визначені у файлі install-config.yaml
.
2.2. DNS-записи
DNS-записи (DNS records) повинні бути створені для двох ІР-адрес на будь-якому DNS-сервері, призначеному для середовища. Записи повинні містити значення, описані в таблиці:
Назва | Значення |
---|---|
|
API VIP |
|
Ingress VIP |
${cluster-name} та ${base-domain} - це змінні, що взято із відповідних значень, вказаних у файлі install-config.yaml .
|
3. Створення конфігураційного файлу install-config.yaml
|
Створення файлу install-config.yaml
, необхідного для розгортання OKD кластеру, виконується наступною командою:
$ openshift-installer create install-config
Після створення файлу потрібно заповнити необхідні параметри, які будуть представлені в контекстному меню. Створений конфігураційний файл включає лише необхідні параметри для мінімального розгортання кластера. Для кастомізації налаштувань можна звернутись до офіційної документації.
Конфігурація install-config.yaml
apiVersion: v1
baseDomain: eua.gov.ua
compute:
- architecture: amd64
hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
architecture: amd64
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
metadata:
creationTimestamp: null
name: mdtuddm
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineNetwork:
- cidr: 10.0.0.0/16
networkType: OVNKubernetes
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
apiVIP: 10.9.1.110
cluster: HX-02
datacenter: HXDP-02
defaultDatastore: NCR_Data2
ingressVIP: 10.9.1.111
network: EPAM_OKD_Vlan9_EPG
password: <password>
username: epam_dev1@vsphere.local
vCenter: vcsa.ncr.loc
publish: External
pullSecret: '{"auths":{"fake":{"auth":"aWQ6cGFzcwo="}}}'
sshKey: |
<ssh_key>
|
4. Запуск OKD4-інсталера та розгортання порожнього кластера OKD4
Після створення файлу install-config.yaml
, для розгортання OKD-кластера необхідно виконати наступну команду:
$ openshift-installer create cluster
Процес розгортання кластера зазвичай займає до 1,5 години часу. |
При успішному розгортанні, в результаті виконання команди будуть представлені наступні параметри доступу до кластера:
-
логін;
-
пароль;
-
посилання на веб-консоль кластера.
В директорії, де виконувалася команда, буде створено ряд файлів, що зберігають статус кластера, необдхіний для його деінсталяції.
Також в цій директорії з’явиться папка /auth
, в якій буде збережено два файли для автентифікації для роботи з кластером через веб-консоль та інтерфейс командного рядка OKD (OKD CLI).
Після запуску процесу розгортання кластера, Інсталер видаляє install-config.yaml , тому рекомендовано виконати резервування цього файлу, якщо є потреба розгортання кількох кластерів.
|
5. Заміна самопідписаних сертифікатів на довірені сертифікати
Для заміни самопідписаних (self-signed) сертифікатів на довірені (trusted) необхідно спочатку отримати ці сертифікати.
В цьому пункті розглянуто отримання безкоштовних сертифікатів Let’s Encrypt та їх встановлення на сервер.
Отримання сертифікатів Let’s Encrypt здійснено за допомогою утиліти acme.sh.
Для отримання розширених деталей щодо використання Let’s Encrypt на базі ACME-протоколу, зверніться до офіційного джерела. |
5.1. Підготовка
Необхідно клонувати утиліту acme.sh із репозиторію GitHub:
$ cd $HOME
$ git clone https://github.com/neilpang/acme.sh
$ cd acme.sh
5.2. Запит на отримання сертифікатів
1) Для того, щоб полегшити процес отримання сертифікатів, необхідно задати дві змінні середовища. Перша змінна повинна вказувати на API Endpoint. Переконайтесь, що ви увійшли до OKD як system:admin
і використовуєте CLI-консоль Openshift, щоб знайти API Endpoint URL.
$ oc whoami --show-server
Приклад отриманої відповіді:
https://api.e954.ocp4.opentlc.com:6443
2) Тепер встановіть змінну LE_API
для повністю визначеного доменного імені API:
$ export LE_API=$(oc whoami --show-server | cut -f 2 -d ':' | cut -f 3 -d '/' | sed 's/-api././')
3) Встановіть другу змінну LE_WILDCARD
для вашого Wildcard Domain:
$ export LE_WILDCARD=$(oc get ingresscontroller default -n openshift-ingress-operator -o jsonpath='{.status.domain}')
4) Запускаємо скрипт acme.sh:
$ ${HOME}/acme.sh/acme.sh --issue -d ${LE_API} -d *.${LE_WILDCARD} --dns
Приклад отриманої відповіді:
$ ./acme.sh --issue -d ${LE_API} -d \*.${LE_WILDCARD} --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
[Wed Jul 28 18:37:33 EEST 2021] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Wed Jul 28 18:37:33 EEST 2021] Creating domain key
[Wed Jul 28 18:37:33 EEST 2021] The domain key is here: $HOME/.acme.sh/api.e954.ocp4.opentlc.com/api.e954.ocp4.opentlc.com.key
[Wed Jul 28 18:37:33 EEST 2021] Multi domain='DNS:api.e954.ocp4.opentlc.com,DNS:*.apps.e954.ocp4.opentlc.com'
[Wed Jul 28 18:37:33 EEST 2021] Getting domain auth token for each domain
[Wed Jul 28 18:37:37 EEST 2021] Getting webroot for domain='cluster-e954-api.e954.ocp4.opentlc.com'
[Wed Jul 28 18:37:37 EEST 2021] Getting webroot for domain=‘*.apps.cluster-e954-api.e954.ocp4.opentlc.com’
[Wed Jul 28 18:37:38 EEST 2021] Add the following TXT record:
[Wed Jul 28 18:37:38 EEST 2021] Domain: '_acme-challenge.api.e954.ocp4.opentlc.com'
[Wed Jul 28 18:37:38 EEST 2021] TXT value: 'VZ2z3XUe4cdNLwYF7UplBj7ZTD8lO9Een0yTD7m_Bbo'
[Wed Jul 28 18:37:38 EEST 2021] Please be aware that you prepend _acme-challenge. before your domain
[Wed Jul 28 18:37:38 EEST 2021] so the resulting subdomain will be: _acme-challenge.api.e954.ocp4.opentlc.com
[Wed Jul 28 18:37:38 EEST 2021] Add the following TXT record:
[Wed Jul 28 18:37:38 EEST 2021] Domain: '_acme-challenge.apps.e954.ocp4.opentlc.com'
[Wed Jul 28 18:37:38 EEST 2021] TXT value: 'f4KeyXkpSissmiLbIIoDHm5BJ6tOBTA0D8DyK5sl46g'
[Wed Jul 28 18:37:38 EEST 2021] Please be aware that you prepend _acme-challenge. before your domain
[Wed Jul 28 18:37:38 EEST 2021] so the resulting subdomain will be: _acme-challenge.apps.e954.ocp4.opentlc.com
[Wed Jul 28 18:37:38 EEST 2021] Please add the TXT records to the domains, and re-run with --renew.
[Wed Jul 28 18:37:38 EEST 2021] Please add '--debug' or '--log' to check more details.
DNS-записи з попередньої відповіді необхідно додати на DNS-сервері, що відповідає за зону e954.ocp4.opentlc.com (значення зони тут є прикладом). Таким чином, TXT-записи повинні мати наступний вигляд:
|
TXT-запис 1
_acme-challenge.api.e954.ocp4.opentlc.com TXT value: 'VZ2z3XUe4cdNLwYF7UplBj7ZTD8lO9Een0yTD7m_Bbo'
TXT-запис 2
_acme-challenge.apps.e954.ocp4.opentlc.com TXT value: 'f4KeyXkpSissmiLbIIoDHm5BJ6tOBTA0D8DyK5sl46g'
6) Після цього необхідно повторно запустити команду acme.sh
:
$ acme.sh --renew -d e954.ocp4.opentlc.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
7) Після успішного виконання попередніх пунктів необхідно запустити наступні команди.
Зазвичай, хорошим підходом є перенесення сертифікатів із шляху acme.sh за замовчуванням (default path) до більш зручної директорії. Для цього можна використати —install-cert
-ключ скрипта acme.sh
для копіювання сертифікатів до $HOME/certificates
, для прикладу:
$ export CERTDIR=$HOME/certificates
$ mkdir -p ${CERTDIR} ${HOME}/acme.sh/acme.sh --install-cert -d ${LE_API} -d *.${LE_WILDCARD} --cert-file ${CERTDIR}/cert.pem --key-file ${CERTDIR}/key.pem --fullchain-file ${CERTDIR}/fullchain.pem --ca-file ${CERTDIR}/ca.cer
5.2.1. Встановлення сертифікатів для Router
-
Необхідно створити секрет. Для цього виконайте наступну команду:
$ oc create secret tls router-certs --cert=${CERTDIR}/fullchain.pem --key=${CERTDIR}/key.pem -n openshift-ingress
-
Після виконання попередніх кроків, необхідно оновити Custom Resource:
$ oc patch ingresscontroller default -n openshift-ingress-operator --type=merge --patch='{"spec": { "defaultCertificate": { "name": "router-certs" }}}'
6. Створення MachineSet[2] для інфраструктури Ceph
Для розгортання Платформи необхідно створити MachineSet для системи зберігання даних Ceph. Для цього необхідно використати конфігураційний файл machine-set-ceph.yaml
, в якому необхідно змінити назву кластера.
6.1. Приклад конфігураційного файлу machine-set-ceph.yaml
kind: MachineSet
metadata:
name: mdtuddm-b86zw-ceph
namespace: openshift-machine-api
labels:
machine.openshift.io/cluster-api-cluster: mdtuddm-b86zw
spec:
replicas: 3
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: mdtuddm-b86zw
machine.openshift.io/cluster-api-machineset: mdtuddm-b86zw-ceph
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: mdtuddm-b86zw
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: mdtuddm-b86zw-ceph
spec:
taints:
- effect: NoSchedule
key: node.ocs.openshift.io/storage
value: 'true'
metadata:
labels:
cluster.ocs.openshift.io/openshift-storage: ''
providerSpec:
value:
numCoresPerSocket: 1
diskGiB: 120
snapshot: ''
userDataSecret:
name: worker-user-data
memoryMiB: 73728
credentialsSecret:
name: vsphere-cloud-credentials
network:
devices:
- networkName: EPAM_OKD_Vlan9_EPG
metadata:
creationTimestamp: null
numCPUs: 16
kind: VSphereMachineProviderSpec
workspace:
datacenter: HXDP-02
datastore: NCR_Data2
folder: /HXDP-02/vm/mdtuddm-b86zw
resourcePool: /HXDP-02/host/HX-02/Resources
server: vcsa.ncr.loc
template: mdtuddm-b86zw-rhcos
apiVersion: vsphereprovider.openshift.io/v1beta1
Після редагування файлу відповідно до назви кластера, необхідно виконати команду, що створить необхідний MachineSet та відповідну кількість нод для розгортання сховища даних Ceph.
В нашому випадку назва кластера визначена в YAML-файлі як mdtuddm-b86zw .
|
7. Підготовка та запуск Інсталера[3] для розгортання Платформи у цільовому кластері
Для запуску Інсталера, необхідно виконати ряд умов з підготовки робочої станції, з якої запускатиметься Інсталер. Нижче розглянуто приклад такої підготовки на базі Ubuntu 20.04 LTS.
7.1. Передумови
Перед запуском скрипта з інсталювання Платформи необхідно виконати наступні кроки:
-
Завантажити Інсталер відповідної версії та порівняти чексуми, щоб впевнитись, що Інсталер завантажився коректно:
$ echo "$(cat [INSTALLER_NAME].zip.sha256) [INSTALLER_NAME].zip" | sha256sum --check
-
Встановити докер (див. інструкцію нижче): https://docs.docker.com/engine/install/
7.2. Розгортання Платформи
Для розгортання Платформи необхідно виконати набір наступних кроків:
-
Розпакувати Інсталер в окрему директорію та увійти до неї.
-
Додати сертифікати та допоміжні файли сервісу
digital-signature-ops
в директоріюcertificates
:-
sign.key.device-type
-
sign.key.file.issuer
-
sign.key.file.password
-
sign.key.hardware.device
-
sign.key.hardware.password
-
sign.key.hardware.type
-
CACertificates.p7b
-
CAs.json
-
Key-6.dat
-
allowed-keys.yml
-
osplm.ini
-
-
Запустити інсталяційний контейнер з усіма інструментами, які необхідні для розгортання платформи:
$ bash docker_load.sh
-
Увійти до OKD, виконавши команду:
$ oc login
-
Встановити необхідні параметри:
# VAULT_IP встановлюється тільки для VSphere
$ export VAULT_IP=xxx.xxx.xxx.xxx
$ export idgovuaClientId=XXXXXXXXXXX
$ export idgovuaClientSecret=YYYYYYYYYYY
-
Виконати команду, що запускає install-скрипт:
$ bash install.sh -i
8. Управління налаштуваннями Платформи
Управління кластером відбувається за методологією GitOps. Це означає, що будь-які зміни в конфігурації кластера, компонентів кластера та компонентів Платформи відбувається через зміну конфігурації кластера в git-гілці відповідного компонента.
Метадані усіх компонентів, для яких реалізовано управління через GitOps-підхід, зберігаються в компоненті cluster-mgmt
.
Нижче представлено список компонентів, для яких наразі імплементований GitOps-підхід:
-
catalog-source
-
monitoring
-
storage
-
logging
-
service-mesh
-
backup-management
-
user-management
-
control-plane-nexus
-
external-integration-mocks
-
cluster-kafka-operator
-
smtp-server
-
redis-operator
-
postgres-operator