Mancha y tolerancia de Kubernetes

  • Afinidad de nodo: nodo de afinidad de pod
  • Manchas: pod de desalojos de nodo

Un nodo puede tener múltiples taints. Los pods que no toleran taints no se pueden programar en este nodo. La tolerancia se establece en pods. Estos pods están permitidos, pero no es necesario que se programen en nodos con estos taints.

concepto

Agregar mancha

kubectl taint nodes <node-name> key=value:NoSchedule

Quitar la mancha

kubectl taint nodes <node-name> key:NoSchedule-

El pod definido a continuación se puede programar en el nodo de arriba:

tolerations:
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoSchedule"
tolerations:
- key: "key"
  operator: "Exists"
  effect: "NoSchedule"

Si no hay ningún valor, el operador es Existe, y si hay un valor, es Igual

  • Opeartor sin llave tolera todo
tolerations:
- operator: "Exists"
  • Todos los efectos sin clave de coincidencia de efectos
tolerations:
- key: "key"
  operator: "Exists"

Tres efectos:

  • NoSchedule: Sin programación
  • PreferNoSchedule: intente no programar
  • No Ejecutar:

Un nodo puede tener múltiples taints y un pod puede tener múltiples tolerancias. La secuencia de procesamiento de k8s es como un filtro: a partir de todas las corrupciones, las corrupciones que coinciden con la tolerancia de la vaina se ignoran, y las corrupciones restantes no ignoradas indican los efectos que afectan la vaina, generalmente:

  • Si hay al menos un NoSchedule que no se ignora, el pod no está programado en el nodo
  • Si ningún efecto no ignorado es una mancha de NoSchedule, pero al menos un efecto es una mancha de PreferNoSchedule, intente no programar en el nodo
  • Si al menos un efecto es la corrupción no ignorada de NoExecute, el pod será desalojado del nodo (si ya se está ejecutando en ese nodo) y no se programará para ese nodo (si aún no se está ejecutando en este nodo)

tolerationSeconds indica cuánto tiempo puede permanecer la cápsula en el nodo después de agregar la tinción NoExecute. Si la mancha se quita durante este período, la cápsula no será desalojada.

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

ejemplo

-Nodo dedicado: al cooperar con un controlador de admisión personalizado, puede especificar un nodo dedicado para ciertos usuarios

kubectl taint nodes nodename dedicated=groupName:NoSchedule

-Nodos para hardware específico

kubectl taint nodes nodename special=true:NoSchedule

-Deportación basada en la mancha

Desalojo por corrupción

En k8s 1.6+, el controlador de nodo puede agregar manchas automáticamente cuando se cumplen ciertas condiciones:

  • node.kubernetes.io/not-ready: Ready of NodeCondition es falso
  • node.kubernetes.io/unreachable: Ready of NodeCondition es desconocido
  • node.kubernetes.io/out-of-disk: el disco está a punto de agotarse
  • node.kubernetes.io/memory-pressure
  • node.kubernetes.io/disk-pressure
  • node.kubernetes.io/network-unavailable
  • node.kubernetes.io/unschedulable
  • node.cloudprovider.kubernetes.io/uninitialized

Por ejemplo, un pod no quiere ser desalojado de inmediato debido a problemas de red de nodos, espera esperar a que la red se recupere:

tolerations:
- key: "node.kubernetes.io/unreachable"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 6000

k8s del controlador de admisión DefaultTolerationSeconds agregado automáticamente como pod node.kubernetes.io/not-ready:NoExecute for 300synode.kubernetes.io/unreachable:NoExecute for 300s

Estas dos manchas de daemonset no tienen toleranciaSegundos, por lo que el grupo de ds nunca será expulsado.

Tinción de los ganglios según la condición

El controlador del ciclo de vida del nodo crea automáticamente una mancha con el efecto correspondiente como NoSchedule para la condición del nodo. El planificador no comprueba el estado del tiempo sino la mancha. Los usuarios pueden ignorar los problemas del nodo agregando tolerancia (indicado por la condición del nodo)

1.8+, el controlador DaemonSet agrega automáticamente tolerancia NoSchedule a todos los pods para evitar que sean expulsados

  • node.kubernetes.io/memory-pressure
  • node.kubernetes.io/disk-pressure
  • node.kubernetes.io/out-of-disk (solo para pods críticos)
  • node.kubernetes.io/unschedulable (1.10 o posterior)
  • node.kubernetes.io/network-unavailable (solo red de host)

Supongo que te gusta

Origin blog.csdn.net/qq_35753140/article/details/105959021
Recomendado
Clasificación