Использование azure Spot Виртуальные машины в кластере Azure Red Hat OpenShift (ARO)

В этой статье приведены необходимые сведения, позволяющие настроить кластер Azure Red Hat OpenShift (ARO) для использования azure Spot Виртуальные машины.

Точечные виртуальные машины Azure позволяют применить неиспользуемую мощность наших ресурсов. Это обеспечивает значительную экономию. В любой момент, когда эта мощность становится нужна, инфраструктура Azure вытесняет точечные виртуальные машины Azure. Дополнительные сведения о точечных экземплярах см. в разделе "Точечные Виртуальные машины".

Подготовка к работе

Прежде чем приступить к работе, убедитесь, что у вас развернут кластер Azure Red Hat Openshift. Если вам нужен кластер ARO, см. краткое руководство по ARO для общедоступного кластера или руководство по частному кластеру для частного кластера. Действия по настройке кластера для использования точечных виртуальных машин одинаковы как для частных, так и для общедоступных кластеров.

Кластер ARO всегда должен иметь не менее трех рабочих узлов, которые являются неточечными виртуальными машинами и тремя узлами управления. Кластер ARO не может содержать точечные узлы управления на основе виртуальных машин.

Добавление точечных виртуальных машин

Управление компьютерами в Azure Red Hat Openshift осуществляется с помощью MachineSet. Ресурсы MachineSet — это группы компьютеров. Наборы компьютеров относятся к компьютерам, так как наборы реплик относятся к модулям pod. Если требуется больше компьютеров или их необходимо уменьшить, измените поле реплик на наборе компьютеров в соответствии с вашими вычислительными ресурсами. Дополнительные сведения см. в документации по OpenShift MachineSet

Использование точечных виртуальных машин указывается путем добавления spotVMOptions поля в спецификацию шаблона MachineSet. Чтобы создать этот MachineSet, мы будем:

  1. Получите копию MachineSet, запущенную в кластере.
  2. Создайте измененную конфигурацию MachineSet.
  3. Развертывание этого MachineSet в кластере

Сначала подключитесь к кластеру OpenShift с помощью интерфейса командной строки.

oc login $apiServer -u kubeadmin -p <kubeadmin password>

Затем вы увидите наборы компьютеров в кластере. Кластер по умолчанию будет развернут на 3 компьютерах:

oc get machinesets -n openshift-machine-api

Ниже показан пример выходных данных из этой команды:

NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus2   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus3   1         1         1       1           2d22h

Затем вы описать развернутый MachineSet. Замените <набор> компьютеров одним из наборов компьютеров, перечисленных выше, и выведите его в файл.

oc get machineset <machineset> -n openshift-machine-api -o yaml > spotmachineset.yaml

Вам потребуется изменить следующие параметры в MachineSet:

  • metadata.name
  • spec.selector.matchLabels.machine.openshift.io/cluster-api-machineset
  • spec.template.metadata.labels.machine.openshift.io/cluster-api-machineset
  • spec.template.spec.providerSpec.value.spotVMOptions (Добавьте это поле и задайте для него {}значение .)

Ниже приведен сокращенный пример YAML Spot MachineSet, который выделяет ключевые изменения, которые необходимо внести при создании нового точечных машинного набора на существующем рабочем наборе machineSet, включая некоторые дополнительные сведения для контекста. (Пример не представляет целого функционального набора компьютеров; многие поля были опущены ниже.)

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  name: aro-cluster-abcd1-spot-eastus
spec:
  replicas: 2
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: aro-cluster-abcd1
      machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
  template:
    metadata:
        machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
    spec:
      providerSpec:
        value:
          spotVMOptions: {}
      taints:
        - effect: NoExecute
          key: spot
          value: 'true'

После обновления файла примените его.

oc create -f spotmachineset.yaml

Чтобы проверить успешность создания MachineSet, выполните следующую команду:

oc get machinesets -n openshift-machine-api

Ниже приведен пример выходных данных. Набор компьютеров готов после того, как у вас есть компьютеры в состоянии "Готово".

  NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus2           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus3           1         1         1       1           3d1h
spot                                       1         1         1       1           2m47s

Планирование прерываний рабочих нагрузок

Рекомендуется добавить запятую к точечным узлам, чтобы предотвратить планирование не прерываемых узлов, а также добавить к ним терпимые подключения к любым модулям pod, которые вы хотите запланировать на них. Вы можете запятнать узлы с помощью спецификации MachineSet.

Например, можно добавить следующий YAML в spec.template.spec:

     taints:
        - effect: NoExecute
          key: spot
          value: 'true'

Это предотвращает планирование модулей pod на результирующем узле, если они не имеют толерантности для spot='true' нечетких ограничений, и это приведет к вытеснению всех модулей pod, не имеющих такой терпимости.

Чтобы узнать больше о применении заметок и толерации, прочитайте статью "Управление размещением pod с помощью запятых узлов".

Квота

Компьютеры могут перейти в состояние сбоя из-за проблем с квотой, если квота используемого типа компьютера слишком низка в течение короткого момента, даже если она в конечном итоге должна быть достаточной (например, один узел по-прежнему удаляется при создании другого). Из-за этого рекомендуется задать квоту для типа компьютера, который будет использоваться для экземпляров Spot, которые должны быть немного выше, чем необходимо (возможно, на 2*n, где n — количество ядер, используемых компьютером). Эти издержки не позволят устранить неудачные машины, которые, хотя и относительно простые, по-прежнему ручное вмешательство.

Готовность узла

Как описано в документации по точечным виртуальным машинам, связанным выше, виртуальные машины переходят в состояние подготовки Сделок, когда они больше недоступны или больше не доступны по максимальной цене.

Это будет проявляться в OpenShift как не готовые узлы. Компьютеры будут оставаться работоспособными на этапе подготовки в качестве узла.

Они вернутся к готовности после того, как виртуальные машины будут доступны снова.

Устранение неполадок

Узел застрял в состоянии "Не готово", базовая виртуальная машина освобождена

Если узел застрял в течение длительного периода времени в состоянии Not Ready после того, как его виртуальная машина была освобождена, можно попробовать удалить его или удалить соответствующий объект компьютера OpenShift.

Точечный компьютер застрял в состоянии сбоя

Если компьютер (объект OpenShift), использующий точечные виртуальные машины, зависает в состоянии сбоя, попробуйте удалить его вручную. Если его невозможно удалить из-за 403, так как виртуальная машина больше не существует, измените компьютер и удалите методы завершения.