Как установить кластер OKD OpenShift 4.7 на OpenStack

Как установить кластер OKD OpenShift 4.7 на OpenStack

 

В этом руководстве мы будем выполнять установку кластера OKD / OpenShift 4.7 на облачной платформе OpenStack. OpenShift — это мощное программное решение для контейнеризации корпоративного уровня, разработанное Red Hat. Решение построено на контейнерах Docker, организованных и управляемых Kubernetes на основе Red Hat Enterprise Linux.

Платформа OpenShift предлагает автоматическую установку, обновление и управление жизненным циклом всего стека контейнеров — от операционной системы, Kubernetes и кластерных сервисов до развернутых приложений. Операционная система, которая будет использоваться как на машинах с планом управления, так и на рабочих машинах, — это Fedora CoreOS (FCOS) для развертывания OKD и Red Hat CoreOS (RHCOS) для развертывания OpenShift. Эта ОС включает кубелет, который является агентом узла Kubernetes, и среду выполнения контейнера CRI-O, оптимизированную для Kubernetes.

Fedora CoreOS / Red Hat Enterprise Linux CoreOS также включает в себя важный инструмент подготовки при первой загрузке под названием Ignition, который позволяет кластеру настраивать машины. Поскольку все машины в кластере работают на RHCOS / FCOS, кластер будет управлять всеми аспектами своих компонентов и машин, включая операционную систему.

Ниже приводится подмножество целей установки и зависимостей для OpenShift / OKD Cluster.

Последним выпуском OpenShift на момент написания этой статьи является версия 4.7 . Выполните действия, описанные в этой статье, чтобы получить работающую установку OpenShift / OKD Cluster на OpenStack. Требуется наличие работающей установки OpenStack Cloud — локальной, совместно размещенной инфраструктуры или настройки Cloud IaaS.

 

Шаг 1. Загрузите программу установки / клиентские инструменты

Загрузите программу установки (openshift-install) и инструменты управления кластером с

OKD 4.7 Программа установки и клиентские инструменты

Скачиваем установщик OKD 4.7:

mkdir -p ~/okd/tools
cd ~/okd/tools
wget https://github.com/openshift/okd/releases/download/4.7.0-0.okd-2021-05-22-050008/openshift-install-linux-4.7.0-0.okd-2021-05-22-050008.tar.gz

Распакуйте файл после загрузки:

$ tar xvf openshift-install-linux-4.7.0-0.okd-2021-05-22-050008.tar.gz
README.md
openshift-install

Переместите полученный двоичный файл в каталог /usr/local/bin :

sudo mv openshift-install /usr/local/bin

Скачать клиентские инструменты:

wget https://github.com/openshift/okd/releases/download/4.7.0-0.okd-2021-05-22-050008/openshift-client-linux-4.7.0-0.okd-2021-05-22-050008.tar.gz
tar xvf openshift-client-linux-4.7.0-0.okd-2021-05-22-050008.tar.gz
sudo mv kubectl oc /usr/local/bin

Проверьте версии как oc, так и openshift-install, чтобы подтвердить успешную установку:

$ oc version
Client Version: 4.7.0-0.okd-2021-05-22-050008
Kubernetes Version: v1.21.1

$ openshift-install version
openshift-install 4.7.0-0.okd-2021-05-22-050008
built from commit ba1a5fc61dd3be134a24fa6d89ae24012a93385a
release image quay.io/openshift/okd@sha256:301cd36b2ab370027ddb0ec43e540a03a24748a25b69578dec504d130475304b

Программа установки OpenShift 4.7 и клиентские инструменты

Перед установкой OpenShift Container Platform загрузите установочный файл на локальный компьютер.

  • Доступ к странице поставщика инфраструктуры на сайте Red Hat OpenShift Cluster Manager.
  • Выберите поставщика инфраструктуры — (Red Hat OpenStack)
  • Загрузите программу установки для вашей операционной системы
# Linux
mkdir -p ~/ocp/tools
cd ~/ocp/tools
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-install-linux.tar.gz
tar xvf openshift-install-linux.tar.gz
sudo mv openshift-install /usr/local/bin/

