El estado Pendiente
indica que el
Pod
no se ha enviado a un determinado nodo. Debe observar el evento del
Pod
para determinar el motivo, por ejemplo
:
Las posibles causas y soluciones se enumeran a continuación.
Los recursos del nodo no son suficientes
Los recursos del nodo son insuficientes en las siguientes situaciones:
- Alta carga de CPU
- No queda suficiente memoria para asignar
- Número insuficiente de GPU disponibles restantes ( generalmente en escenarios de aprendizaje automático, entornos de clúster de GPU )
¿Cómo juzgar si un determinado
recurso de
Nodo es suficiente?
Ver nodo
a través
de kubectl describe nodo <nombre-nodo>
Recursos, preste atención a la siguiente información:
- Asignable : Indica la suma de recursos que este nodo puede solicitar
- Recursos asignados : Indica los recursos asignados por este nodo (Asignables menos la Solicitud total de todos los Pods en el nodo )
Capacity:
cpu: 2
ephemeral-storage: 9217Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 2031912Ki
pods: 110
Allocatable:
cpu: 1600m
ephemeral-storage: 9217Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1452355993
pods: 110
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 350m (21%) 0 (0%)
memory 70Mi (5%) 170Mi (12%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
El primero se resta del segundo para obtener los restantes recursos disponibles. Si este valor es menor que la
solicitud del Pod, la solicitud
del
Pod
no
se satisface .
Requerimientos de recursos, el
Programador eliminará este Nodo
en la
fase de Predicados (preselección)
, y no será programado.
No cumple con nodeSelector y afinidad
Si el Pod contiene las etiquetas que el nodeSelector especifica que el nodo debe contener , el planificador solo considerará programar el Pod para el Nodo que contiene estas etiquetas . Si no hay ningún Nodo con estas etiquetas o el Nodo con estas etiquetas no cumple otras condiciones, no se podrá programar. . Consulte la documentación oficial: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector
Si el
Pod
contiene la configuración de
afinidad
, el programador también puede calcular que no hay Nodos que cumplan las condiciones según el algoritmo de programación, por lo que no se puede programar.
Affinity
tiene las siguientes categorías
:
- nodeAffinity: afinidad de nodos, que se puede considerar como una versión mejorada de nodeSelector , que se usa para restringir los pods para que solo se programen en una determinada parte de los nodos .
- podAffinity: afinidad de Pod , que se utiliza para programar algunos Pods relacionados en el mismo lugar. El mismo lugar puede referirse al mismo nodo o nodos en la misma zona de disponibilidad.
- podAntiAffinity: antiafinidad de pod, que se usa para evitar programar un determinado tipo de pod en el mismo lugar para evitar un único punto de falla , como programar las copias de pod del servicio DNS del clúster en diferentes nodos, para evitar que un nodo se cuelgue y provoque todo el análisis de DNS del clúster falló, interrumpiendo el negocio.
[root@master ~]# kubectl get pod -n kube-system -o wide
coredns-674d655c65-k8x88 1/1 Running 0 19d 10.233.70.1 master <none> <none>
coredns-674d655c65-lg66w 1/1 Running 0 6m11s 10.233.90.1 node1 <none> <none>
coredns-674d655c65-v5hjn 1/1 Running 0 19d 10.233.70.2 master <none> <none>
[root@master ~]# kubectl get pod -n kube-system --show-labels
coredns-674d655c65-k8x88 1/1 Running 0 19d k8s-app=kube-dns,pod-template-hash=674d655c65
coredns-674d655c65-lg66w 1/1 Running 0 77s k8s-app=kube-dns,pod-template-hash=674d655c65
coredns-674d655c65-v5hjn 1/1 Running 0 19d k8s-app=kube-dns,pod-template-hash=674d655c65
template:
metadata:
creationTimestamp: null
labels:
k8s-app: kube-dns
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
k8s-app: kube-dns
topologyKey: kubernetes.io/hostname
[root@master ~]# kubectl get pod -n kube-system -o wide
kube-system coredns-76b666bbdb-kg8lp 1/1 Running 0 64s 10.233.96.1 node2 <none> <none>
kube-system coredns-76b666bbdb-lzm2x 1/1 Running 0 53s 10.233.70.4 master <none> <none>
kube-system coredns-76b666bbdb-ptzw6 1/1 Running 0 63s 10.233.90.2 node1 <none> <none>