Como distribuir uniformemente vários pods para cada nó?
O componente kube-scheduler no Kubernetes é o agendamento de pods responsável. Para cada pod recém-criado ou outros pods não agendados, o kube-scheduler seleciona um nó ideal deles para ser executado. O kube-scheduler seleciona um nó para um pod em uma operação de 2 etapas: filtragem e pontuação. Na etapa de filtragem, todos os nós onde é possível agendar o pod são filtrados. Na etapa de pontuação, o kube-scheduler classifica os nós restantes para escolher o posicionamento do pod mais adequado. Finalmente, o kube-scheduler agenda o pod para o nó com a pontuação mais alta. Se houver mais de um nó com as pontuações iguais, o kube-scheduler seleciona um deles aleatoriamente.
BalancedResourceAllocation é apenas uma das prioridades de pontuação. Outros itens de pontuação também podem causar distribuição desigual. Para obter detalhes sobre agendamento, consulte Agendador do Kubernetes e Políticas de agendamento.
Você pode configurar políticas de anti-afinidade de pods para distribuir pods uniformemente em nós diferentes.
Exemplo:
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