En esta página, se describen las opciones del programador y cómo configurar las restricciones de programación de pods predeterminadas en tus clústeres de Google Distributed Cloud de solo software para equipos físicos.
Google Distributed Cloud proporciona varias funciones estándar de Kubernetes que puedes usar para controlar la programación de Pods, como las siguientes:
Para obtener información sobre las restricciones de propagación de la topología de pods en Kubernetes, consulta Kubernetes Scheduler en la documentación de Kubernetes.
Antes de comenzar
Antes de configurar la distribución predeterminada de Pods, asegúrate de que cada nodo de tu clúster tenga las etiquetas de topología correctas. Puedes usar la API de Nodepool.Spec.TaintsAndLabels para aplicar etiquetas. Etiquetar nodos de forma manual con kubectl label ofrece más flexibilidad, pero requiere etiquetado manual cuando agregas un nodo nuevo al clúster.
Configura el programador personalizado predeterminado {[:config-default]}
Etiqueta nodos
Agrega etiquetas de topología a los archivos YAML del clúster y del grupo de nodos. En el siguiente ejemplo, se supone que hay dos grupos de nodos trabajadores en diferentes racks y que los nodos del plano de control están en
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: rack2Aplica la configuración actualizada del clúster.
bmctl update cluster -c CLUSTER_NAMEReemplaza
CLUSTER_NAMEpor el nombre de tu clúster.Espera a que la etiqueta
topology.k8s.io/rackse propague a todos los nodos del clúster.
Habilita las restricciones de propagación de Pod predeterminadas
Agrega la anotación
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enableal archivo YAML del clúster.Agrega la sección
schedulerConfigurationencluster.spec.controlPlaneen el archivo YAML del clúster.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: ListAplica la configuración actualizada del clúster.
bmctl update cluster -c CLUSTER_NAMEReemplaza
CLUSTER_NAMEpor el nombre de tu clúster.Espera a que se complete la reconciliación del clúster. Supervisa
cluster.status.clusterStatehasta que muestreRunning. Durante este proceso, se ejecuta un trabajo decontrol-plane-updatepara cada nodo del plano de control.
Verifica la configuración de la distribución de pods
Crea una implementación de prueba con cinco réplicas.
Observa la distribución de pods. La diferencia en la cantidad de Pods en
nodepool-rack1ynodepool-rack2debe ser exactamente de uno.Verifica el archivo
kube-scheduler-profile.configen cada nodo del plano de control. El archivo, ubicado en/etc/kubernetes/kube-scheduler-profile.config, debe contener la configuración de propagación de la topología decluster.spec.
Solucionar problemas
Para diagnosticar y resolver problemas con la distribución predeterminada de pods, verifica lo siguiente:
- Revisa el
BareMetalMachine.Status.ControlPlaneComponentspara conocer el estado de la función. - Examina los registros de
cluster-operatorycap-controller-managerpara ver los eventos pertinentes. - Si fallan los Pods estáticos de
kube-scheduler, verifica que la configuración del programador sea correcta en el archivo YAML del clúster.
¿Qué sigue?
- Obtén más información sobre las restricciones de propagación de la topología de Pods en la documentación de Kubernetes.
- Si tienes problemas, consulta Soluciona problemas del programador de Kubernetes.