# macOS
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-install-mac.tar.gz
tar xvf openshift-install-mac.tar.gz
sudo mv openshift-install /usr/local/bin/

Установка средств управления кластером:

# Linux
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz
tar xvf openshift-client-linux.tar.gz
sudo mv oc kubectl  /usr/local/bin/

Подтвердите установку:

$ oc version
Client Version: 4.7.12

$ kubectl version --client --short
Client Version: v1.20.1-5-g76a04fc

$ oc version
Client Version: 4.7.12

Шаг 2. Настройте облака OpenStack в файле clouds.yaml

В OpenStack clouds.yaml — это файл конфигурации, содержащий все необходимое для подключения к одному или нескольким облакам. Он может содержать личную информацию и обычно считается личным для пользователя.

Клиент OpenStack будет искать   clouds.yaml файл в следующих местах:

  • текущий рабочий каталог
  • ~/.config/openstack
  • /etc/openstack

Мы поместим наш файл конфигурации Clouds в каталог ~/.config/openstack :

mkdir -p ~/.config/openstack/

Создайте новый файл:

vim ~/.config/openstack/clouds.yaml

Пример содержимого конфигурации для двух облаков. Соответственно изменить:

clouds:
  osp1:
    auth:
      auth_url: http://192.168.200.2:5000/v3
      project_name: admin
      username: admin
      password: 'AdminPassword'
      user_domain_name: Default
      project_domain_name: Default
    identity_api_version: 3
    region_name: RegionOne
  osp2:
    auth:
      auth_url: http://192.168.100.2:5000/v3
      project_name: admin
      username: admin
      password: 'AdminPassword'
      user_domain_name: Default
      project_domain_name: Default
    identity_api_version: 3
    region_name: RegionOne

Облако можно выбрать в командной строке:

$ openstack --os-cloud osp1 network list --format json
[
  {
    "ID": "44b32734-4798-403c-85e3-fbed9f0d51f2",
    "Name": "private",
    "Subnets": [
      "1d1f6a6d-9dd4-480e-b2e9-fb51766ded0b"
    ]
  },
  {
    "ID": "70ea2e21-79fd-481b-a8c1-182b224168f6",
    "Name": "public",
    "Subnets": [
      "8244731c-c119-4615-b134-cfad768a27d4"
    ]
  }
]

Шаг 3. Создание вариантов вычислений для узлов кластера OpenShift

Для создания кластера требуется вариант с памятью не менее 16 ГБ , 4 виртуальными ЦП и 25 ГБ дискового пространства.

Давайте создадим аромат Compute:

$ openstack flavor create  --ram 16384    --vcpus 4 --disk 30 m1.openshift
+----------------------------+--------------------------------------+
| Field                      | Value                                |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled   | False                                |
| OS-FLV-EXT-DATA:ephemeral  | 0                                    |
| description                | None                                 |
| disk                       | 30                                   |
| id                         | 90234d29-e059-48ac-b02d-e72ce3f6d771 |
| name                       | m1.openshift                         |
| os-flavor-access:is_public | True                                 |
| properties                 |                                      |
| ram                        | 16384                                |
| rxtx_factor                | 1.0                                  |
| swap                       |                                      |
| vcpus                      | 4                                    |
+----------------------------+--------------------------------------+

Если у вас больше вычислительных ресурсов, вы можете добавить больше ЦП, памяти и хранилища к создаваемой версии.

Шаг 4. Создайте плавающие IP-адреса

У вас будет два плавающих IP-адреса для:

  • Плавающий IP-адрес для связи с входным портом.
  • Плавающий IP-адрес для связи с балансировщиком нагрузки API .

Создайте плавающий IP-адрес балансировщика нагрузки API:

$ openstack floating ip create --description "API <cluster_name>.<base_domain>" <external_network>

Создать входящий плавающий IP-адрес:

$ openstack floating ip create --description "Ingress <cluster_name>.<base_domain>" <external_network>

Вы можете перечислить свои сети, используя команду:

$ openstack network list
+--------------------------------------+---------------------+--------------------------------------+
| ID                                   | Name                | Subnets                              |
+--------------------------------------+---------------------+--------------------------------------+
| 155ef402-bf39-494c-b2f7-59509828fcc2 | public              | 9d0e8119-c091-4a20-b03a-80922f7d43dd |
| af7b4f7c-9095-4643-a470-fefb47777ae4 | private             | 90805451-e2cd-4203-b9ac-a95dc7d92957 |
+--------------------------------------+---------------------+--------------------------------------+

