Esta página descreve as opções do programador e como configurar restrições de programação de pods padrão no Google Distributed Cloud (somente software) para clusters bare metal.
O Google Distributed Cloud oferece vários recursos padrão do Kubernetes que podem ser usados para controlar a programação de pods, como:
Para informações sobre restrições de distribuição da topologia de pods no Kubernetes, consulte Kubernetes Programador na documentação do Kubernetes.
Antes de começar
Antes de configurar a distribuição de pods padrão, verifique se cada nó no cluster tem os rótulos de topologia corretos. É possível usar a API Nodepool.Spec.TaintsAndLabels para aplicar rótulos. A rotulagem manual de nós com kubectl label oferece mais flexibilidade, mas exige rotulagem manual ao adicionar um novo nó ao cluster.
Configurar o programador personalizado padrão {#:config-default}
Rotular nós
Adicione rótulos de topologia aos arquivos YAML do cluster e do pool de nós. O exemplo a seguir pressupõe que dois pools de nós de trabalho estão em racks diferentes e que os nós do plano de controle estão em
rack1.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster spec: controlPlane: nodePoolSpec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack1 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack2 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack2Aplique a configuração atualizada do cluster.
bmctl update cluster -c CLUSTER_NAMESubstitua
CLUSTER_NAMEpelo nome do cluster.Aguarde a propagação do rótulo
topology.k8s.io/rackpara todos os nós do cluster.
Ativar restrições de distribuição de pods padrão
Adicione a anotação
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enableao arquivo YAML do cluster.Adicione a seção
schedulerConfigurationemcluster.spec.controlPlaneno arquivo YAML do cluster.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster annotations: preview.baremetal.cluster.gke.io/custom-scheduler-configuration: enable spec: controlPlane: schedulerConfiguration: defaultTopologySpreadConstraint: defaultConstraints: - topologyKey: topology.k8s.io/rack whenUnsatisfiable: DoNotSchedule maxSkew: 1 defaultingType: ListAplique a configuração atualizada do cluster.
bmctl update cluster -c CLUSTER_NAMESubstitua
CLUSTER_NAMEpelo nome do cluster.Aguarde a conclusão da reconciliação do cluster. Monitore
cluster.status.clusterStateaté que ele mostreRunning. Um jobcontrol-plane-updateé executado para cada nó do plano de controle durante esse processo.
Verificar a configuração de distribuição de pods
Crie uma implantação de teste com cinco réplicas.
Observe a distribuição de pods. A diferença no número de pods em
nodepool-rack1enodepool-rack2precisa ser exatamente um.Verifique o arquivo
kube-scheduler-profile.configem cada nó do plano de controle. O arquivo, localizado em/etc/kubernetes/kube-scheduler-profile.config, precisa conter a configuração de distribuição da topologia decluster.spec.
Resolver problemas
Para diagnosticar e resolver problemas com a distribuição de pods padrão, verifique o seguinte:
- Analise
BareMetalMachine.Status.ControlPlaneComponentspara conferir o status do recurso. - Examine os registros de
cluster-operatorecap-controller-managerpara eventos relevantes. - Se os pods estáticos
kube-schedulerfalharem, verifique se a configuração do programador está correta no arquivo YAML do cluster.
A seguir
- Saiba mais sobre restrições de distribuição da topologia de pods na documentação do Kubernetes.
- Consulte Resolver problemas do programador do Kubernetes se você tiver problemas.