Machine API Operator#

Machine API Operator (MAO) - оператор, который обеспечивает управление физическими серверами и виртуальными машинамии, автоматизацию развертывания виртуальных машин в кластере DropApp Plus. Путем использования машинного API оператор позволяет управлять жизненным циклом виртуальных машин, их масштабированием, мониторингом и управлением ресурсами.

Machine API Operator поддерживает автоматическое назначение IP-адресов при создании новых виртуальных машин.

Machine API Operator управляет жизненным циклом CRD - пользовательского определения ресурса, контроллеров и объектов RBAC определенного назначения, которые расширяют Kubernetes API. Это позволяет декларативно передавать желаемое состояние машин в кластере.

Контроллеры:

  • MachineSet Controller - контроллер машинного набора;

    Убедитесь в наличии ожидаемого количества реплик и заданной конфигурации провайдера для набора машин.

  • Machine Controller - контроллер машины;

    Убедитесь, что экземпляр provider создан для объекта Machine в данном поставщике.

  • machine-api-provider-aws;

  • machine-api-provider-gcp;

  • machine-api-provider-azure;

  • cluster-api-provider-libvirt;

  • cluster-api-provider-openstack;

  • cluster-api-provider-baremetal;

  • cluster-api-provider-ovirt;

  • cluster-api-provider-ibmcloud;

  • Nodelink Controller - контроллер Nodelink;

    Убедитесь, что у машин есть nodeRef на основе IP-адресов или соответствия providerId. Пометьте узлы меткой, содержащей имя машины.

  • MachineHealthCheck Controller - контроллер проверки работоспособности машины.

    Убедитесь, что машины, на которые нацелены объекты MachineHealthCheck, удовлетворяют критериям работоспособности или исправлены иным образом.

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

Создайте новую машину, применив манифест, представляющий экземпляр CRD-машины:

Пример манифеста
apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: clusterID
    machine.openshift.io/cluster-api-machine-role: role
    machine.openshift.io/cluster-api-machine-type: role
  name: machineName
  namespace: openshift-machine-api
spec:
  providerSpec:
    value:
      kind: AWSMachineProviderConfig
      ami:
        id: ami-0df3f99538fbef10f
      apiVersion: awsproviderconfig.openshift.io/v1beta1
      blockDevices:
        - ebs:
            iops: 0
            volumeSize: 120
            volumeType: gp2
      credentialsSecret:
        name: aws-cloud-credentials
      deviceIndex: 0
      iamInstanceProfile:
        id: clusterID-worker-profile
      instanceType: m5.large
      placement:
        availabilityZone: us-east-1a
        region: us-east-1
      securityGroups:
        - filters:
            - name: tag:Name
              values:
                - clusterID-worker-sg
      subnet:
        filters:
          - name: tag:Name
            values:
              - clusterID-private-us-east-1a
      tags:
        - name: kubernetes.io/cluster/clusterID
          value: owned
      userDataSecret:
        name: worker-user-data

Метка machine.openshift.io/cluster-api-cluster будет использоваться контроллерами для поиска нужного экземпляра облака.

Установите другие метки для предоставления пользователям удобного способа получения групп машин:

machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker

Разработка#

  • Сгенерируйте код:

    make generate
    
  • Создайте сборку:

    make build
    
  • Извлеките images.json в файл из install/0000_30_machine-api-operator_01_images.configmap.yaml и запустите:

    ./bin/machine-api-operator start --kubeconfig ${HOME}/.kube/config --images-json=path/to/images.json
    
  • Создайте образ:

    make image
    

Machine API Operator предназначен для работы совместно с Cluster Version Operator.

Развертывание Machine API Operator с Kubemark#

  1. Разверните MAO через DropApp Plus:

    kustomize build | oc apply -f -
    
  2. Предварительные требования для развертывания Kubemark actuator:

    kustomize build config | oc apply -f -
    
  3. Создайте cluster infrastructure.config.openshift.io, чтобы сообщить MAO о развертывании поставщика kubemark:

    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: infrastructures.config.openshift.io
    spec:
      group: config.openshift.io
      names:
        kind: Infrastructure
        listKind: InfrastructureList
        plural: infrastructures
        singular: infrastructure
      scope: Cluster
      versions:
      - name: v1
        served: true
    storage: true
    ---
    apiVersion: config.openshift.io/v1
    kind: Infrastructure
    metadata:
      name: cluster
    status:
      platform: kubemark
    
  4. Запустите файл конфигурации config/kubemark-config-infra.yaml:

    oc apply -f config/kubemark-config-infra.yaml
    

Результат#

Machine API Operator доступен для настройки.