Мои плавающие IP-адреса будут созданы из общедоступной подсети. Внешнюю сеть нужно настроить заранее.

$ openstack floating ip create --description "API  ocp.mycluster.com"  public
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2021-05-29T19:48:23Z                 |
| description         | API  ocp.mycluster.com               |
| dns_domain          | None                                 |
| dns_name            | None                                 |
| fixed_ip_address    | None                                 |
| floating_ip_address | 172.21.200.20                        |
| floating_network_id | 155ef402-bf39-494c-b2f7-59509828fcc2 |
| id                  | a0f41edb-c90b-417d-beff-9c03f180c71b |
| name                | 172.21.200.20                        |
| port_details        | None                                 |
| port_id             | None                                 |
| project_id          | d0515ffa23c24e54a3b987b491f17acb     |
| qos_policy_id       | None                                 |
| revision_number     | 0                                    |
| router_id           | None                                 |
| status              | DOWN                                 |
| subnet_id           | None                                 |
| tags                | []                                   |
| updated_at          | 2021-05-29T19:48:23Z                 |
+---------------------+--------------------------------------+

$ openstack floating ip create --description "Ingress ocp.mycluster.com"  public
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| created_at          | 2021-05-29T19:42:02Z                 |
| description         | Ingress ocp.mycluster.com            |
| dns_domain          | None                                 |
| dns_name            | None                                 |
| fixed_ip_address    | None                                 |
| floating_ip_address | 172.21.200.22                        |
| floating_network_id | 155ef402-bf39-494c-b2f7-59509828fcc2 |
| id                  | 7035ff39-2903-464c-9ffc-c07a3245448d |
| name                | 172.21.200.22                        |
| port_details        | None                                 |
| port_id             | None                                 |
| project_id          | d0515ffa23c24e54a3b987b491f17acb     |
| qos_policy_id       | None                                 |
| revision_number     | 0                                    |
| router_id           | None                                 |
| status              | DOWN                                 |
| subnet_id           | None                                 |
| tags                | []                                   |
| updated_at          | 2021-05-29T19:42:02Z                 |
+---------------------+--------------------------------------+

Шаг 5. Создайте необходимые записи DNS.

Получите доступ к порталу или консоли управления DNS-сервером и создайте необходимые записи DNS:

api.<cluster_name>.<base_domain>.  IN  A  <API_FIP>
*.apps.<cluster_name>.<base_domain>. IN  A <apps_FIP>

Где:

  • <cluster_name> это базовый домен, например infoit.com.ua
  • <cluster_name> это имя, которое будет присвоено вашему кластеру, наприме ocp
  • <API_FIP> плавающий IP-адрес, созданный на шаге 4 для балансировщика нагрузки API.
  • <apps_FIP> плавающий IP-адрес, созданный на шаге 4 для Ingress (доступ к развернутым приложениям).

Пример записи API DNS:

Пример записи Ingress DNS:

Шаг 6. Создайте файл OpenShift install-config.yaml

На странице » Секрет извлечения» на сайте Red Hat OpenShift Cluster Manager загрузите свой секрет извлечения установки в виде файла .txt.

Выполните следующую команду, чтобы сгенерировать фай install-config.yaml :

cd ~/
openshift-install create install-config --dir=<installation_directory> 

Для  <installation_directory>укажите имя каталога для хранения файлов, создаваемых программой установки. Указанный каталог установки должен быть пустым .

Пример:

$ openshift-install create install-config --dir=ocp

При появлении запросов укажите сведения о конфигурации вашего облака:

? Platform openstack # Select openstack as the platform to target.
? Cloud osp1 # Choose cloud configured in clouds.yml
? ExternalNetwork public # Specify OpenStack external network name to use for installing the cluster.
? APIFloatingIPAddress  [Use arrows to move, enter to select, type to filter, ? for more help]
> 172.21.200.20 # Specify the floating IP address to use for external access to the OpenShift API
  172.21.200.22 
