Bare Metal Operator#

Bare Metal Operator реализует Kubernetes API для управления хостами baremetal. Он ведет реестр доступных хостов в качестве экземпляров пользовательского определения ресурса BareMetalHost. Bare Metal Operator позволяет:

  • проверить сведения об оборудовании хоста и сообщить о них на соответствующем BareMetalHost. Сведения включают информация о процессорах, оперативной памяти, дисках, сетевых адаптерах и многом другом;

  • предоставить хостам заданный образ;

  • очистить содержимое диска хоста до или после подготовки.

Последовательность выполнения#

BareMetalHost представляет собой хост сервера и содержит информацию о сервере. Классификация полей по следующим широким категориям:

  • известные свойства сервера: такие поля, как свойства bootMACAddress-сервера;

  • неизвестные свойства сервера: такие поля, как CPU и disk, являются свойствами сервера и обнаруживаются Ironic;

  • предоставленное пользователем: такие поля, как image, предоставляются пользователем для определения загрузочного образа для сервера;

  • динамические поля: такие поля, как IP, могут динамически назначаться серверу во время выполнения DHCP-сервером.

В течение жизненного цикла Bare Metal хоста некоторые из этих полей изменяются в зависимости от информации, поступающей от Ironic или других контроллеров, в то время такие поля, как MAC-адрес, не меняются.

Bare Metal Operator также может работать с Bare metal machine controller. При участии Bare metal machine controller и Ironic ниже показан упрощенный путь передачи информации и обзор ресурса BareMetalHost:

Пример манифеста
apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: node-0
  namespace: metal3
spec:
  bmc:
    address: ipmi://NNN.NNN.NNN.N:6230
    credentialsName: node-0-bmc-secret
  bootMACAddress: 00:5a:91:3f:9a:bd
  image:
    checksum: http://MMM.MM.M.1/images/CENTOS_8_NODE_IMAGE_K8S_v1.22.2-raw.img.md5sum
    url: http://MMM.MM.M.1/images/CENTOS_8_NODE_IMAGE_K8S_v1.22.2-raw.img
  networkData:
    name: test1-workers-tbwnz-networkdata
    namespace: metal3
  online: true
  userData:
    name: test1-workers-vd4gj
    namespace: metal3
status:
  hardware:
    cpu:
      arch: x86_64
      count: 2
    hostname: node-0
    nics:
    - ip: MMM.MM.M.73
      mac: 00:5a:91:3f:9a:bd
      name: enp1s0
    ramMebibytes: 4096
    storage:
    - hctl: "0:0:0:0"
      name: /dev/sda
      serialNumber: drive-scsi0-0-0-0
      sizeBytes: 53687091200
      type: HDD

Где NNN.NNN.NNN.N – актуальный IP адрес одной подсети, а MMM.MM.M.1 и MMM.MM.M.73 – актуальные IP адреса другой подсети.

Ресурс BareMetalHost содержит адрес и аутентификационную информацию для сервера.

Bare Metal Operator передает эту информацию Ironic и получает взамен сведения об оборудовании - данные проверки, такие как процессор и диск сервера. Эта информация добавляется к статусу ресурса BareMetalHost. Чтобы получить такую информацию, связанную с сервером, сервер загружается с помощью служебного ramdisk. Если происходят изменения, связанные с оборудованием, BareMetalHost обновляется соответствующим образом.

После развертывания кластера инфраструктуры, подготовленного пользователем, можно использовать Bare Metal Operator (BMO) и другие компоненты metal3 для масштабирования baremetal хостов в кластере более автоматизированным способом.

Настройка Provisioning ресурса для масштабирования кластеров, подготовленных пользователем#

Создайте Provisioning пользовательский ресурс (CR), чтобы включить компоненты платформы Metal в кластере инфраструктуры, подготовленном пользователем:

  1. Создайте Provisioning CR.

    Сохраните следующий YAML-настройку в файле provisioning.yaml:

    apiVersion: metal3.io/v1alpha1
    kind: Provisioning
    metadata:
      name: provisioning-configuration
    spec:
      provisioningNetwork: "Disabled"
      watchAllNamespaces: false
    
  2. Создайте Provisioning CR, выполнив следующую команду:

    oc create -f provisioning.yaml
    

    Пример вывода:

    provisioning.metal3.io/provisioning-configuration created
    

Проверка#

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

oc get pods -n openshift-machine-api

Пример вывода:

NAME                                                  READY   STATUS    RESTARTS        AGE
cluster-autoscaler-operator-678c476f4c-jjdn5          2/2     Running   0               5d21h
cluster-baremetal-operator-6866f7b976-gmvgh           2/2     Running   0               5d21h
control-plane-machine-set-operator-7d8566696c-bh4jz   1/1     Running   0               5d21h
ironic-proxy-64bdw                                    1/1     Running   0               5d21h
ironic-proxy-rbggf                                    1/1     Running   0               5d21h
ironic-proxy-vj54c                                    1/1     Running   0               5d21h
machine-api-controllers-544d6849d5-tgj9l              7/7     Running   1 (5d21h ago)   5d21h
machine-api-operator-5c4ff4b86d-6fjmq                 2/2     Running   0               5d21h
metal3-6d98f84cc8-zn2mx                               5/5     Running   0               5d21h
metal3-image-customization-59d745768d-bhrp7           1/1     Running   0               5d21h

Результат#

Bare Metal Operator настроен и готов к работе.