Saltar al contenido principal

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