? FlavorName  [Use arrows to move, enter to select, type to filter, ? for more help]
  m1.large
  m1.magnum
  m1.medium
> m1.openshift # Specify a RHOSP flavor with at least 16 GB RAM to use for control plane and compute nodes.
  m1.small
  m1.tiny
  m1.xlarge
? Base Domain [? for help] mycluster.com # Select the base domain to deploy the cluster to
? Cluster Name ocp # Enter a name for your cluster. The name must be 14 or fewer characters long.
? Pull Secret [? for help] <paste-pull-secret>
INFO Install-Config created in: ocp

Создание файла

$ ls ocp/
install-config.yaml

Вы можете редактировать для дальнейшей настройки:

$ vim ocp/install-config.yaml
  • Убедитесь, что плавающие IP-адреса добавлены в файл install-config.yaml как значения следующих параметров:
platform.openstack.ingressFloatingIP
platform.openstack.apiFloatingIP

Пример:

...
platform:
  openstack:
    apiFloatingIP: 172.21.200.20
    ingressFloatingIP: 172.21.200.22
    apiVIP: 10.0.0.5
    cloud: osp1

Также добавьте открытый ключ ssh:

$ vim ocp/install-config.yaml
...
sshKey: replace-me-with-ssh-pub-key-contents

Если у вас нет SSH-ключа, настроенного для аутентификации без пароля на вашем компьютере, создайте его:

$ ssh-keygen -t ed25519 -N '' -f <path>/<file_name>

Шаг 7. Разверните кластер OKD / OpenShift в OpenStack

Перейдите в каталог, содержащий программу установки, и сделайте резервную копию файла install-config.yaml :

cp install-config.yaml install-config.yaml.bak

Инициализируйте развертывание кластера:

$ openshift-install create cluster --dir=ocp --log-level=info 
INFO Credentials loaded from file "/root/.config/openstack/clouds.yaml"
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/33.20210217.3.0/x86_64/fedora-coreos-33.20210217.3.0-openstack.x86_64.qcow2.xz?sha256=ae088d752a52859ad38c53c29090efd5930453229ef6d1204645916aab856fb1'
INFO The file was found in cache: /root/.cache/openshift-installer/image_cache/41b2fca6062b458e4d5157ca9e4666f2. Reusing...
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp.mycluster.com:6443...
INFO API v1.20.0-1073+df9c8387b2dc23-dirty up
INFO Waiting up to 30m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 40m0s for the cluster at https://api.ocp.mycluster.com:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/okd/ocp/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp.mycluster.com
INFO Login to the console with user: "kubeadmin", and password: "33yzG-Ogiup-huGI9"
INFO Time elapsed: 42m39s

Список созданных серверов на OpenStack:

$ openstack server list --column  Name --column Networks --column Status
+--------------------------------------+--------+---------------------------------------+
| Name                                 | Status | Networks                              |
+--------------------------------------+--------+---------------------------------------+
| ocp-nlrnw-worker-0-nz2ch             | ACTIVE | ocp-nlrnw-openshift=10.0.1.197        |
| ocp-nlrnw-worker-0-kts42             | ACTIVE | ocp-nlrnw-openshift=10.0.0.201        |
| ocp-nlrnw-worker-0-92kvf             | ACTIVE | ocp-nlrnw-openshift=10.0.2.197        |
| ocp-nlrnw-master-2                   | ACTIVE | ocp-nlrnw-openshift=10.0.3.167        |
| ocp-nlrnw-master-1                   | ACTIVE | ocp-nlrnw-openshift=10.0.1.83         |
| ocp-nlrnw-master-0                   | ACTIVE | ocp-nlrnw-openshift=10.0.0.139        |
+--------------------------------------+--------+---------------------------------------+

Экспортируйте файл конфигурации доступа к кластеру:

export KUBECONFIG=ocp/auth/kubeconfig

Вы также можете сделать его kubeconfig по умолчанию:

cp ocp/auth/kubeconfig ~/.kube/config

Список доступных узлов в кластере

