Este documento destina-se a proprietários de aplicações e administradores de plataformas que executam o Google Distributed Cloud. Este documento mostra como usar configurações de agendamento, como afinidade e antiafinidade, para VMs que usam o VM Runtime no GDC.
Antes de começar
Para preencher este documento, precisa de ter acesso aos seguintes recursos:
- Acesso à versão 1.12.0 do Google Distributed Cloud (
anthosBareMetalVersion: 1.12.0
) ou a um cluster superior. Pode usar qualquer tipo de cluster capaz de executar cargas de trabalho. Se necessário, experimente o Google Distributed Cloud no Compute Engine ou consulte a vista geral da criação de clusters. - A ferramenta de cliente
virtctl
instalada como um plug-in para okubectl
. Se necessário, instale a ferramenta de cliente virtctl.
Vista geral das configurações de programação
As configurações de agendamento são valores opcionais no tempo de execução da VM no GDC. Se não for especificada nenhuma configuração de agendamento, a VM usa o comportamento de agendamento predefinido do Kubernetes.
Com o comportamento de agendamento predefinido, as VMs são distribuídas pelo cluster. O programador analisa a disponibilidade de recursos do nó atual, como a CPU e a memória, e programa as VMs nos nós para distribuir as exigências de computação. Se não tiver requisitos específicos, não precisa de definir configurações de horários.
Os seguintes três campos estão disponíveis para agendar VMs:
nodeSelector
: especifica as etiquetas de nós que o nó anfitrião de uma VM tem de ter. O tempo de execução da VM no GDC agenda a VM apenas nos nós que têm uma etiqueta especificada.- Afinidade: especifica as regras de afinidade da VM. Inclui afinidade de nós e afinidade ou antiafinidade entre VMs. Define um requisito flexível ou rígido para o programador:
preferredDuringSchedulingIgnoredDuringExecution
: é um requisito flexível. O agendador tenta dar seguimento ao seu pedido. Se o programador não puder aceitar o pedido, a VM pode ser agendada num nó não preferencial.requiredDuringSchedulingIgnoredDuringExecution
: é um requisito obrigatório. O agendador tenta dar seguimento ao seu pedido. Se não estiverem disponíveis nós que correspondam ao seu requisito, a VM não é agendada.
Tolerations
: permite que a VM seja agendada em nós com taints correspondentes.
Pode definir qualquer uma destas configurações de agendamento para suportar as suas cargas de trabalho de computação e necessidades de agendamento. Além das configurações de agendamento, o agendamento de VMs depende dos recursos disponíveis.
O VM Runtime no GDC usa a mesma lógica de agendamento de VMs e estrutura de manifesto que o Kubernetes para atribuir pods a nós. Para mais informações sobre estas configurações de agendamento, consulte os seguintes links:
Coloque VMs num nó específico
Se tiver nós com configurações de hardware específicas, pode agendar VMs para serem executadas apenas nestes nós. Por exemplo, a sua VM pode querer um chipset de CPU específico ou precisar de suporte de GPU. Pode usar uma regra de afinidade básica nodeSelector
ou regras de afinidade mais flexíveis para agendar a execução de VMs nestes nós.
nodeSelector
O seguinte manifesto VirtualMachine
usa um nodeSelector
para um requisito de agendamento rígido. Se não estiver disponível nenhum nó que cumpra a configuração de agendamento, não é possível agendar a VM.
Crie um
VirtualMachine
manifesto, como my-scheduled-vm.yaml,no editor da sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: nodeSelector: kubernetes.io/hostname: NODE_NAME
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.NODE_NAME
: os nós nos quais quer agendar a sua VM.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Afinidade
O manifesto VirtualMachine
seguinte usa a afinidade para um requisito de agendamento flexível. O agendador tenta dar seguimento ao seu pedido. Se o agendador não conseguir
satisfazer o pedido, a VM é agendada num nó não preferencial.
Crie um manifesto
VirtualMachine
, como my-scheduled-vm.yaml,no editor à sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: kubernetes.io/hostname operator: In values: - NODE_NAME
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.NODE_NAME
: os nós nos quais quer agendar a sua VM.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Não coloque VMs num nó específico
Determinadas VMs podem ter cargas de trabalho que não são executadas num nó específico. Pode usar regras de antiafinidade para evitar agendar VMs nestes nós.
O manifesto VirtualMachine
seguinte usa a afinidade para um requisito de agendamento flexível. O agendador tenta dar seguimento ao seu pedido. Se o agendador não conseguir
honrar o pedido, a VM pode ser agendada num nó inadequado.
Crie um manifesto
VirtualMachine
, como my-scheduled-vm.yaml,no editor à sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VVM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: kubernetes.io/hostname operator: NotIn values: - NODE_NAME
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.NODE_NAME
: o nó no qual quer agendar a sua VM.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Mantenha as VMs separadas
As suas cargas de trabalho de computação podem ter VMs que devem ser distribuídas por nós para alta disponibilidade, como um conjunto de VMs de front-end. Pode usar regras de antiafinidade entre VMs para evitar agendar VMs em conjunto nos nós.
O manifesto VirtualMachine
seguinte usa a afinidade para um requisito de agendamento flexível. O agendador tenta dar seguimento ao seu pedido. Se o agendador não conseguir
honrar o pedido, a VM pode ser agendada num nó inadequado.
Crie um manifesto
VirtualMachine
, como my-scheduled-vm.yaml,no editor à sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME labels: KEY:VALUE spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: KEY:VALUE
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.KEY:VALUE
: a etiquetakey:value
a aplicar às VMs que quer agendar em diferentes nós. Para mais informações, consulte o artigo Etiquetas e seletores.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Manter VMs juntas
As suas cargas de trabalho de computação podem ter VMs que devem ser mantidas juntas em nós para reduzir a latência, como uma camada de middleware e base de dados. Pode usar regras de afinidade entre VMs para agendar VMs em conjunto nos nós.
O manifesto VirtualMachine
seguinte usa a afinidade para um requisito de agendamento flexível. O agendador tenta dar seguimento ao seu pedido. Se o agendador não conseguir
honrar o pedido, a VM pode ser agendada num nó inadequado.
Crie um manifesto
VirtualMachine
, como my-scheduled-vm.yaml,no editor à sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME labels: KEY:VALUE spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: affinity: podAffinity: preferredDuringSchedulingIgnoredDuringExecution - podAffinityTerm: topologyKey: kubernetes.io/hostname labelSelector: matchLabels: KEY:VALUE weight: 100
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.KEY:VALUE
: o par de etiquetaskey:value
a aplicar às VMs que quer agendar em diferentes nós. Para mais informações, consulte Etiquetas e seletores.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml
Agende VMs em nós com restrições
As restrições são uma propriedade de agendamento que permite que os nós só permitam que as VMs com tolerâncias especificadas sejam agendadas para execução nos mesmos. Pode aplicar uma contaminação a um nó e, em seguida, no manifesto VirtualMachine
, definir uma tolerância para permitir que a VM seja executada no nó. Para mais informações, consulte o artigo
Restrições e tolerâncias.
Crie um manifesto
VirtualMachine
, como my-scheduled-vm.yaml,no editor à sua escolha:nano my-scheduled-vm.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true scheduling: tolerations: - key: KEY_NAME operator: "Equal" value: KEY_VALUE effect: "NoSchedule"
Substitua os seguintes valores:
VM_NAME
: o nome da sua VM.KEY_NAME
: o nome da chave da sua tolerância que corresponde à mancha no nó.KEY_VALUE
: o valor da chave para a sua tolerância que corresponde à mancha no nó.
O disco de arranque com o nome
VM_NAME-boot-dv
já tem de existir. Para mais informações, consulte o artigo Crie um disco de arranque de VM.Guarde e feche o manifesto da VM no editor.
Crie a configuração da VM e do agendamento através do comando
kubectl
:kubectl apply -f my-scheduled-vm.yaml