Objetivo: tener un pod (a saber, 'log-scraper') programado en cada nodo al menos una vez pero no más de una vez
Suponga que un clúster tiene los siguientes nodos
Nodos
Pod con el que estoy trabajando
apiVersion: v1 kind: Pod metadata: name: log-scraper spec: volumes: - name: container-log-dir hostPath: path: /var/log/containers containers: - image: "logScraper:latest" name: log-munger volumeMounts: - name: container-log-dir mountPath: /var/log/logging-appAgregar afinidad para seleccionar solo nodos 'trabajadores' (o nodos no maternos)
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "worker" operator: In values: - "true" Pregunta 1: ¿Cómo me aseguro de que cada node ejecute UNO Y SOLO UN pod de tipo log-scraper
Pregunta 2: ¿Qué otros manifiestos se deben aplicar/agregar para lograr esto?
Probablemente debería usar Daemonsets que están hechos exactamente para este propósito de programar un pod por nodo y se agregan automáticamente a nuevos nodos en caso de escalado automático del clúster.
Hay dos cosas importantes cuando se trata de asignar pods a nodos: "Afinidad" y "AntiAfinidad" .
In , NotIn , Exist , DoesNotExist , Gt y Lt . Cuando usa NotIn y DoesNotExist , se vuelve antiafinidad.Ahora, en Affinity/Antiaffinity, tiene 2 opciones: Node affinity/antiaffinity y Inter-pod affinity/antiaffinity
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: labelSelector: - matchExpressions: - key: worker operator: In values: - log-scraper