¿Cómo distribuyo uniformemente varios pods a cada nodo?
El componente kube-scheduler en Kubernetes es la programación responsable de pods. Para cada pod recién creado u otros pods no programados, kube-scheduler selecciona un nodo óptimo de ellos para ejecutarse. kube-scheduler selecciona un nodo para un pod en una operación de 2 pasos: filtrado y puntuación. En la etapa de filtrado, todos los nodos en los que es factible programar el pod son filtrados. En la etapa de puntuación, kube-scheduler clasifica los nodos restantes para elegir la colocación de cápsulas más adecuada. Finalmente, kube-scheduler programa el pod al nodo con la puntuación más alta. Si hay más de un nodo con las puntuaciones iguales, kube-scheduler selecciona uno de ellos al azar.
BalancedResourceAllocation es solo una de las prioridades de puntuación. Otros elementos de puntuación también pueden causar una distribución desigual. Para obtener más información sobre la programación, consulte Kubernetes Scheduler y Políticas de programación.
Puede configurar las políticas de antiafinidad de pods para distribuir los pods de manera uniforme en diferentes nodos.
Por ejemplo:
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: container-0
image: nginx:alpine
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
affinity:
podAntiAffinity: # Workload anti-affinity
preferredDuringSchedulingIgnoredDuringExecution: # Ensure that the following conditions are met:
- podAffinityTerm:
labelSelector: # Select the label of the pod, which is anti-affinity with the workload.
matchExpressions:
- key: app
operator: In
values:
- nginx
namespaces:
- default
topologyKey: kubernetes.io/hostname # It takes effect on the node.
imagePullSecrets:
- name: default-secret