Skip to content

Cuestionario de ubicación de workloads de EKS Hybrid Nodes ​

Documento relacionado: Workload Placement

Preguntas de opción múltiple ​

1. ¿Cuál NO es un método usado para ubicar Pods en nodos específicos en Kubernetes? ​

A. nodeSelector B. Node Affinity C. Taints/Tolerations D. PodDisruptionBudget

Mostrar respuesta

Respuesta: D. PodDisruptionBudget

Explicación: PodDisruptionBudget (PDB) se usa para garantizar una disponibilidad mínima durante interrupciones voluntarias, no para la ubicación de Pods.

Métodos de ubicación de Pods:

  • nodeSelector: Selección simple de nodos basada en labels
  • Node Affinity: Selección compleja de nodos basada en reglas
  • Taints/Tolerations: Restringen los nodos para aceptar solo Pods específicos
  • Pod Affinity/Anti-Affinity: Definen relaciones de ubicación entre Pods
yaml
# nodeSelector example
spec:
  nodeSelector:
    location: onprem

# Node Affinity example
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: gpu
            operator: In
            values: ["nvidia-a100"]

2. ¿Cuál es el comando correcto para establecer un Taint en Hybrid Nodes de modo que solo se ubiquen allí workloads de GPU? ​

A. kubectl label node hybrid-node-1 gpu=true B. kubectl taint node hybrid-node-1 dedicated=gpu:NoSchedule C. kubectl annotate node hybrid-node-1 gpu=nvidia D. kubectl cordon hybrid-node-1

Mostrar respuesta

Respuesta: B. kubectl taint node hybrid-node-1 dedicated=gpu:NoSchedule

Explicación: Los Taints restringen la programación solo a Pods que toleran el taint.

bash
# Set Taint
kubectl taint node hybrid-node-1 dedicated=gpu:NoSchedule

# Verify Taint
kubectl describe node hybrid-node-1 | grep Taints
yaml
# Toleration that allows the Taint
apiVersion: v1
kind: Pod
metadata:
  name: gpu-workload
spec:
  tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"
  containers:
  - name: cuda-app
    image: nvidia/cuda:12.0-runtime
    resources:
      limits:
        nvidia.com/gpu: 1

Tipos de efecto de Taint:

  • NoSchedule: Impide la programación de nuevos Pods
  • PreferNoSchedule: Evita la programación si es posible
  • NoExecute: También desaloja Pods existentes

3. En una estrategia de cloud bursting, ¿qué método se usa para mover workloads a nodos de cloud cuando los recursos on-premises son insuficientes? ​

A. Eliminar y volver a crear Pods manualmente B. Usar preferredDuringSchedulingIgnoredDuringExecution de Node Affinity C. Ubicar todos los Pods en cloud D. Eliminar y volver a crear el cluster

Mostrar respuesta

Respuesta: B. Usar preferredDuringSchedulingIgnoredDuringExecution de Node Affinity

Explicación: Cloud bursting implementa una estrategia de preferencia on-premises y respaldo en cloud.

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: burst-workload
spec:
  replicas: 10
  template:
    spec:
      affinity:
        nodeAffinity:
          # Prefer on-premises (not required)
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: location
                operator: In
                values: ["onprem"]
          - weight: 50
            preference:
              matchExpressions:
              - key: location
                operator: In
                values: ["cloud"]
      containers:
      - name: app
        image: myapp:v1

Patrón de cloud bursting:

[On-premises capacity: 8 nodes]    [Cloud capacity: Unlimited]
      | Preferred                       | Fallback
  Pods 1-8 placed -----------------> Pods 9+ overflow

4. ¿Qué significa maxSkew al usar TopologySpreadConstraints para distribuir Pods uniformemente entre zonas? ​

A. Conteo mínimo de Pods B. Diferencia máxima en el conteo de Pods entre zonas C. Conteo total de Pods D. Máximo de Pods por nodo

Mostrar respuesta

Respuesta: B. Diferencia máxima en el conteo de Pods entre zonas

Explicación:maxSkew define el desequilibrio máximo en el conteo de Pods entre dominios de topología (por ejemplo, zonas).

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: distributed-app
spec:
  replicas: 6
  template:
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: distributed-app

Ejemplo de maxSkew=1:

Zone A: 2 Pods  |  Zone B: 2 Pods  |  Zone C: 2 Pods  (Balanced)
Zone A: 3 Pods  |  Zone B: 2 Pods  |  Zone C: 2 Pods  (Skew=1, Allowed)
Zone A: 4 Pods  |  Zone B: 2 Pods  |  Zone C: 2 Pods  (Skew=2, Not Allowed)

Opciones de whenUnsatisfiable:

  • DoNotSchedule: Rechaza la programación si se infringe la restricción
  • ScheduleAnyway: Programa incluso si se infringe la restricción (mejor esfuerzo)

5. ¿Cómo ubicas Pods en nodos donde residen los datos por consideraciones de localidad de datos? ​

A. Programación aleatoria B. Usar labels de nodo y nodeSelector para ubicación por proximidad a los datos C. Seleccionar siempre nodos de cloud D. Orden alfabético del nombre del Pod

Mostrar respuesta

Respuesta: B. Usar labels de nodo y nodeSelector para ubicación por proximidad a los datos

Explicación: Para la localidad de datos, etiqueta los nodos donde se almacenan los datos y ubica los Pods usando esos labels.

bash
# Label nodes with data location
kubectl label node storage-node-1 data-location=primary-storage
kubectl label node storage-node-2 data-location=replica-storage
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-processor
spec:
  template:
    spec:
      nodeSelector:
        data-location: primary-storage
      containers:
      - name: processor
        image: data-processor:v1
        volumeMounts:
        - name: local-data
          mountPath: /data
      volumes:
      - name: local-data
        hostPath:
          path: /mnt/data

Beneficios de la localidad de datos:

  • Minimiza la latencia de red
  • Reduce los costos de transferencia de datos
  • Mejora el rendimiento de procesamiento

6. ¿Por qué usar Pod Anti-Affinity para evitar que los Pods de la misma aplicación se ubiquen en el mismo nodo? ​

A. Ahorro de costos B. Alta disponibilidad y aislamiento de fallas C. Mejora de la velocidad de red D. Ahorro de almacenamiento

Mostrar respuesta

Respuesta: B. Alta disponibilidad y aislamiento de fallas

Explicación: Pod Anti-Affinity distribuye Pods de la misma aplicación entre distintos nodos para mantener la disponibilidad del servicio incluso durante fallas de un solo nodo.

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ha-webapp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ha-webapp
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values: ["ha-webapp"]
            topologyKey: kubernetes.io/hostname
      containers:
      - name: web
        image: nginx:1.25

Resultado:

Node 1: ha-webapp-pod-1
Node 2: ha-webapp-pod-2
Node 3: ha-webapp-pod-3
(Only 1 placed per node)

Si un nodo falla, solo se ve afectado 1 Pod, y los 2 restantes continúan proporcionando servicio.

Pregunta a la documentación

Enter envía, Shift+Enter añade una línea.