Capítulo 2.5 - Scheduler
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Comprender el rol del Scheduler
- Explicar el proceso de planificación
- Comprender los filtros y puntuaciones
- Identificar las restricciones de planificación
¿Qué es el Scheduler?
El Scheduler (kube-scheduler) es responsable de asignar los Pods no planificados a los nodos apropiados del clúster. Tiene en cuenta las restricciones de recursos, las afinidades y las políticas.
Proceso de Planificación
Etapas de Planificación
1. Filtrado (Filtering)
Elimina los nodos que no pueden ejecutar el Pod:
- Predicado 1: Recursos suficientes (CPU, memoria)
- Predicado 2: Afinidades/anti-afinidades respetadas
- Predicado 3: Taints y tolerations
- Predicado 4: Selectores de nodo
2. Puntuación (Prioritization)
Asigna una puntuación a cada nodo elegible (0-10):
- Prioridad 1: Balanceo de recursos
- Prioridad 2: Afinidad con otros Pods
- Prioridad 3: Localidad de los datos
- Prioridad 4: Preferencias del usuario
3. Selección
Se selecciona el nodo con la puntuación más alta.
Ejemplo de Planificación
Escenario
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: "500m"
memory: "512Mi"
Proceso
Restricciones de Planificación
1. Recursos (Requests/Limits)
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
El Scheduler verifica que el nodo tenga suficientes recursos disponibles.
2. Selectores de Nodo
spec:
nodeSelector:
disktype: ssd
zone: us-east-1a
El Pod solo será planificado en nodos con estas etiquetas.
3. Afinidades (Affinity)
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- us-east-1a
4. Taints y Tolerations
# Taint sur le node
kubectl taint nodes node1 key=value:NoSchedule
# Toleration dans le Pod
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
Estrategias de Planificación
Balanceo de Recursos
El Scheduler intenta equilibrar la carga entre los nodos:
Preferencias de Localidad
El Scheduler prefiere planificar los Pods cerca de sus datos (afinidad de zona).
Scheduler Personalizado
Usted puede crear su propio scheduler para necesidades específicas:
apiVersion: v1
kind: Pod
spec:
schedulerName: my-custom-scheduler
containers:
- name: app
image: nginx
Comandos Útiles
# Voir les logs du Scheduler
kubectl logs -n kube-system kube-scheduler-<node>
# Voir pourquoi un Pod n'est pas planifié
kubectl describe pod <pod-name>
# Voir les événements de planification
kubectl get events --field-selector involvedObject.name=<pod-name>
Resumen
En este capítulo, usted ha aprendido:
Scheduler: Asigna los Pods a los nodos apropiados
Proceso: Filtrado → Puntuación → Selección → Bind
Restricciones: Recursos, selectors, afinidades, taints
Balanceo: Distribución óptima de la carga
Personalización: Schedulers personalizados posibles
Próximos Pasos
Ahora que usted comprende el Scheduler:
Capítulo 2.6: kubelet - Agente de los Worker Nodes
Capítulo 2.7: kube-proxy
Capítulo creado el: Diciembre 2024