$ oc get nodes
NAME                       STATUS   ROLES    AGE     VERSION
ocp-nlrnw-master-0         Ready    master   3h48m   v1.20.0+df9c838-1073
ocp-nlrnw-master-1         Ready    master   3h48m   v1.20.0+df9c838-1073
ocp-nlrnw-master-2         Ready    master   3h48m   v1.20.0+df9c838-1073
ocp-nlrnw-worker-0-92kvf   Ready    worker   3h33m   v1.20.0+df9c838-1073
ocp-nlrnw-worker-0-kts42   Ready    worker   3h33m   v1.20.0+df9c838-1073
ocp-nlrnw-worker-0-nz2ch   Ready    worker   3h33m   v1.20.0+df9c838-1073

Просмотрите версию кластера кластера:

$ oc get clusterversion
NAME      VERSION                         AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.7.0-0.okd-2021-05-22-050008   True        False         3h16m   Cluster version is 4.7.0-0.okd-2021-05-22-050008

Убедитесь, что все операторы кластера доступны и ни один из них не ухудшен:

$ oc get clusteroperator
NAME                                       VERSION                         AVAILABLE   PROGRESSING   DEGRADED   SINCE
authentication                             4.7.0-0.okd-2021-05-22-050008   True        False         False      3h24m
baremetal                                  4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
cloud-credential                           4.7.0-0.okd-2021-05-22-050008   True        False         False      3h57m
cluster-autoscaler                         4.7.0-0.okd-2021-05-22-050008   True        False         False      3h51m
config-operator                            4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
console                                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h31m
csi-snapshot-controller                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
dns                                        4.7.0-0.okd-2021-05-22-050008   True        False         False      3h51m
etcd                                       4.7.0-0.okd-2021-05-22-050008   True        False         False      3h51m
image-registry                             4.7.0-0.okd-2021-05-22-050008   True        False         False      3h37m
ingress                                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h38m
insights                                   4.7.0-0.okd-2021-05-22-050008   True        False         False      3h45m
kube-apiserver                             4.7.0-0.okd-2021-05-22-050008   True        False         False      3h49m
kube-controller-manager                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h50m
kube-scheduler                             4.7.0-0.okd-2021-05-22-050008   True        False         False      3h49m
kube-storage-version-migrator              4.7.0-0.okd-2021-05-22-050008   True        False         False      3h37m
machine-api                                4.7.0-0.okd-2021-05-22-050008   True        False         False      3h46m
machine-approver                           4.7.0-0.okd-2021-05-22-050008   True        False         False      3h51m
machine-config                             4.7.0-0.okd-2021-05-22-050008   True        False         False      3h50m
marketplace                                4.7.0-0.okd-2021-05-22-050008   True        False         False      3h50m
monitoring                                 4.7.0-0.okd-2021-05-22-050008   True        False         False      3h37m
network                                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
node-tuning                                4.7.0-0.okd-2021-05-22-050008   True        False         False      3h50m
openshift-apiserver                        4.7.0-0.okd-2021-05-22-050008   True        False         False      3h45m
openshift-controller-manager               4.7.0-0.okd-2021-05-22-050008   True        False         False      3h44m
openshift-samples                          4.7.0-0.okd-2021-05-22-050008   True        False         False      3h43m
operator-lifecycle-manager                 4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
operator-lifecycle-manager-catalog         4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
operator-lifecycle-manager-packageserver   4.7.0-0.okd-2021-05-22-050008   True        False         False      3h46m
service-ca                                 4.7.0-0.okd-2021-05-22-050008   True        False         False      3h52m
storage                                    4.7.0-0.okd-2021-05-22-050008   True        False         False      3h50m

Вы всегда можете распечатать консоль входа OpenShift с помощью команды:

$ oc whoami --show-console
https://console-openshift-console.apps.ocp.mycluster.com

Затем вы можете войти в систему, используя распечатанный URL:

 

Удаление OKD / OpenShift Cluster

Чтобы уничтожить кластер, созданный на OpenStack, вам потребуется:

  • Копия программы установки, которую вы использовали для развертывания кластера.
  • Файлы, созданные программой установки при создании кластера.

Затем кластер можно уничтожить с помощью следующей команды:

$ openshift-install destroy cluster --dir=<installation_directory> --log-level=info 

При желании вы можете удалить каталог и программу установки OpenShift Container Platform.