Partilhar via


Usar máquinas virtuais do Azure Spot em um cluster do Azure Red Hat OpenShift

Este artigo fornece os detalhes necessários que permitem configurar seu cluster do Azure Red Hat OpenShift para usar as Máquinas Virtuais do Azure Spot.

A utilização das Máquinas Virtuais Spot do Azure permite-lhe tirar partido da nossa capacidade não utilizada com uma poupança de custos significativa. A qualquer momento em que o Azure precisar da capacidade de volta, a infraestrutura do Azure removerá as Máquinas Virtuais do Azure Spot. Para obter mais informações sobre instâncias spot, consulte Máquinas virtuais spot.

Antes de começar

Antes de começar, verifique se você tem um cluster do Azure Red Hat Openshift implantado. Se você precisar de um cluster, consulte o início rápido para um cluster público ou o tutorial de cluster privado para um cluster privado. As etapas para configurar seu cluster para usar VMs spot são as mesmas para clusters privados e públicos.

Um cluster sempre deve ter pelo menos três nós de trabalho que não sejam VMs spot e três nós de controle. Um cluster não pode ter nenhum nó de controle baseado em VM local.

Adicionar VMs spot

O gerenciamento de máquinas no Azure Red Hat Openshift é realizado usando o MachineSet. Os recursos MachineSet são grupos de máquinas. MachineSets estão para máquinas como ReplicaSets estão para pods. Se você precisar de mais máquinas ou precisar reduzi-las, altere o campo Réplicas no conjunto de máquinas para atender às suas necessidades de computação. Para saber mais, consulte a nossa documentação do OpenShift MachineSet

O uso de VMs spot é especificado adicionando o spotVMOptions campo dentro da especificação de modelo de um MachineSet. Para criar este MachineSet, iremos:

  1. Obtenha uma cópia de um MachineSet em execução no cluster.
  2. Crie uma configuração modificada do MachineSet.
  3. Implantar este MachineSet em seu cluster

Primeiro, conecte-se ao cluster OpenShift usando a CLI.

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

Em seguida, você listará os MachineSets em seu cluster. Um cluster padrão terá 3 MachineSets implantados:

oc get machinesets -n openshift-machine-api

A seguir mostra uma saída de exemplo deste comando:

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

Em seguida, você descreverá o MachineSet implantado. Substitua <machineset> por um dos MachineSets listados acima e envie-o para um arquivo.

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

Você precisará alterar os seguintes parâmetros no 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 (Adicione este campo e defina-o como {}.)

Abaixo está um exemplo resumido de Spot MachineSet YAML que destaca as principais alterações que você precisa fazer ao basear um novo Spot MachineSet em um MachineSet de trabalho existente, incluindo algumas informações adicionais para o contexto. (O exemplo não representa um MachineSet completo e funcional; muitos campos foram omitidos abaixo.)

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'

Depois que o arquivo for atualizado, aplique-o.

oc create -f spotmachineset.yaml

Para validar que seu MachineSet foi criado com êxito, execute o seguinte comando:

oc get machinesets -n openshift-machine-api

Aqui está um exemplo de resultado. Seu conjunto de máquinas estará pronto assim que você tiver máquinas no estado "Pronto".

  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

Agendar cargas de trabalho interruptíveis

É recomendável adicionar uma mancha aos nós Spot para evitar que nós ininterruptos sejam agendados neles e adicionar tolerâncias dessa mancha a quaisquer pods que você deseja agendar neles. Você pode manchar os nós através da especificação MachineSet.

Por exemplo, você pode adicionar o seguinte YAML a spec.template.spec:

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

Isso impede que os pods sejam programados no nó resultante, a menos que tenham uma tolerância para spot='true' manchas, e isso expulsaria quaisquer pods sem essa tolerância.

Para saber mais sobre como aplicar manchas e tolerações, leia Controlando o posicionamento do pod usando manchas de nó.

Quota

As máquinas podem entrar em um estado de falha devido a problemas de cota se a cota para o tipo de máquina que você está usando for muito baixa por um breve momento, mesmo que eventualmente deva ser suficiente (por exemplo, um nó ainda está sendo excluído quando outro está sendo criado). Por isso, é recomendável definir a cota para o tipo de máquina que você usará para que as instâncias spot sejam um pouco maiores do que o necessário (talvez em 2*n, onde n é o número de núcleos usados por uma máquina). Essa sobrecarga evitaria ter que remediar máquinas com falha, que, embora relativamente simples, ainda é uma intervenção manual.

Prontidão do nó

Conforme explicado na documentação da VM spot vinculada acima, as VMs entram no estado de provisionamento desalocado quando não estão mais disponíveis ou não estão mais disponíveis pelo preço máximo especificado.

Isso se manifestará no OpenShift como nós Not Ready . As máquinas permanecerão íntegras, na fase Provisionado como nó.

Eles voltarão a estar Prontos assim que as VMs estiverem disponíveis novamente

Solução de problemas

Nó preso no estado Não Pronto, VM subjacente desalocada

Se um nó estiver preso por um longo período de tempo no estado Não Pronto depois que sua VM foi deslocalizada, você pode tentar excluí-lo ou excluir seu objeto de máquina OpenShift correspondente.

Máquina spot presa no estado de falha

Se uma máquina (objeto OpenShift) que usa uma VM Spot estiver presa em um estado Falha, tente excluí-la manualmente. Se não puder ser excluído devido a um 403 porque a VM não existe mais, edite a máquina e remova os finalizadores.