Skip to content

Latest commit

 

History

History
79 lines (64 loc) · 1.95 KB

204_Node_Affinity.md

File metadata and controls

79 lines (64 loc) · 1.95 KB

Node Affinity

Plantilla

Aunque se puede encontrar en la doc de K8s, esta es la plantilla de la estructura de "nodeAffinity"

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key:
            operator:
            values:

Node Affinity simple

  • Etiquetar un nodo
kubectl label nodes node01 size=Large
  • Crear deployment de 4 replicas
  • Assignar nodeAffinity para que el deployment anterior se ejecute solo en el nodo etiquetado

Taints/Tolerations y Node Affinity

  • Configurar lo necesario para conseguir el siguiente escenario
    • Tener un Pod "red", con imagen nginx, que se ejecute exclusivamente en el nodo01
    • Que cualquier otro Pod (sin necesidad de definir nada en el Pod, se ejecute en el nodo02, o cualquier nodo adicional si aumentamos el cluster
Solución
  • Necesitamos que el Pod "red" se ejecute en el nodo node01. Por tanto necesitaremos una definicion de nodeAffinity que nos vincule el pod a un label del node01

  • Necesitamos hacer que el pod "red" se el unico pod que se ejecuta en node01. Por tanto necesitaremos un "Taint" en ese nodo, y un "Toleration" a ese Taint en el pod red

  • Añadimos un label al node (para el nodeAffinity)

kubectl label node node01 color=red
  • Añadimos un Taint al nodo
kubectl taint node node01 color=red:NoSchedule
  • Definimos el Affinity y Toleration
apiVersion: v1
kind: Pod
metadata:
  labels:
    color: red
  name: red
spec:
  containers:
  - image: nginx
    name: nginx
  tolerations:
  - key: "color"
    operator: "Equal"
    value: "red"
    effect: "NoSchedule"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: color
            operator: In
            values:
            - red