Ce formulaire est UNIQUEMENT pour les rapports de bogues et les demandes de fonctionnalités! Si vous recherchez de l'aide, consultez [Stack Overflow] (https://stackoverflow.com/questions/tagged/kubernetes) et le [guide de dépannage] (https://kubernetes.io/docs/tasks/debug-application- cluster / dépannage /).
S'agit-il d'un rapport de bogue ou d'une demande de fonctionnalité? :
/ genre bug
Qu'est-il arrivé :
Pods bloqués pendant une longue période
Ce à quoi vous vous attendiez :
Les pods se terminent
Comment le reproduire (de la manière la plus minimale et la plus précise possible) :
Y a-t-il autre chose que nous devons savoir? :
Les pods Kubernetes sont restés bloqués en tant que Terminating
pendant quelques heures après avoir été supprimés.
Journaux:
kubectl décrire le pod my-pod-3854038851-r1hc3
Name: my-pod-3854038851-r1hc3
Namespace: container-4-production
Node: ip-172-16-30-204.ec2.internal/172.16.30.204
Start Time: Fri, 01 Sep 2017 11:58:24 -0300
Labels: pod-template-hash=3854038851
release=stable
run=my-pod-3
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"container-4-production","name":"my-pod-3-3854038851","uid":"5816c...
prometheus.io/scrape=true
Status: Terminating (expires Fri, 01 Sep 2017 14:17:53 -0300)
Termination Grace Period: 30s
IP:
Created By: ReplicaSet/my-pod-3-3854038851
Controlled By: ReplicaSet/my-pod-3-3854038851
Init Containers:
ensure-network:
Container ID: docker://guid-1
Image: XXXXX
Image ID: docker-pullable://repo/ensure-network<strong i="27">@sha256</strong>:guid-0
Port: <none>
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxxx (ro)
Containers:
container-1:
Container ID: docker://container-id-guid-1
Image: XXXXX
Image ID: docker-pullable://repo/container-1<strong i="28">@sha256</strong>:guid-2
Port: <none>
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Limits:
cpu: 100m
memory: 1G
Requests:
cpu: 100m
memory: 1G
Environment:
XXXX
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxxx (ro)
container-2:
Container ID: docker://container-id-guid-2
Image: alpine:3.4
Image ID: docker-pullable://alpine<strong i="29">@sha256</strong>:alpine-container-id-1
Port: <none>
Command:
X
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Limits:
cpu: 20m
memory: 40M
Requests:
cpu: 10m
memory: 20M
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxxx (ro)
container-3:
Container ID: docker://container-id-guid-3
Image: XXXXX
Image ID: docker-pullable://repo/container-3<strong i="30">@sha256</strong>:guid-3
Port: <none>
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Limits:
cpu: 100m
memory: 200M
Requests:
cpu: 100m
memory: 100M
Readiness: exec [nc -zv localhost 80] delay=1s timeout=1s period=5s #success=1 #failure=3
Environment:
XXXX
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxxx (ro)
container-4:
Container ID: docker://container-id-guid-4
Image: XXXX
Image ID: docker-pullable://repo/container-4<strong i="31">@sha256</strong>:guid-4
Port: 9102/TCP
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Limits:
cpu: 600m
memory: 1500M
Requests:
cpu: 600m
memory: 1500M
Readiness: http-get http://:8080/healthy delay=1s timeout=1s period=10s #success=1 #failure=3
Environment:
XXXX
Mounts:
/app/config/external from volume-2 (ro)
/data/volume-1 from volume-1 (ro)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-xxxxx (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
volume-1:
Type: Secret (a volume populated by a Secret)
SecretName: volume-1
Optional: false
volume-2:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: external
Optional: false
default-token-xxxxx:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-xxxxx
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
sudo journalctl -u kubelet | grep "mon-pod"
[...]
Sep 01 17:17:56 ip-172-16-30-204 kubelet[9619]: time="2017-09-01T17:17:56Z" level=info msg="Releasing address using workloadID" Workload=my-pod-3854038851-r1hc3
Sep 01 17:17:56 ip-172-16-30-204 kubelet[9619]: time="2017-09-01T17:17:56Z" level=info msg="Releasing all IPs with handle 'my-pod-3854038851-r1hc3'"
Sep 01 17:17:56 ip-172-16-30-204 kubelet[9619]: time="2017-09-01T17:17:56Z" level=warning msg="Asked to release address but it doesn't exist. Ignoring" Workload=my-pod-3854038851-r1hc3 workloadId=my-pod-3854038851-r1hc3
Sep 01 17:17:56 ip-172-16-30-204 kubelet[9619]: time="2017-09-01T17:17:56Z" level=info msg="Teardown processing complete." Workload=my-pod-3854038851-r1hc3 endpoint=<nil>
Sep 01 17:19:06 ip-172-16-30-204 kubelet[9619]: I0901 17:19:06.591946 9619 kubelet.go:1824] SyncLoop (DELETE, "api"):my-pod-3854038851(b8cf2ecd-8f25-11e7-ba86-0a27a44c875)"
sudo journalctl -u docker | grep "id-docker-pour-mon-pod"
Sep 01 17:17:55 ip-172-16-30-204 dockerd[9385]: time="2017-09-01T17:17:55.695834447Z" level=error msg="Handler for POST /v1.24/containers/docker-id-for-my-pod/stop returned error: Container docker-id-for-my-pod is already stopped"
Sep 01 17:17:56 ip-172-16-30-204 dockerd[9385]: time="2017-09-01T17:17:56.698913805Z" level=error msg="Handler for POST /v1.24/containers/docker-id-for-my-pod/stop returned error: Container docker-id-for-my-pod is already stopped"
Environnement :
kubectl version
):Fournisseur de cloud ou configuration matérielle **:
AWS
OS (par exemple à partir de / etc / os-release):
NAME = "CentOS Linux"
VERSION = "7 (Core)"
ID = "centos"
ID_LIKE = "rhel fedora"
VERSION_ID = "7"
PRETTY_NAME = "CentOS Linux 7 (Core)"
ANSI_COLOR = "0; 31"
CPE_NAME = "cpe: / o: centos: centos : 7"
HOME_URL = " https://www.centos.org/ "
BUG_REPORT_URL = " https://bugs.centos.org/ "
CENTOS_MANTISBT_PROJECT = "CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION = "7"
REDHAT_SUPPORT_PRODUCT = "centos"
REDHAT_SUPPORT_PRODUCT_VERSION = "7"
Noyau (par exemple uname -a
):
Linux ip-172-16-30-204 3.10.0-327.10.1.el7.x86_64 # 1 SMP mar 16 février 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
Installer les outils:
Kops
Autres:
Docker version 1.12.6, build 78d1802
@ kubernetes / sig-aws @ kubernetes / sig-scheduling
@ kubernetes / sig-aws @ kubernetes / sig-scheduling
Le nettoyage du volume et du réseau prend généralement plus de temps lors de la terminaison. Pouvez-vous trouver dans quelle phase votre pod est bloqué? Nettoyage de volume par exemple?
Le nettoyage du volume et du réseau prend généralement plus de temps lors de la terminaison.
Correct. Ils sont toujours suspects.
@igorleao Vous pouvez également essayer kubectl delete pod xxx --now
.
Salut @resouer et @dixudx
Je ne suis pas sûr. En regardant les journaux kubelet pour un pod différent avec le même problème, j'ai trouvé:
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: time="2017-09-02T15:31:57Z" level=info msg="Releasing address using workloadID" Workload=my-pod-969733955-rbxhn
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: time="2017-09-02T15:31:57Z" level=info msg="Releasing all IPs with handle 'my-pod-969733955-rbxhn'"
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: time="2017-09-02T15:31:57Z" level=warning msg="Asked to release address but it doesn't exist. Ignoring" Workload=my-pod-969733955-rbxhn workloadId=my-pod-969733955-rbxhn
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: time="2017-09-02T15:31:57Z" level=info msg="Teardown processing complete." Workload=my-pod-969733955-rbxhn endpoint=<nil>
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: I0902 15:31:57.496132 9620 qos_container_manager_linux.go:285] [ContainerManager]: Updated QoS cgroup configuration
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: I0902 15:31:57.968147 9620 reconciler.go:201] UnmountVolume operation started for volume "kubernetes.io/secret/GUID-default-token-wrlv3" (spec.Name: "default-token-wrlv3") from pod "GUID" (UID: "GUID").
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: I0902 15:31:57.968245 9620 reconciler.go:201] UnmountVolume operation started for volume "kubernetes.io/secret/GUID-token-key" (spec.Name: "token-key") from pod "GUID" (UID: "GUID").
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: E0902 15:31:57.968537 9620 nestedpendingoperations.go:262] Operation for "\"kubernetes.io/secret/GUID-token-key\" (\"GUID\")" failed. No retries permitted until 2017-09-02 15:31:59.968508761 +0000 UTC (durationBeforeRetry 2s). Error: UnmountVolume.TearDown failed for volume "kubernetes.io/secret/GUID-token-key" (volume.spec.Name: "token-key") pod "GUID" (UID: "GUID") with: rename /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/token-key /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/wrapped_token-key.deleting~818780979: device or resource busy
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: E0902 15:31:57.968744 9620 nestedpendingoperations.go:262] Operation for "\"kubernetes.io/secret/GUID-default-token-wrlv3\" (\"GUID\")" failed. No retries permitted until 2017-09-02 15:31:59.968719924 +0000 UTC (durationBeforeRetry 2s). Error: UnmountVolume.TearDown failed for volume "kubernetes.io/secret/GUID-default-token-wrlv3" (volume.spec.Name: "default-token-wrlv3") pod "GUID" (UID: "GUID") with: rename /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/default-token-wrlv3 /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/wrapped_default-token-wrlv3.deleting~940140790: device or resource busy
--
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778742 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_default-token-wrlv3.deleting~940140790" (spec.Name: "wrapped_default-token-wrlv3.deleting~940140790") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778753 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~850807831" (spec.Name: "wrapped_token-key.deleting~850807831") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778764 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~413655961" (spec.Name: "wrapped_token-key.deleting~413655961") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778774 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~818780979" (spec.Name: "wrapped_token-key.deleting~818780979") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778784 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~348212189" (spec.Name: "wrapped_token-key.deleting~348212189") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778796 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~848395852" (spec.Name: "wrapped_token-key.deleting~848395852") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778808 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_default-token-wrlv3.deleting~610264100" (spec.Name: "wrapped_default-token-wrlv3.deleting~610264100") devicePath: ""
Sep 02 15:33:04 ip-172-16-30-208 kubelet[9620]: I0902 15:33:04.778820 9620 reconciler.go:363] Detached volume "kubernetes.io/secret/GUID-wrapped_token-key.deleting~960022821" (spec.Name: "wrapped_token-key.deleting~960022821") devicePath: ""
Sep 02 15:33:05 ip-172-16-30-208 kubelet[9620]: I0902 15:33:05.081380 9620 server.go:778] GET /stats/summary/: (37.027756ms) 200 [[Go-http-client/1.1] 10.0.46.202:54644]
Sep 02 15:33:05 ip-172-16-30-208 kubelet[9620]: I0902 15:33:05.185367 9620 operation_generator.go:597] MountVolume.SetUp succeeded for volume "kubernetes.io/secret/GUID-calico-token-w8tzx" (spec.Name: "calico-token-w8tzx") pod "GUID" (UID: "GUID").
Sep 02 15:33:07 ip-172-16-30-208 kubelet[9620]: I0902 15:33:07.187953 9620 kubelet.go:1824] SyncLoop (DELETE, "api"): "my-pod-969733955-rbxhn_container-4-production(GUID)"
Sep 02 15:33:13 ip-172-16-30-208 kubelet[9620]: I0902 15:33:13.879940 9620 aws.go:937] Could not determine public DNS from AWS metadata.
Sep 02 15:33:20 ip-172-16-30-208 kubelet[9620]: I0902 15:33:20.736601 9620 server.go:778] GET /metrics: (53.063679ms) 200 [[Prometheus/1.7.1] 10.0.46.198:43576]
Sep 02 15:33:23 ip-172-16-30-208 kubelet[9620]: I0902 15:33:23.898078 9620 aws.go:937] Could not determine public DNS from AWS metadata.
Comme vous pouvez le voir, ce cluster a Calico pour CNI.
Les lignes suivantes attirent mon attention:
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: I0902 15:31:57.968245 9620 reconciler.go:201] UnmountVolume operation started for volume "kubernetes.io/secret/GUID-token-key" (spec.Name: "token-key") from pod "GUID" (UID: "GUID").
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: E0902 15:31:57.968537 9620 nestedpendingoperations.go:262] Operation for "\"kubernetes.io/secret/GUID-token-key\" (\"GUID\")" failed. No retries permitted until 2017-09-02 15:31:59.968508761 +0000 UTC (durationBeforeRetry 2s). Error: UnmountVolume.TearDown failed for volume "kubernetes.io/secret/GUID-token-key" (volume.spec.Name: "token-key") pod "GUID" (UID: "GUID") with: rename /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/token-key /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/wrapped_token-key.deleting~818780979: device or resource busy
Sep 02 15:31:57 ip-172-16-30-208 kubelet[9620]: E0902 15:31:57.968744 9620 nestedpendingoperations.go:262] Operation for "\"kubernetes.io/secret/GUID-default-token-wrlv3\" (\"GUID\")" failed. No retries permitted until 2017-09-02 15:31:59.968719924 +0000 UTC (durationBeforeRetry 2s). Error: UnmountVolume.TearDown failed for volume "kubernetes.io/secret/GUID-default-token-wrlv3" (volume.spec.Name: "default-token-wrlv3") pod "GUID" (UID: "GUID") with: rename
Existe-t-il un meilleur moyen de savoir à quelle phase un pod est bloqué?
kubectl delete pod xxx --now
semble fonctionner plutôt bien, mais je souhaite vraiment découvrir sa cause profonde et éviter les interactions humaines.
rename /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/token-key /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/wrapped_token-key.deleting~818780979: device or resource busy
Il semble que kubelet/mount
n'a pas réussi à monter configmap en tant que volume en raison d'un changement de nom de fichier.
@igorleao Est-ce reproductible? Ou ce n'est tout simplement pas si stable, cela se produit parfois. J'ai déjà rencontré de telles erreurs, juste pour m'en assurer.
@dixudx cela se produit plusieurs fois par jour pour un certain cluster. D'autres clusters créés avec la même version de kops et kubernetes, dans la même semaine, fonctionnent très bien.
@igorleao Comme le journal montre que le gestionnaire de volumes n'a pas réussi à supprimer le répertoire secret car le périphérique est occupé.
Pouvez-vous s'il vous plaît vérifier si le répertoire /var/lib/kubelet/pods/GUID/volumes/kubernetes.io~secret/token-key est toujours monté ou non? Merci!
@igorleao comment
Nous constatons un comportement similaire. Nous exécutons kubelet en tant que conteneur et le problème a été partiellement atténué en montant /var/lib/kubelet
comme partagé (par défaut, docker monte le volume en tant que rslave). Mais nous voyons toujours des problèmes similaires, mais moins fréquents. Actuellement, je soupçonne que d'autres montages devraient être faits de manière différente (par exemple /var/lib/docker
ou /rootfs
)
@stormltf Pouvez-vous s'il vous plaît publier la configuration de votre conteneur kubelet?
@stormltf vous exécutez kubelet dans un conteneur et n'utilisez pas le drapeau --containerized
(qui fait quelques astuces avec les montages ). Ce qui signifie essentiellement que tous les montages effectués par kubelet seront effectués dans l'espace de noms de montage du conteneur. Heureusement qu'ils seront proposés à nouveau dans l'espace de noms de la machine hôte (comme vous avez / var / lib / kubelet comme partagé), mais je ne suis pas sûr de ce qui se passe si l'espace de noms est supprimé (lorsque le conteneur kubelet est supprimé).
Pouvez-vous s'il vous plaît pour les pods bloqués faire ce qui suit:
sur le nœud sur lequel le pod s'exécute
docker exec -ti /kubelet /bin/bash -c "mount | grep STUCK_POD_UUID"
mount | grep STUCK_POD_UUID
.Veuillez également faire de même pour le pod fraîchement créé. Je m'attends à voir des montages /var/lib/kubelet
(par exemple, default-secret)
@stormltf avez-vous redémarré kubelet après la création des deux premiers pods?
@stormltf Vous pouvez essayer de faire en sorte que /var/lib/docker
et /rootfs
soient partagés (ce que je ne vois pas dans votre docker inspect, mais voir à l'intérieur du conteneur) mountpoint.
/ sig stockage
Pour certains, cela pourrait aider. Nous exécutons kubelet dans un conteneur docker avec l'indicateur --containerized
et avons pu résoudre ce problème en montant /rootfs
, /var/lib/docker
et /var/lib/kubelet
tant que montages partagés. Les montures finales ressemblent à ceci
-v /:/rootfs:ro,shared \
-v /sys:/sys:ro \
-v /dev:/dev:rw \
-v /var/log:/var/log:rw \
-v /run/calico/:/run/calico/:rw \
-v /run/docker/:/run/docker/:rw \
-v /run/docker.sock:/run/docker.sock:rw \
-v /usr/lib/os-release:/etc/os-release \
-v /usr/share/ca-certificates/:/etc/ssl/certs \
-v /var/lib/docker/:/var/lib/docker:rw,shared \
-v /var/lib/kubelet/:/var/lib/kubelet:rw,shared \
-v /etc/kubernetes/ssl/:/etc/kubernetes/ssl/ \
-v /etc/kubernetes/config/:/etc/kubernetes/config/ \
-v /etc/cni/net.d/:/etc/cni/net.d/ \
-v /opt/cni/bin/:/opt/cni/bin/ \
Pour plus de détails. Cela ne résout pas correctement le problème car pour chaque montage lié, vous obtiendrez 3 montures à l'intérieur du conteneur kubelet (2 parasites). Mais au moins une monture partagée permet de les démonter facilement d'un seul coup.
CoreOS n'a pas ce problème. Parce que l'utilisation de rkt et non de docker pour le conteneur kubelet. Dans le cas où notre cas kubelet fonctionnerait dans Docker et que chaque montage à l'intérieur de kubelet continer serait proposé dans /var/lib/docker/overlay/...
et /rootfs
c'est pourquoi nous avons deux montages parasites pour chaque volume de montage bind:
/rootfs
en /rootfs/var/lib/kubelet/<mount>
/var/lib/docker
en /var/lib/docker/overlay/.../rootfs/var/lib/kubelet/<mount>
-v /dev:/dev:rw
-v /etc/cni:/etc/cni:ro
-v /opt/cni:/opt/cni:ro
-v /etc/ssl:/etc/ssl:ro
-v /etc/resolv.conf:/etc/resolv.conf
-v /etc/pki/tls:/etc/pki/tls:ro
-v /etc/pki/ca-trust:/etc/pki/ca-trust:ro
-v /sys:/sys:ro
-v /var/lib/docker:/var/lib/docker:rw
-v /var/log:/var/log:rw
-v /var/lib/kubelet:/var/lib/kubelet:shared
-v /var/lib/cni:/var/lib/cni:shared
-v /var/run:/var/run:rw
-v /www:/www:rw
-v /etc/kubernetes:/etc/kubernetes:ro
-v /etc/os-release:/etc/os-release:ro
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
J'ai le même problème avec Kubernetes 1.8.1 sur Azure - une fois le déploiement modifié et les nouveaux pods démarrés, les anciens pods sont bloqués à la fin.
J'ai le même problème sur Kubernetes 1.8.2 sur IBM Cloud. Une fois les nouveaux pods démarrés, les anciens pods sont bloqués en se terminant.
version kubectl
Server Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.2-1+d150e4525193f1", GitCommit:"d150e4525193f1c79569c04efc14599d7deb5f3e", GitTreeState:"clean", BuildDate:"2017-10-27T08:15:17Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
J'ai utilisé kubectl delete pod xxx --now
ainsi que kubectl delete pod foo --grace-period=0 --force
en vain.
Si la cause principale est toujours la même (montages mal proposés), il s'agit d'un bogue spécifique à la distribution imo.
Veuillez décrire comment vous exécutez kubelet dans le cloud IBM? unité systemd? a-t-il --containerized
drapeau
il est exécuté avec l'option --containerized définie sur false.
systemctl status kubelet.service
kubelet.service - Kubernetes Kubelet
Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2017-11-19 21:48:48 UTC; 4 days ago
- drapeau conteneurisé: Non
ok, j'ai besoin de plus d'informations, veuillez consulter mon commentaire ci-dessus https://github.com/kubernetes/kubernetes/issues/51835#issuecomment -333090349
et s'il vous plaît également montrer le contenu de /lib/systemd/system/kubelet.service
et s'il y a quelque chose à propos de kubelet dans /etc/systemd/system
veuillez partager aussi.
En particulier, si kubelet fonctionne dans le docker, je veux voir tous les montages de liaison -v
.
Aujourd'hui, j'ai rencontré un problème qui peut être le même que celui décrit, où nous avons eu des pods sur l'un de nos systèmes clients bloqués dans l'état de terminaison pendant plusieurs jours. Nous voyions également les erreurs "Erreur: UnmountVolume.TearDown a échoué pour le volume" avec "périphérique ou ressource occupé" répété pour chacun des pods bloqués.
Dans notre cas, il semble y avoir un problème avec docker sur les systèmes basés sur RHEL / Centos 7.4 couvert dans ce problème moby: https://github.com/moby/moby/issues/22260 et ce moby PR: https: // github .com / moby / moby / pull / 34886 / fichiers
Pour nous, une fois que nous avons défini l'option sysctl fs.may_detach_mounts = 1 en quelques minutes, tous nos pods de terminaison ont été nettoyés.
Je suis également confronté à ce problème: les pods sont restés bloqués dans l'état de terminaison sur 1.8.3.
Journaux kubelet pertinents du nœud:
Nov 28 22:48:51 <my-node> kubelet[1010]: I1128 22:48:51.616749 1010 reconciler.go:186] operationExecutor.UnmountVolume started for volume "nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" (UniqueName: "kubernetes.io/nfs/58dc413c-d4d1-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw") pod "58dc413c-d4d1-11e7-870d-3c970e298d91" (UID: "58dc413c-d4d1-11e7-870d-3c970e298d91")
Nov 28 22:48:51 <my-node> kubelet[1010]: W1128 22:48:51.616762 1010 util.go:112] Warning: "/var/lib/kubelet/pods/58dc413c-d4d1-11e7-870d-3c970e298d91/volumes/kubernetes.io~nfs/nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" is not a mountpoint, deleting
Nov 28 22:48:51 <my-node> kubelet[1010]: E1128 22:48:51.616828 1010 nestedpendingoperations.go:264] Operation for "\"kubernetes.io/nfs/58dc413c-d4d1-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw\" (\"58dc413c-d4d1-11e7-870d-3c970e298d91\")" failed. No retries permitted until 2017-11-28 22:48:52.616806562 -0800 PST (durationBeforeRetry 1s). Error: UnmountVolume.TearDown failed for volume "nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" (UniqueName: "kubernetes.io/nfs/58dc413c-d4d1-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw") pod "58dc413c-d4d1-11e7-870d-3c970e298d91" (UID: "58dc413c-d4d1-11e7-870d-3c970e298d91") : remove /var/lib/kubelet/pods/58dc413c-d4d1-11e7-870d-3c970e298d91/volumes/kubernetes.io~nfs/nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw: directory not empty
Nov 28 22:48:51 <my-node> kubelet[1010]: W1128 22:48:51.673774 1010 docker_sandbox.go:343] failed to read pod IP from plugin/docker: NetworkPlugin cni failed on the status hook for pod "<pod>": CNI failed to retrieve network namespace path: Cannot find network namespace for the terminated container "f58ab11527aef5133bdb320349fe14fd94211aa0d35a1da006aa003a78ce0653"
Kubelet s'exécute en tant qu'unité systemd (pas dans le conteneur) sur Ubuntu 16.04.
Comme vous pouvez le voir, il y a eu un montage sur le serveur NFS et kubelet a tenté de supprimer le répertoire de montage car il considère ce répertoire comme non monté.
Spécifications des volumes du pod:
volumes:
- name: nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw
nfs:
path: /<path>
server: <IP>
- name: default-token-rzqtt
secret:
defaultMode: 420
secretName: default-token-rzqtt
UPD : J'ai déjà rencontré ce problème avant aussi sur 1.6.6
Vivre la même chose sur Azure.
NAME READY STATUS RESTARTS AGE IP NODE
busybox2-7db6d5d795-fl6h9 0/1 Terminating 25 1d 10.200.1.136 worker-1
busybox3-69d4f5b66c-2lcs6 0/1 Terminating 26 1d <none> worker-2
busybox7-797cc644bc-n5sv2 0/1 Terminating 26 1d <none> worker-2
busybox8-c8f95d979-8lk27 0/1 Terminating 25 1d 10.200.1.137 worker-1
nginx-56ccc998dd-hvpng 0/1 Terminating 0 2h <none> worker-1
nginx-56ccc998dd-nnsvj 0/1 Terminating 0 2h <none> worker-2
nginx-56ccc998dd-rsrvq 0/1 Terminating 0 2h <none> worker-1
version kubectl
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:57:57Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
décrire le pod nginx-56ccc998dd-nnsvj
Name: nginx-56ccc998dd-nnsvj
Namespace: default
Node: worker-2/10.240.0.22
Start Time: Wed, 29 Nov 2017 13:33:39 +0400
Labels: pod-template-hash=1277755488
run=nginx
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"nginx-56ccc998dd","uid":"614f71db-d4e8-11e7-9c45-000d3a25e3c0","...
Status: Terminating (expires Wed, 29 Nov 2017 15:13:44 +0400)
Termination Grace Period: 30s
IP:
Created By: ReplicaSet/nginx-56ccc998dd
Controlled By: ReplicaSet/nginx-56ccc998dd
Containers:
nginx:
Container ID: containerd://d00709dfb00ed5ac99dcd092978e44fc018f44cca5229307c37d11c1a4fe3f07
Image: nginx:1.12
Image ID: docker.io/library/nginx<strong i="12">@sha256</strong>:5269659b61c4f19a3528a9c22f9fa8f4003e186d6cb528d21e411578d1e16bdb
Port: <none>
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-jm7h5 (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
default-token-jm7h5:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-jm7h5
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Killing 41m kubelet, worker-2 Killing container with id containerd://nginx:Need to kill Pod
sudo journalctl -u kubelet | grep "nginx-56ccc998dd-nnsvj"
Nov 29 09:33:39 worker-2 kubelet[64794]: I1129 09:33:39.124779 64794 kubelet.go:1837] SyncLoop (ADD, "api"): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)"
Nov 29 09:33:39 worker-2 kubelet[64794]: I1129 09:33:39.160444 64794 reconciler.go:212] operationExecutor.VerifyControllerAttachedVolume started for volume "default-token-jm7h5" (UniqueName: "kubernetes.io/secret/6171e2a7-d4e8-11e7-9c45-000d3a25e3c0-default-token-jm7h5") pod "nginx-56ccc998dd-nnsvj" (UID: "6171e2a7-d4e8-11e7-9c45-000d3a25e3c0")
Nov 29 09:33:39 worker-2 kubelet[64794]: I1129 09:33:39.261128 64794 reconciler.go:257] operationExecutor.MountVolume started for volume "default-token-jm7h5" (UniqueName: "kubernetes.io/secret/6171e2a7-d4e8-11e7-9c45-000d3a25e3c0-default-token-jm7h5") pod "nginx-56ccc998dd-nnsvj" (UID: "6171e2a7-d4e8-11e7-9c45-000d3a25e3c0")
Nov 29 09:33:39 worker-2 kubelet[64794]: I1129 09:33:39.286574 64794 operation_generator.go:484] MountVolume.SetUp succeeded for volume "default-token-jm7h5" (UniqueName: "kubernetes.io/secret/6171e2a7-d4e8-11e7-9c45-000d3a25e3c0-default-token-jm7h5") pod "nginx-56ccc998dd-nnsvj" (UID: "6171e2a7-d4e8-11e7-9c45-000d3a25e3c0")
Nov 29 09:33:39 worker-2 kubelet[64794]: I1129 09:33:39.431485 64794 kuberuntime_manager.go:370] No sandbox for pod "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)" can be found. Need to start a new one
Nov 29 09:33:42 worker-2 kubelet[64794]: I1129 09:33:42.449592 64794 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerStarted", Data:"0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af"}
Nov 29 09:33:47 worker-2 kubelet[64794]: I1129 09:33:47.637988 64794 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerStarted", Data:"d00709dfb00ed5ac99dcd092978e44fc018f44cca5229307c37d11c1a4fe3f07"}
Nov 29 11:13:14 worker-2 kubelet[64794]: I1129 11:13:14.468137 64794 kubelet.go:1853] SyncLoop (DELETE, "api"): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)"
Nov 29 11:13:14 worker-2 kubelet[64794]: E1129 11:13:14.711891 64794 kuberuntime_manager.go:840] PodSandboxStatus of sandbox "0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af" for pod "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)" error: rpc error: code = Unknown desc = failed to get task status for sandbox container "0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af": process id 0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af not found: not found
Nov 29 11:13:14 worker-2 kubelet[64794]: E1129 11:13:14.711933 64794 generic.go:241] PLEG: Ignoring events for pod nginx-56ccc998dd-nnsvj/default: rpc error: code = Unknown desc = failed to get task status for sandbox container "0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af": process id 0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af not found: not found
Nov 29 11:13:15 worker-2 kubelet[64794]: I1129 11:13:15.788179 64794 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerDied", Data:"d00709dfb00ed5ac99dcd092978e44fc018f44cca5229307c37d11c1a4fe3f07"}
Nov 29 11:13:15 worker-2 kubelet[64794]: I1129 11:13:15.788221 64794 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerDied", Data:"0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af"}
Nov 29 11:46:45 worker-2 kubelet[42337]: I1129 11:46:45.384411 42337 kubelet.go:1837] SyncLoop (ADD, "api"): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0), kubernetes-dashboard-7486b894c6-2xmd5_kube-system(e55ca22c-d416-11e7-9c45-000d3a25e3c0), busybox3-69d4f5b66c-2lcs6_default(adb05024-d412-11e7-9c45-000d3a25e3c0), kube-dns-7797cb8758-zblzt_kube-system(e925cbec-d40b-11e7-9c45-000d3a25e3c0), busybox7-797cc644bc-n5sv2_default(b7135a8f-d412-11e7-9c45-000d3a25e3c0)"
Nov 29 11:46:45 worker-2 kubelet[42337]: I1129 11:46:45.387169 42337 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerDied", Data:"d00709dfb00ed5ac99dcd092978e44fc018f44cca5229307c37d11c1a4fe3f07"}
Nov 29 11:46:45 worker-2 kubelet[42337]: I1129 11:46:45.387245 42337 kubelet.go:1871] SyncLoop (PLEG): "nginx-56ccc998dd-nnsvj_default(6171e2a7-d4e8-11e7-9c45-000d3a25e3c0)", event: &pleg.PodLifecycleEvent{ID:"6171e2a7-d4e8-11e7-9c45-000d3a25e3c0", Type:"ContainerDied", Data:"0f539a84b96814651bb199e91f71157bc90c6e0c26340001c3f1c9f7bd9165af"}
cat /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=cri-containerd.service
Requires=cri-containerd.service
[Service]
ExecStart=/usr/local/bin/kubelet \
--allow-privileged=true \
--anonymous-auth=false \
--authorization-mode=Webhook \
--client-ca-file=/var/lib/kubernetes/ca.pem \
--cluster-dns=10.32.0.10 \
--cluster-domain=cluster.local \
--container-runtime=remote \
--container-runtime-endpoint=unix:///var/run/cri-containerd.sock \
--image-pull-progress-deadline=2m \
--kubeconfig=/var/lib/kubelet/kubeconfig \
--network-plugin=cni \
--pod-cidr=10.200.2.0/24 \
--register-node=true \
--require-kubeconfig \
--runtime-request-timeout=15m \
--tls-cert-file=/var/lib/kubelet/worker-2.pem \
--tls-private-key-file=/var/lib/kubelet/worker-2-key.pem \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Il semble qu'il existe différents bogues liés à un problème. Nous avons les deux sur notre cluster 1.8.3.
Error: UnmountVolume.TearDown failed for volume "nfs-test" (UniqueName: "kubernetes.io/nfs/39dada78-d9cc-11e7-870d-3c970e298d91-nfs-test") pod "39dada78-d9cc-11e7-870d-3c970e298d91" (UID: "39dada78-d9cc-11e7-870d-3c970e298d91") : remove /var/lib/kubelet/pods/39dada78-d9cc-11e7-870d-3c970e298d91/volumes/kubernetes.io~nfs/nfs-test: directory not empty
Et c'est vrai que le répertoire n'est pas vide, il est démonté et contient notre répertoire "sous-chemin"!
L'une des explications d'un tel comportement:
Plus de journaux:
Dec 5 15:57:08 ASRock kubelet[2941]: I1205 15:57:08.333877 2941 reconciler.go:212] operationExecutor.VerifyControllerAttachedVolume started for volume "nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" (UniqueName: "kubernetes.io/nfs/005b4bb9-da18-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw") pod "test-df5d868fc-sclj5" (UID: "005b4bb9-da18-11e7-870d-3c970e298d91")
Dec 5 15:57:08 ASRock systemd[1]: Started Kubernetes transient mount for /var/lib/kubelet/pods/005b4bb9-da18-11e7-870d-3c970e298d91/volumes/kubernetes.io~nfs/nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw.
Dec 5 15:57:12 ASRock kubelet[2941]: I1205 15:57:12.266404 2941 reconciler.go:186] operationExecutor.UnmountVolume started for volume "nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" (UniqueName: "kubernetes.io/nfs/005b4bb9-da18-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw") pod "005b4bb9-da18-11e7-870d-3c970e298d91" (UID: "005b4bb9-da18-11e7-870d-3c970e298d91")
Dec 5 15:57:12 ASRock kubelet[2941]: E1205 15:57:12.387179 2941 nestedpendingoperations.go:264] Operation for "\"kubernetes.io/nfs/005b4bb9-da18-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw\" (\"005b4bb9-da18-11e7-870d-3c970e298d91\")" failed. No retries permitted until 2017-12-05 15:57:12.887062059 -0800 PST (durationBeforeRetry 500ms). Error: UnmountVolume.TearDown failed for volume "nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw" (UniqueName: "kubernetes.io/nfs/005b4bb9-da18-11e7-870d-3c970e298d91-nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw") pod "005b4bb9-da18-11e7-870d-3c970e298d91" (UID: "005b4bb9-da18-11e7-870d-3c970e298d91") : remove /var/lib/kubelet/pods/005b4bb9-da18-11e7-870d-3c970e298d91/volumes/kubernetes.io~nfs/nfs-mtkylje2oc4xlju1ls9rdwjlcmxhyi1ydw: directory not empty
En quelque sorte, un processus de nettoyage ((dswp * desireStateOfWorldPopulator) findAndRemoveDeletedPods ()) démarre le démontage des volumes alors que le pod est dans l'état d'initialisation:
Dec 6 14:40:20 ASRock kubelet[15875]: I1206 14:40:20.620655 15875 kubelet_pods.go:886] Pod "test-84cd5ff8dc-kpv7b_4281-kuberlab-test(6e99a8df-dad6-11e7-b35c-3c970e298d91)" is terminated, but some volumes have not been cleaned up
Dec 6 14:40:20 ASRock kubelet[15875]: I1206 14:40:20.686449 15875 kubelet_pods.go:1730] Orphaned pod "6e99a8df-dad6-11e7-b35c-3c970e298d91" found, but volumes not yet removed
Dec 6 14:40:20 ASRock kubelet[15875]: I1206 14:40:20.790719 15875 kuberuntime_container.go:100] Generating ref for container test: &v1.ObjectReference{Kind:"Pod", Namespace:"4281-kuberlab-test", Name:"test-84cd5ff8dc-kpv7b", UID:"6e99a8df-dad6-11e7-b35c-3c970e298d91", APIVersion:"v1", ResourceVersion:"2639758", FieldPath:"spec.containers{test}"}
Dec 6 14:40:20 ASRock kubelet[15875]: I1206 14:40:20.796643 15875 docker_service.go:407] Setting cgroup parent to: "/kubepods/burstable/pod6e99a8df-dad6-11e7-b35c-3c970e298d91"
L'initialisation et la suppression du pod s'exécutent en même temps.
Pour répéter avec bogue, vous devez démarrer et supprimer / mettre à jour immédiatement environ 10 déploiements (testés pour un seul minion) et peut-être que votre opération de montage ne doit pas être très rapide.
Affecté par le même bug sur GKE. Existe-t-il des solutions de contournement connues pour ce problème? L'utilisation de --now
ne fonctionne pas.
J'ai un correctif pour ce bogue, mais je ne suis pas sûr qu'il sera fusionné par l'équipe kubernetes.
@dreyk Pourriez-vous s'il vous plaît fournir plus de détails sur ce que vous avez découvert pour ce bogue et quel est votre correctif afin que l'équipe de stockage puisse y jeter un œil? Merci!
@ gm42 J'ai pu contourner manuellement ce problème sur GKE en:
docker ps | grep {pod name}
pour obtenir l'ID du conteneur Dockerdocker rm -f {container id}
Sur GKE, la mise à niveau des nœuds a aidé instantanément.
J'ai le même bogue sur mon cluster local configuré en utilisant kubeadm
.
docker ps | grep {pod name}
sur le nœud ne montre rien et le pod est bloqué dans l'état de fin. J'ai actuellement deux pods dans cet état.
Que puis-je faire pour supprimer de force le pod? Ou peut-être changer le nom du pod? Je ne peux pas faire tourner un autre pod sous le même nom. Merci!
J'ai trouvé la raison dans mon cluster 1.7.2,
car un autre programme de surveillance monte le chemin racine /
le chemin racine contient /var/lib/kubelet/pods/ddc66e10-0711-11e8-b905-6c92bf70b164/volumes/kubernetes.io~secret/default-token-bnttf
Ainsi, lorsque kubelet supprime le pod, mais qu'il ne peut pas libérer le volume, le message est:
Périphérique ou ressource occupé
pas:
1) sudo journalctl -u kubelet
ce shell m'aide à trouver le message d'erreur,
2) sudo docker inspecter
recherchez le io.kubernetes.pod.uid ":" ddc66e10-0711-11e8-b905-6c92bf70b164 "
et
HostConfig -> Binds -> "/var/lib/kubelet/pods/ddc66e10-0711-11e8-b905-6c92bf70b164/volumes/kubernetes.io~secret/default-token-bnttf:/var/run/secrets/kubernetes .io / servi ceaccount: ro "
3) grep -l ddc66e10-0711-11e8-b905-6c92bf70b164 / proc / * / mountinfo
/ proc / 90225 / mountinfo
5) ps aux | grep 90225
racine 90225 1,3 0,0 2837164 42580? Ssl Feb01 72:40 ./monitor_program
J'ai le même bug sur ma 1.7.2
operationExecutor.UnmountVolume a démarré pour le volume "default-token-bnttf" (UniqueName: "kubernetes.io/secret/ddc66e10-0711-11e8-b905-6c92bf70b164-default-token-bnttf") pod "ddc66e10-0711-11e8-b90 6c92bf70b164 "kubelet [94382]: E0205 11: 35: 50.509169 94382 nestedpendingoperations.go: 262] Opération pour" \ "kubernetes.io/secret/ddc66e10-0711-11e8-b905-6c92en-bf70b164-deftt-tf (\" "ddc66e10-0711-11e8-b905-6c92bf70b164 \") "a échoué. Aucune nouvelle tentative n'est autorisée jusqu'au 05/02/2018 11: 37: 52.509148953 +0800 CST (durationBeforeRetry 2m2s). Erreur: UnmountVolume.TearDown a échoué pour le volume "default-token-bnttf" (UniqueName: "kubernetes.io/secret/ddc66e10-0711-11e8-b905-6c92bf70b164-default-token-bnttf") pod "ddc66e10-0711-11e8- b905-6c92bf70b164 "(UID:" ddc66e10-0711-11e8-b905-6c92bf70b164 "): remove /var/lib/kubelet/pods/ddc66e10-0711-11e8-b905-6c92bf70b164/volumes/subernetes/subernetes token-bnttf: périphérique ou ressource occupé
Le redémarrage du service Docker libère le verrou et les pods sont supprimés en quelques minutes. C'est un bug. Utilisation de docker 17.03
Même problème ici sur Azure, Kube 1.8.7
Cela nous est arrivé il y a quelques minutes aussi sur 1.8.9 - quelqu'un cherche à résoudre ce problème? Le redémarrage de docker aide, mais c'est un peu ridicule.
Cela m'est souvent arrivé avec la dernière version 1.9.4 sur GKE. Je fais ça pour le moment:
kubectl delete pod NAME --grace-period=0 --force
Même problème ici sur GKE 1.9.4-gke.1
semble être lié aux montages de volume.
Cela se produit à chaque fois que filebeats est configuré comme décrit ici:
https://github.com/elastic/beats/tree/master/deploy/kubernetes/filebeat
Le journal Kubelet montre ceci:
Mar 23 19:44:16 gke-testing-c2m4-1-97b57429-40jp kubelet[1361]: I0323 19:44:16.380949 1361 reconciler.go:191] operationExecutor.UnmountVolume started for volume "config" (UniqueName: "kubernetes.io/configmap/9a5f1519-2d39-11e8-bec8-42010a8400f3-config") pod "9a5f1519-2d39-11e8-bec8-42010a8400f3" (UID: "9a5f1519-2d39-11e8-bec8-42010a8400f3")
Mar 23 19:44:16 gke-testing-c2m4-1-97b57429-40jp kubelet[1361]: E0323 19:44:16.382032 1361 nestedpendingoperations.go:263] Operation for "\"kubernetes.io/configmap/9a5f1519-2d39-11e8-bec8-42010a8400f3-config\" (\"9a5f1519-2d39-11e8-bec8-42010a8400f3\")" failed. No retries permitted until 2018-03-23 19:44:32.381982706 +0000 UTC m=+176292.263058344 (durationBeforeRetry 16s). Error: "error cleaning subPath mounts for volume \"config\" (UniqueName: \"kubernetes.io/configmap/9a5f1519-2d39-11e8-bec8-42010a8400f3-config\") pod \"9a5f1519-2d39-11e8-bec8-42010a8400f3\" (UID: \"9a5f1519-2d39-11e8-bec8-42010a8400f3\") : error checking /var/lib/kubelet/pods/9a5f1519-2d39-11e8-bec8-42010a8400f3/volume-subpaths/config/filebeat/0 for mount: lstat /var/lib/kubelet/pods/9a5f1519-2d39-11e8-bec8-42010a8400f3/volume-ubpaths/config/filebeat/0/..: not a directory"
kubectl delete pod NAME --grace-period=0 --force
semble fonctionner.
également le redémarrage de kubelet fonctionne.
Même problème ici sur GKE 1.9.4-gke.1
Cela n'arrive qu'avec un ensemble de démons filebeat spécifique, mais recréer tous les nœuds n'aide pas non plus, cela continue de se produire.
Ce problème a également été rencontré sur GKE 1.9.4-gke.1 comme @Tapppi - les pods ont été supprimés du démon docker sur le nœud hôte, mais kubernetes l'avait bloqué dans TERMINATING
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulMountVolume 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh MountVolume.SetUp succeeded for volume "data"
Normal SuccessfulMountVolume 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh MountVolume.SetUp succeeded for volume "varlibdockercontainers"
Normal SuccessfulMountVolume 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh MountVolume.SetUp succeeded for volume "prospectors"
Normal SuccessfulMountVolume 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh MountVolume.SetUp succeeded for volume "config"
Normal SuccessfulMountVolume 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh MountVolume.SetUp succeeded for volume "filebeat-token-v74k6"
Normal Pulled 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh Container image "docker.elastic.co/beats/filebeat:6.1.2" already present on machine
Normal Created 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh Created container
Normal Started 43m kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh Started container
Normal Killing <invalid> kubelet, gke-delivery-platform-custom-pool-c9b9fe86-fgvh Killing container with id docker://filebeat:Need to kill Pod
/Users/karl.stoney/git/autotrader/terraform-gcp git/master
Pour nous, quelque chose de nouveau s'est produit il y a un instant, lorsque j'ai supprimé de force un pod bloqué en utilisant kubectl delete pod NAME --grace-period=0 --force
, le nœud sur lequel se trouvait ce pod est juste devenu malsain. Nous exécutons docker 17-12CE et le redémarrage de docker deamon sur cette boîte a aidé et débouché le nœud.
Pour les gens qui voient ce problème sur 1.9.4-gke.1, il est probablement dû à https://github.com/kubernetes/kubernetes/issues/61178 , qui est corrigé dans 1.9.5 et est en cours de déploiement dans GKE cette semaine. Le problème est lié au nettoyage des montages de sous-chemins d'un fichier (pas d'un répertoire). @zackify @ nodefactory-bk @Tapppi @Stono
IIUC, le problème original de ce bogue est lié à la configuration du kubelet conteneurisé, qui est différent.
BTW, créer un nouveau pool de nœuds avec la version v1.9.3-gke.0
était notre solution de contournement pour cela, car v1.9.5
n'est toujours pas déployé sur gke et que c'est déjà Pâques.
Quelqu'un peut-il confirmer que cela est corrigé dans la version 1.9.3+ s'il vous plaît? Nous avons de sérieux problèmes à cause de ce comportement, et le redémarrage de docker chaque fois que cela se produit est tellement st00pid.
Fixé sur 1.9.6 pour moi
Le mercredi 4 avril 2018, 11 h 43 sokoow, [email protected] a écrit:
Quelqu'un peut-il confirmer que cela est corrigé dans la version 1.9.3+ s'il vous plaît? Nous avons
certains problèmes graves à cause de ce comportement et le redémarrage de docker chacun
le moment où cela se produit est soo st00pid.-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/kubernetes/kubernetes/issues/51835#issuecomment-378557636 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ABaviW5yfj64zVjBYFGUToe2MH3dKwpTks5tlKPNgaJpZM4PKs9r
.
D'accord, merci @Stono . Encore une chose à confirmer ici. Voici notre modèle kubespray pour kubelet conteneurisé:
#!/bin/bash
/usr/bin/docker run \
--net=host \
--pid=host \
--privileged \
--name=kubelet \
--restart=on-failure:5 \
--memory={{ kubelet_memory_limit|regex_replace('Mi', 'M') }} \
--cpu-shares={{ kubelet_cpu_limit|regex_replace('m', '') }} \
-v /dev:/dev:rw \
-v /etc/cni:/etc/cni:ro \
-v /opt/cni:/opt/cni:ro \
-v /etc/ssl:/etc/ssl:ro \
-v /etc/resolv.conf:/etc/resolv.conf \
{% for dir in ssl_ca_dirs -%}
-v {{ dir }}:{{ dir }}:ro \
{% endfor -%}
-v /:/rootfs:ro,shared \
-v /sys:/sys:ro \
-v /var/lib/docker:/var/lib/docker:rw,shared \
-v /var/log:/var/log:rw,shared \
-v /var/lib/kubelet:/var/lib/kubelet:rw,shared \
-v /var/lib/cni:/var/lib/cni:rw,shared \
-v /var/run:/var/run:rw,shared \
-v /etc/kubernetes:/etc/kubernetes:ro \
-v /etc/os-release:/etc/os-release:ro \
{{ hyperkube_image_repo }}:{{ hyperkube_image_tag}} \
./hyperkube kubelet --containerized \
"$@"
Cela semble-t-il correct? Est-ce que quelqu'un d'autre utilise similaire?
J'ai parlé trop tôt.
Type Reason Age From Message [53/7752]
---- ------ ---- ---- -------
Normal Killing 4m kubelet, gke-delivery-platform-custom-pool-560b2b96-gcmb Killing container with id docker://filebeat:Need to kill Pod
J'ai dû le détruire de manière brutale.
❯ kks delete pod filebeat-x56v8 --force --grace-period 0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "filebeat-x56v8" deleted
@Stono quelle version de docker utilisez-vous? pour nous avec docker 17.12CE, faire la suppression de pod avec --force --grace-period 0 est assez drastique - cela finit presque toujours par un nœud indisponible en raison du blocage du docker
J'ai toujours ce problème sur la version 1.9.6 sur le cluster géré Azure AKS.
En utilisant cette solution de contournement pour le moment pour sélectionner tous les pods bloqués et les supprimer (car je finis par avoir des pans de pods de terminaison dans mon cluster dev / scratch):
kubectl get pods | awk '$3=="Terminating" {print "kubectl delete pod " $1 " --grace-period=0 --force"}' | xargs -0 bash -c
rencontré ce problème sur les clusters Azure et AWS de mai - la solution de contournement a été fournie par Mike Elliot
https://jira.onap.org/browse/OOM-946
ubuntu @ ip-10-0-0-22 : ~ $ kubectl récupère les pods --all-namespaces
NAMESPACE NOM READY STATUS RESTARTS AGE
kube-system heapster-76b8cd7b5-4r88h 1/1 Fonctionnement 0 25d
kube-system kube-dns-5d7b4487c9-s4rsg 3/3 Fonctionnement 0 25d
kube-system kubernetes-dashboard-f9577fffd-298r6 1/1 Exécution 0 25d
kube-system monitoring-grafana-997796fcf-wtz7n 1/1 Fonctionnement 0 25d
kube-system monitoring-influxdb-56fdcd96b-2phd2 1/1 Exécution 0 25d
kube-system tiller-deploy-cc96d4f6b-jzqmz 1/1 Exécution 0 25d
onap dev-sms-857f6dbd87-pds58 0/1 Terminaison 0 3h
onap dev-vfc-zte-sdnc-driver-5b6c7cbd6b-5vdvp 0/1 Terminaison 0 3h
ubuntu @ ip-10-0-0-22 : ~ $ kubectl supprimer le pod dev-vfc-zte-sdnc-driver-5b6c7cbd6b-5vdvp -n onap --grace-period = 0 --force
avertissement: la suppression immédiate n'attend pas la confirmation de l'arrêt de la ressource en cours d'exécution. La ressource peut continuer à s'exécuter sur le cluster indéfiniment.
pod "dev-vfc-zte-sdnc-driver-5b6c7cbd6b-5vdvp" supprimé
ubuntu @ ip-10-0-0-22 : ~ $ kubectl récupère les pods --all-namespaces
NAMESPACE NOM READY STATUS RESTARTS AGE
kube-system heapster-76b8cd7b5-4r88h 1/1 Fonctionnement 0 25d
kube-system kube-dns-5d7b4487c9-s4rsg 3/3 Fonctionnement 0 25d
kube-system kubernetes-dashboard-f9577fffd-298r6 1/1 Exécution 0 25d
kube-system monitoring-grafana-997796fcf-wtz7n 1/1 Fonctionnement 0 25d
kube-system monitoring-influxdb-56fdcd96b-2phd2 1/1 Exécution 0 25d
kube-system tiller-deploy-cc96d4f6b-jzqmz 1/1 Exécution 0 25d
onap dev-sms-857f6dbd87-pds58 0/1 Terminaison 0 3h
ubuntu @ ip-10-0-0-22 : ~ $ kubectl supprimer le pod dev-sms-857f6dbd87-pds58 -n onap --grace-period = 0 --force
avertissement: la suppression immédiate n'attend pas la confirmation de l'arrêt de la ressource en cours d'exécution. La ressource peut continuer à s'exécuter sur le cluster indéfiniment.
pod "dev-sms-857f6dbd87-pds58" supprimé
ubuntu @ ip-10-0-0-22 : ~ $ kubectl récupère les pods --all-namespaces
NAMESPACE NOM READY STATUS RESTARTS AGE
kube-system heapster-76b8cd7b5-4r88h 1/1 Fonctionnement 0 25d
kube-system kube-dns-5d7b4487c9-s4rsg 3/3 Fonctionnement 0 25d
kube-system kubernetes-dashboard-f9577fffd-298r6 1/1 Exécution 0 25d
kube-system monitoring-grafana-997796fcf-wtz7n 1/1 Fonctionnement 0 25d
kube-system monitoring-influxdb-56fdcd96b-2phd2 1/1 Exécution 0 25d
kube-system tiller-deploy-cc96d4f6b-jzqmz 1/1 Exécution 0 25d
Je ne suis pas sûr que ce soit le même problème, mais nous avons commencé à remarquer ce comportement _depuis_ la mise à niveau de 1.9.3 à 10.10.1. Cela ne s'est jamais produit auparavant. Nous utilisons des volumes glusterfs, avec SubPath. Kubelet enregistre en continu des choses comme
Apr 23 08:21:11 int-kube-01 kubelet[13018]: I0423 08:21:11.106779 13018 reconciler.go:181] operationExecutor.UnmountVolume started for volume "dev-static" (UniqueName: "kubernetes.io/glusterfs/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f-dev-static") pod "ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f" (UID: "ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f")
Apr 23 08:21:11 int-kube-01 kubelet[13018]: E0423 08:21:11.122027 13018 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/glusterfs/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f-dev-static\" (\"ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f\")" failed. No retries permitted until 2018-04-23 08:23:13.121821027 +1000 AEST m=+408681.605939042 (durationBeforeRetry 2m2s). Error: "UnmountVolume.TearDown failed for volume \"dev-static\" (UniqueName: \"kubernetes.io/glusterfs/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f-dev-static\") pod \"ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f\" (UID: \"ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f\") : Unmount failed: exit status 32\nUnmounting arguments: /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static\nOutput: umount: /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static: target is busy.\n (In some cases useful info about processes that use\n the device is found by lsof(8) or fuser(1))\n\n"
et lsof montre en effet que le répertoire sous les volumes glusterfs est toujours utilisé:
glusterfs 71570 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterti 71570 71571 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glustersi 71570 71572 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterme 71570 71573 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glustersp 71570 71574 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glustersp 71570 71575 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71579 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterio 71570 71580 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71581 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71582 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71583 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71584 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71585 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71586 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterep 71570 71587 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterfu 71570 71592 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
glusterfu 71570 71593 root 10u DIR 0,264 4096 9380607748984626555 /var/lib/kubelet/pods/ad8fabbe-4449-11e8-b21a-a2bfb3c62d0f/volumes/kubernetes.io~glusterfs/dev-static/subpathhere
Tout allait bien sur la version 1.9.3, c'est donc comme si le correctif de ce problème avait cassé notre cas d'utilisation :(
@ ross-w cette signature est différente des autres. Pourriez-vous ouvrir un nouveau problème et inclure également les spécifications de votre pod?
Des mises à jour sur ces problèmes?
Dans notre cas (Kubernetes 1.9.7, docker 17.03), les pods sont dans l'état Terminating, une fois que le nœud est sorti de mémoire et que les pods sont replanifiés. Finalement, il y a beaucoup de pods fantômes dans le tableau de bord Kubernetes et dans l'onglet Déploiements, nous pouvons voir les déploiements avec des pods 4/1.
Redémarrer kubelet ou tuer tous les pods dans l'espace de noms aide, mais c'est une très mauvaise solution.
@Adiqq Car c'était un problème avec Docker lui-même.
Jetez un œil à journalctl -u kubelet -f
sur l'un de vos nœuds. J'ai eu un message du type `` Impossible de tuer le conteneur
Pour résoudre ce problème, j'ai redémarré le docker sur chaque note. Lors du démarrage, nettoyez les conteneurs Docker dans un état cassé et supprimez tous ces pods périmés.
J'ai eu ça hier en 1.9.7, avec un pod bloqué en état de terminaison et dans les journaux il avait juste "besoin de tuer le pod", j'ai dû --force --grace-period=0
pour me débarrasser.
Je viens de l'obtenir avec 1.9.7-gke.0.
N'a pas eu de problèmes avec 1.9.6-gke.1.
Mais je l'ai eu avec 1.9.4 et 1.9.5
Le pod coincé a un PV attaché.
Le redéploiement ou la suppression d'un pod a le même effet.
Le redémarrage de kubelet sur le nœud incriminé n'a pas fonctionné. kubelet n'a pas redémarré et j'ai dû redémarrer le nœud entier.
Pendant ce temps, le pod ne pouvait être programmé sur aucun autre nœud car il indiquait que le PV était déjà monté ailleurs.
@Stono @ nodefactory-bk pourriez-vous jeter un coup d'œil à vos journaux kubelet sur les nœuds incriminés pour voir s'il existe des journaux détaillés qui pourraient indiquer le problème?
cc @dashpole
Juste une application bloquée à la fin.
Ceci est sur 1.9.7-gke.1
Voici kubectl décrire le pod avec des secrets rédigés:
Name: sharespine-cloud-6b78cbfb8d-xcbh5
Namespace: shsp-cloud-dev
Node: gke-testing-std4-1-0f83e7c0-qrxg/10.132.0.4
Start Time: Tue, 22 May 2018 11:14:22 +0200
Labels: app=sharespine-cloud
pod-template-hash=2634769648
Annotations: <none>
Status: Terminating (expires Wed, 23 May 2018 10:02:01 +0200)
Termination Grace Period: 60s
IP: 10.40.7.29
Controlled By: ReplicaSet/sharespine-cloud-6b78cbfb8d
Containers:
sharespine-cloud:
Container ID: docker://4cf402b5dc3ea728fcbff87b57e0ec504093ea3cf7277f6ca83fde726a4bba48
Image: ...
Image ID: ...
Ports: 9000/TCP, 9500/TCP
State: Running
Started: Tue, 22 May 2018 11:16:36 +0200
Ready: False
Restart Count: 0
Limits:
memory: 1500M
Requests:
cpu: 500m
memory: 1024M
Liveness: http-get http://:9000/ delay=240s timeout=1s period=30s #success=1 #failure=3
Readiness: http-get http://:9000/ delay=30s timeout=1s period=10s #success=1 #failure=3
Environment Variables from:
sharespine-cloud-secrets Secret Optional: false
Environment:
APP_NAME: sharespine-cloud
APP_ENV: shsp-cloud-dev (v1:metadata.namespace)
JAVA_XMS: 128M
JAVA_XMX: 1024M
Mounts:
/home/app/sharespine-cloud-home/ from sharespine-cloud-home (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-x7vzr (ro)
sharespine-cloud-elker:
Container ID: docker://88a5a2bfd6804b5f40534ecdb6953771ac3181cf12df407baa81a34a7215d142
Image: ...
Image ID: ...
Port: <none>
State: Running
Started: Tue, 22 May 2018 11:16:36 +0200
Ready: True
Restart Count: 0
Limits:
memory: 200Mi
Requests:
cpu: 10m
memory: 100Mi
Environment Variables from:
sharespine-cloud-secrets Secret Optional: false
Environment:
APP_NAME: sharespine-cloud
APP_ENV: shsp-cloud-dev (v1:metadata.namespace)
ELASTICSEARCH_LOGBACK_PATH: /home/app/sharespine-cloud-home/logs/stash/stash.json
ELASTICSEARCH_LOGBACK_INDEX: cloud-dev
Mounts:
/home/app/sharespine-cloud-home/ from sharespine-cloud-home (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-x7vzr (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
sharespine-cloud-home:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: sharespine-cloud-home
ReadOnly: false
default-token-x7vzr:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-x7vzr
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Killing 20m kubelet, gke-testing-std4-1-0f83e7c0-qrxg Killing container with id docker://sharespine-cloud-elker:Need to kill Pod
Normal Killing 20m kubelet, gke-testing-std4-1-0f83e7c0-qrxg Killing container with id docker://sharespine-cloud:Need to kill Pod
Warning FailedKillPod 18m kubelet, gke-testing-std4-1-0f83e7c0-qrxg error killing pod: failed to "KillPodSandbox" for "83d05e96-5da0-11e8-ba51-42010a840176" with KillPodSandboxError: "rpc error: code = DeadlineExceeded desc = context deadline exceeded"
Warning FailedSync 1m (x53 over 16m) kubelet, gke-testing-std4-1-0f83e7c0-qrxg error determining status: rpc error: code = DeadlineExceeded desc = context deadline exceeded
Je ne sais pas où trouver kubelet.log dans gke sur les images Google. J'ai trouvé quelque chose que j'attache.
kube.log
kubectl -n shsp-cloud-dev delete pod sharespine-cloud-6b78cbfb8d-xcbh5 --force --grace-period 0
tué et enlevé.
Cela a bien commencé après mais a pris un peu plus de temps que d'habitude.
Remarquez que cela ne se produit pas CHAQUE fois pour cette application.
Je dirais probablement environ 1/4 fois.
En frappant cela avec k8s 1.9.6, lorsque kubelet est incapable de démonter le montage Cephfs, tous les pods sur le nœud restent terminés pour toujours. J'ai dû redémarrer le nœud pour récupérer, le redémarrage de kubelet ou de docker n'a pas aidé.
@tuminoid le problème de ceph sonne différemment. Pourriez-vous ouvrir un nouveau problème et fournir également des événements de pod et des journaux de kubelet pour ce pod?
Pour info, la mise à jour de mes clusters (vers k8s v1.10.2) semble avoir éliminé ce problème pour nous.
La pièce jointe me le reproduit sur gke
kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10+", GitVersion:"v1.10.2-gke.1", GitCommit:"75d2af854b1df023c7ce10a8795b85d3dd1f8d37", GitTreeState:"clean", BuildDate:"2018-05-10T17:23:18Z", GoVersion:"go1.9.3b4", Compiler:"gc", Platform:"linux/amd64"}
exécutez-le, puis supprimez-le. Vous obtiendrez un «client nfs» bloqué lors de la suppression. La raison en est le montage en dur sur le nœud, et le «serveur» est supprimé en premier.
@donbowman pour le problème de
Je ne vois pas comment? Je peux le définir sur un PersistentVolumeClaim, mais cela ne s'applique pas ici.
Je ne pense pas que StorageClass s'applique ici (ce serait le sous-disque, sous le serveur nfs).
Le problème concerne le client nfs.
est-ce que je manque quelque chose?
Pour votre PV nfs, vous pouvez définir le champ mountOptions à partir de la version 1.8 pour spécifier un montage logiciel. Si vous provisionnez dynamiquement des volumes nfs, vous pouvez également le définir dans votre StorageClass.mountOptions
oui, mais ce n'est pas le PV qui est monté avec NFS.
C'est de mon conteneur de serveur NFS.
Il n'y a pas de provisioning dynamique.
Cela utilise Google GCP + GKE. Le PVC sélectionne un PV qui est un bloc IO, monté en ext4 dans un conteneur qui le réexporte avec NFS.
Le 2ème ensemble de conteneurs, qui se monte à partir du serveur nfs (qui est lui-même un pod), ils ne le voient pas comme un PV. Ils le voient comme un volume comme ci-dessous.
Je ne vois pas de moyen de faire en sorte que ce client nfs voie un 'pvc' pour le montage, donc je ne peux pas définir les options de montage. Je ne peux pas non plus le voir comme une StorageClass.
Est-ce que je manque quelque chose?
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nfs-client
labels:
app: nfs-client
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client
spec:
containers:
- name: nfs-client
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["sleep", "3600"]
volumeMounts:
- name: nfs
mountPath: /registry
volumes:
- name: nfs
nfs:
server: nfs-server.default.svc.cluster.local
path: /
@donbowman pour votre deuxième ensemble de conteneurs, qui utilise le montage nfs, vous pouvez créer manuellement un PV pour ce volume nfs avec l'ensemble mountOptions, et partager le PVC pour ce PV nfs dans tous vos pods. Aucun provisionnement dynamique impliqué.
Quelque chose comme ça:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
storageClassName: ""
capacity:
# Capacity doesn't actually matter for nfs
storage: 500G
accessModes:
- ReadWriteMany
mountOptions:
- soft
nfs:
server: nfs-server.default.svc.cluster.local
path: /
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-claim
spec:
# It's necessary to specify "" as the storageClassName
# so that the default storage class won't be used
storageClassName: ""
volumeName: nfs-pv
accessModes:
- ReadWriteMany
resources:
requests:
storage: 500G
Merci! Cela a donc fonctionné (dans le sens où il s'agit maintenant d'un montage logiciel) mais ne résout pas le problème:
Le montage (comme observé sur le nœud) est maintenant souple:
nfs-server.default.svc.cluster.local:/ on /home/kubernetes/containerized_mounter/rootfs/var/lib/kubelet/pods/cbeda204-638d-11e8-9758-42010aa200b4/volumes/kubernetes.io~nfs/nfs-pv type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,soft,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.162.0.2,local_lock=none,addr=10.19.241.155)
Mais quand je supprime le tout, le client nfs reste bloqué pour toujours dans l'état de terminaison.
ci-joint est le yaml que j'ai utilisé. J'ai fait un 'créer', j'ai attendu qu'il apparaisse, observé que le client avait le montage, pouvait lire / écrire des fichiers dedans, puis j'ai fait une 'suppression' dessus.
Le pod nfs-server est supprimé, mais le nfs-client ne l'est pas.
En regardant sur le pod, la monture est restée:
# umount -f /home/kubernetes/containerized_mounter/rootfs/var/lib/kubelet/pods/cbeda204-638d-11e8-9758-42010aa200b4/volumes/kubernetes.io~nfs/nfs-pv
umount: /home/kubernetes/containerized_mounter/rootfs/var/lib/kubelet/pods/cbeda204-638d-11e8-9758-42010aa200b4/volumes/kubernetes.io~nfs/nfs-pv: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
@donbowman ah tellement désolé, je me suis trompé sur l'option douce. L'option logicielle empêche uniquement les appels de système de fichiers de se bloquer lorsque le serveur est inaccessible, mais n'aide pas réellement à démonter le volume nfs. Un démontage de force devrait être fait pour cela, que nous n'avons actuellement pas de moyen de traverser. Pour l'instant, vous devrez nettoyer manuellement ces montages et vous assurer de supprimer vos pods dans le bon ordre (clients nfs d'abord, puis serveur nfs).
J'ai essayé d'ajouter timeo = 30 et intr, mais même problème.
cela le verrouille, doit se connecter au nœud et faire un umount -f -l sur le montage sous-jacent, puis peut faire un kubectl delete --force --grace-period 0 sur le pod.
il semble que puisque cela a été monté pour le compte du pod, il pourrait être possible de démonter (ou de forcer le démontage après un certain délai) lors de la suppression automatique.
J'avais un tas de pods comme ça, donc j'ai dû proposer une commande qui nettoierait tous les pods de terminaison:
kubectl get pods -o json | jq -c '.items[] | select(.metadata.deletionTimestamp) | .metadata.name' | xargs -I '{}' kubectl delete pod --force --grace-period 0 '{}'
Je pense qu'avec le nouveau magasin de fichiers de Google, nous aurons le même problème, pas de montage.
@donbowman iirc, votre problème est dû au fait que vous mettiez fin au pod serveur nfs avant le pod client nfs. Si vous utilisez filestore, vous n'avez plus besoin d'un pod pour héberger votre serveur nfs, vous ne devriez donc pas avoir ce problème tant que vous ne supprimez pas l'intégralité de l'instance de Firestore.
N'aurai-je pas le même problème si j'organise le magasin de fichiers? Par exemple, si j'en parle pour un déploiement Kubernetes spécifique, puis en bas à la fin, l'ordre n'est pas garanti.
Mais je pense aussi que le problème n'est pas seulement l'ordre, la suppression du pod client nfs ne se démonte pas du tout, elle laisse simplement le support suspendu sur le nœud. Donc, que le fichier / serveur soit présent ou non, il y a un montage suspendu.
Lorsqu'un pod est terminé, nous démontons le volume (en supposant que le serveur est toujours là). Si vous voyez des montures pendantes même lorsque le serveur existe, c'est un bogue.
Si vous utilisez l'approvisionnement dynamique avec des PVC et des PV, nous n'autorisons pas la suppression du PVC (et du stockage sous-jacent) tant que tous les pods qui le référencent ne l'utilisent pas. Si vous souhaitez orchestrer l'approvisionnement vous-même, vous devez vous assurer de ne pas supprimer le serveur tant que tous les pods n'ont pas fini de l'utiliser.
C'est peut-être une solution de contournement possible: # 65936
Forcer la suppression a fonctionné pour kubectl delete po $pod --grace-period=0 --force
. L'indicateur --now
ne fonctionnait pas. Je ne suis pas sûr de # 65936 mais je voudrais ne pas tuer le nœud lorsque des états Unknown
se produisent.
Ayant le même problème (les pods restent en terminaison car un fichier dans le pod ne peut pas être démonté car le périphérique est `` occupé '') sur 1.10.5. Pour moi, l'utilisation de --grace-period=0 --force
permettra au point de montage de continuer à exister. Finalement, je me suis retrouvé avec plus de 90000 points de montage, ce qui a considérablement ralenti le cluster. La solution de contournement consiste à effectuer une recherche dans le dossier du pod et à démonter ces fichiers de manière récursive, puis à supprimer de manière récursive le dossier du pod.
Dans mon cas, je monte un configmap en utilisant un sous-chemin dans un dossier existant avec des fichiers existants, en écrasant l'un des fichiers existants. Cela fonctionnait bien pour moi sur 1.8.6.
L'affiche originale mentionne que les gousses restent en «terminaison» pendant quelques heures, dans mon cas, ce sont des jours. Je ne les ai pas vus être nettoyés finalement, sauf lorsque je fais la solution de contournement manuelle.
Ayant le même problème, causé par l'agrégateur de journaux (similaire à fluentd), il monte le dossier /var/lib/docker/containers
et le pod a beaucoup de montages:
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/6691cb9460df75579915fd881342931b98b4bfb7a6fbb0733cc6132d7c17710c/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/4cbbdf53ee5122565c6e118a049c93543dcc93bfd586a3456ff4ca98d59810a3/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/b2968b63a7a1f673577e5ada5f2cda50e1203934467b7c6573e21b341d80810a/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/4d54a4eabed68b136b0aa3d385093e4a32424d18a08c7f39f5179440166de95f/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/0e5487465abc2857446940902d9b9754b3447e587eefc2436b2bb78fd4d5ce4d/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/c73ed0942d77bf43f9ba016728834c47339793f9f1f31c4e566d73be492cf859/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/f9ab13f7f145b44beccc40c158287c4cfcc9dc465850f30d691961a2cabcfc14/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/aa449af555702d04f95fed04d09a3f1d5ae38d677484fc6cc9fc6d4b42182820/shm
shm 64.0M 0 64.0M 0% /var/lib/docker/containers/f6608e507348b43ade3faa05d0a11b674c29f2038308f138174e8b7b8233633f/shm
Dans mon cas, certains pods peuvent être bien supprimés par kubernetes, mais certains sont bloqués en état de "fin".
Cela pourrait être lié à https://github.com/kubernetes/kubernetes/issues/45688 (j'utilise également docker 17)
J'ai juste eu le problème que les pods ne se terminaient pas car un secret manquait. Après avoir créé ce secret dans cet espace de noms, tout était revenu à la normale.
J'ai retiré mes pods bloqués comme ceci:
user<strong i="6">@laptop</strong>:~$ kubectl -n storage get pod
NAME READY STATUS RESTARTS AGE
minio-65b869c776-47hql 0/1 Terminating 5 1d
minio-65b869c776-bppl6 0/1 Terminating 33 1d
minio-778f4665cd-btnf5 1/1 Running 0 1h
sftp-775b578d9b-pqk5x 1/1 Running 0 28m
user<strong i="7">@laptop</strong>:~$ kubectl -n storage delete pod minio-65b869c776-47hql --grace-period 0 --force
pod "minio-65b869c776-47hql" deleted
user<strong i="8">@laptop</strong>:~$ kubectl -n storage delete pod minio-65b869c776-bppl6 --grace-period 0 --force
pod "minio-65b869c776-bppl6" deleted
user<strong i="9">@laptop</strong>:~$ kubectl -n storage get pod
NAME READY STATUS RESTARTS AGE
minio-778f4665cd-btnf5 1/1 Running 0 2h
sftp-775b578d9b-pqk5x 1/1 Running 0 30m
user<strong i="10">@laptop</strong>:~$
Vous avez un problème similaire en cours d'exécution sur Azure ACS.
10:12 $ kubectl describe pod -n xxx triggerpipeline-3737304981-nx85k
Name: triggerpipeline-3737304981-nx85k
Namespace: xxx
Node: k8s-agent-d7584a3a-2/10.240.0.6
Start Time: Wed, 27 Jun 2018 15:33:48 +0200
Labels: app=triggerpipeline
pod-template-hash=3737304981
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"xxx","name":"triggerpipeline-3737304981","uid":"b91320ff-7a0e-11e8-9e7...
Status: Terminating (expires Fri, 27 Jul 2018 09:00:35 +0200)
Termination Grace Period: 0s
IP:
Controlled By: ReplicaSet/triggerpipeline-3737304981
Containers:
alpine:
Container ID: docker://8443c7478dfe1a57a891b455366ca007fe00415178191a54b0199d246ccbd566
Image: alpine
Image ID: docker-pullable://alpine<strong i="6">@sha256</strong>:e1871801d30885a610511c867de0d6baca7ed4e6a2573d506bbec7fd3b03873f
Port: <none>
Command:
sh
Args:
-c
apk add --no-cache curl && echo "0 */4 * * * curl -v --trace-time http://myapi:80/api/v1/pipeline/start " | crontab - && crond -f
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-p9qtw (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
default-token-p9qtw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-p9qtw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: <none>
Events: <none>
J'ai essayé d'utiliser --now
ou de définir la période de grâce. Par exemple
09:00 $ kubectl delete pod -n xxx triggerpipeline-3737304981-nx85k --force --grace-period=0
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "triggerpipeline-3737304981-nx85k" deleted
Le pod est toujours suspendu et cela entraîne également le blocage du déploiement correspondant.
Je suis également hanté par ces messages «Need to kill Pod» dans les événements du pod. Qu'est-ce que cela signifie d'ailleurs? Que _Kubernetes_ ressent le besoin de tuer le pod, ou que _Je_ devrais tuer le pod?
cela m'est arrivé il y a quelques jours et j'ai abandonné la suppression et laissé le pod tel quel. Puis aujourd'hui, il a disparu et semble être finalement supprimé.
Cela m'est arrivé tout à l'heure. La solution --force --now n'a pas fonctionné pour moi. J'ai trouvé la ligne suivante dans les journaux de kubelet suspecte
6 août 15:25:37 kube-minion-1 kubelet [2778]: W0806 15: 25: 37.986549 2778 docker_sandbox.go: 263] NetworkPlugin cni a échoué sur le hook d'état du pod "backend-foos-227474871-gzhw0_default": inattendu sortie de la commande nsenter: impossible d'ouvrir: aucun fichier ou répertoire de ce type
Ce qui m'a amené à trouver le problème suivant:
https://github.com/openshift/origin/issues/15802
Je ne suis pas sur openstack mais sur Openstack, donc j'ai pensé que cela pourrait être lié. J'ai donné le conseil de redémarrer docker un coup.
Le redémarrage de docker a fait disparaître les pods bloqués dans "Terminer".
Je sais que ce n'est qu'une solution de rechange, mais je ne me réveille plus parfois à 3 heures du matin pour résoudre ce problème.
Je ne dis pas que vous devriez l'utiliser, mais cela pourrait aider certaines personnes.
Le sommeil est ce que j'ai mes pods, la terminaisonGracePeriodSeconds est définie sur (30 secondes). S'il est en vie plus longtemps que cela, ce cronjob forcera --grace-period = 0 et le tuera complètement
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: stuckpod-restart
spec:
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 5
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: stuckpod-restart
image: devth/helm:v2.9.1
args:
- /bin/sh
- -c
- echo "$(date) Job stuckpod-restart Starting"; kubectl get pods --all-namespaces=true | awk '$3=="Terminating" {print "sleep 30; echo "$(date) Killing pod $1"; kubectl delete pod " $1 " --grace-period=0 --force"}'; echo "$(date) Job stuckpod-restart Complete";
restartPolicy: OnFailure
Je vois la même erreur avec Kubernetes v1.10.2. Les pods se bloquent indéfiniment et le kubelet sur le nœud en question enregistre à plusieurs reprises:
Aug 21 13:25:55 node-09 kubelet[164855]: E0821 13:25:55.149132
164855 nestedpendingoperations.go:267]
Operation for "\"kubernetes.io/configmap/b838409a-a49e-11e8-bdf7-000f533063c0-configmap\"
(\"b838409a-a49e-11e8-bdf7-000f533063c0\")" failed. No retries permitted until 2018-08-21
13:27:57.149071465 +0000 UTC m=+1276998.311766147 (durationBeforeRetry 2m2s). Error: "error
cleaning subPath mounts for volume \"configmap\" (UniqueName:
\"kubernetes.io/configmap/b838409a-a49e-11e8-bdf7-000f533063c0-configmap\") pod
\"b838409a-a49e-11e8-bdf7-000f533063c0\" (UID: \"b838409a-a49e-11e8-bdf7-000f533063c0\")
: error deleting /var/lib/kubelet/pods/b838409a-a49e-11e8-bdf7-000f533063c0/volume-
subpaths/configmap/pod-master/2: remove /var/lib/kubelet/pods/b838409a-a49e-11e8-bdf7-
000f533063c0/volume-subpaths/configmap/pod-master/2: device or resource busy"
Je peux démonter manuellement le volume du sous-chemin en question sans me plaindre (Linux ne me dit pas qu'il est occupé). Cela empêche le kubelet d'enregistrer le message d'erreur. Cependant, cela n'incite pas Kubernetes à poursuivre le nettoyage, car le pod est toujours affiché dans l'état de fin. Le redémarrage régulier de Docker pour nettoyer cela n'est pas vraiment une solution acceptable en raison de la perturbation qu'il provoque dans l'exécution des conteneurs.
A noter également: le conteneur lui-même est passé de docker ps -a
sans aucune preuve qu'il ait jamais existé, donc je ne suis pas sûr qu'il s'agisse en fait d'un problème Docker. Nous utilisons la version 17.03.2-ce de Docker.
Une mise à jour: nous avions configuré nos nœuds pour rediriger le répertoire racine de kubelet vers un volume non-OS avec un lien symbolique ( /var/lib/kubelet
était un lien symbolique pointant vers un autre répertoire sur un volume différent). Lorsque j'ai reconfiguré les choses pour passer --root-dir
au kubelet afin qu'il aille directement dans le répertoire souhaité, plutôt que via un lien symbolique, et redémarré le kubelet, il a nettoyé les montages de volume et effacé les pods qui étaient bloqués terminer sans nécessiter un redémarrage de Docker.
J'ai rencontré ce problème aujourd'hui pour la première fois en exécutant des pods localement sur minikube.
J'avais un tas de pods coincés dans Terminating
raison d'un configmap / secret monté en tant que volume manquant. Aucune des suggestions / solutions de contournement / solutions publiées ci-dessus n'a fonctionné à l'exception de celle-ci .
Une chose qui, à mon avis, mérite d'être signalée est la suivante:
kubectl get pods
, j'ai obtenu la liste des pods avec le statut Terminating
.docker ps | grep -i {{pod_name}}
cependant, aucun des pods dans le statut Terminating
vu par kubectl get pods
n'était en cours d'exécution dans la VM minikube.Je m'attendais docker ps
ce que Terminating
mais en réalité aucun d'entre eux n'était en cours d'exécution, pourtant kubectl get pods
renvoyait des données à leur sujet? Quelqu'un pourrait-il expliquer pourquoi?
J'ai rencontré ce problème avec 4 déploiements. Ensuite, je suis passé du «volume local» au «chemin de l'hôte» pour tous les montages, et c'est parti pour moi.
J'ai juste eu le problème que les pods ne se terminaient pas car un secret manquait. Après avoir créé ce secret dans cet espace de noms, tout était revenu à la normale.
Comment créer un secret dans l'espace de noms si l'espace de noms est à l'état «Terminating»?
kubectl delete --all pods --namespace = xxxxx --force --grace-period = 0
travaille pour moi.
N'oubliez pas "--grace-period = 0". Cela compte
kubectl m'a averti "avertissement: la suppression immédiate n'attend pas la confirmation que la ressource en cours d'exécution a été arrêtée. La ressource peut continuer à s'exécuter sur le cluster indéfiniment." quand j'utilise --force --grace-period=0
.
Quelqu'un peut-il me dire si ça va vraiment arriver?
en fait, lorsque nous supprimons un pod, cela peut retarder la suppression pour certaines raisons,
et si nous exécutons "kubectl delete" avec le drapeau "--force --grace-period = 0",
l'objet ressource serait supprimé immédiatement.
Pouvez-vous aider à confirmer si le pod sera supprimé immédiatement?
Cela signifie-t-il que le message d'avertissement est en fait inexact?
@windoze , si vous choisissez l'option --force --grace-period = 0, cela signifie que l'objet API du pod sera immédiatement supprimé du serveur API. Node kubelet est chargé de nettoyer les montages de volume et de tuer les conteneurs. Si kubelet n'est pas en cours d'exécution ou rencontre des problèmes lors du nettoyage du pod, le conteneur est peut-être toujours en cours d'exécution. Mais Kubelet devrait continuer d'essayer de nettoyer les gousses chaque fois que possible.
Cela signifie donc toujours que la suppression pourrait prendre une éternité parce que kubelet pourrait ne pas fonctionner correctement?
Existe-t-il un moyen de s'assurer que le pod est supprimé?
Je pose la question parce que j'ai d'énormes pods en cours d'exécution dans le cluster et qu'il n'y a pas assez de mémoire sur chaque nœud pour en exécuter 2 instances.
Si la suppression échoue, le nœud devient inutilisable et si ce problème se produit plusieurs fois, le service sera complètement arrêté car il n'y aura finalement aucun nœud qui pourra exécuter ce pod.
Dans un environnement docker simple, je peux forcer la destruction d'un pod avec kill -9
ou quelque chose comme ça, mais il semble que k8s n'ait pas une telle fonction.
@windoze savez-vous pourquoi la suppression de votre pod a souvent échoué? C'est parce que kubelet n'est pas en cours d'exécution ou que kubelet essayait de tuer le conteneur mais a échoué avec quelques erreurs?
Une telle situation s'est produite plusieurs fois sur mon cluster il y a plusieurs mois, kubelet était en cours d'exécution mais le démon docker semblait avoir des problèmes et s'est bloqué sans journal d'erreurs.
Ma solution était de me connecter au nœud et de forcer la suppression du processus de conteneur et de redémarrer le démon docker.
Après quelques mises à niveau, le problème avait disparu et je ne l'ai plus jamais eu.
kubectl delete pods <podname> --force --grace-period=0
fonctionné pour moi!
@ shinebayar-g, le problème avec --force
est que cela pourrait signifier que votre conteneur continuera à fonctionner. Il dit simplement à Kubernetes d'oublier les conteneurs de ce pod. Une meilleure solution consiste à SSH dans la VM exécutant le pod et à enquêter sur ce qui se passe avec Docker. Essayez de tuer manuellement les conteneurs avec docker kill
et en cas de succès, essayez à nouveau de supprimer le pod normalement.
@agolomoodysaada Ah, c'est logique. Merci pour l'explication. Donc, je ne saurais pas vraiment que le conteneur réel est vraiment supprimé ou non?
alors, c'est la fin de 2018, le kube 1.12 est sorti et ... vous avez tous encore des problèmes avec les pods bloqués?
J'ai le même problème, soit --force --grace-period = 0 ou --force --now ne fonctionne pas, voici les journaux:
root @ r15-c70-b03-master01 : ~ # kubectl -n infra-lmat obtenir le pod node-exporter-zbfpx
NOM READY STATUS REDEMARRE L'ÂGE
node-exporter-zbfpx 0/1 Terminaison 0 4d
root @ r15-c70-b03-master01 : ~ # kubectl -n infra-lmat supprimer le pod node-exporter-zbfpx --grace-period = 0 --force
avertissement: la suppression immédiate n'attend pas la confirmation de l'arrêt de la ressource en cours d'exécution. La ressource peut continuer à s'exécuter sur le cluster indéfiniment.
pod "node-exporter-zbfpx" supprimé
root @ r15-c70-b03-master01 : ~ # kubectl -n infra-lmat obtenir le pod node-exporter-zbfpx
NOM READY STATUS REDEMARRE L'ÂGE
node-exporter-zbfpx 0/1 Terminaison 0 4d
root @ r15-c70-b03-master01 : ~ # kubectl -n infra-lmat supprimer le pod node-exporter-zbfpx --now --force
pod "node-exporter-zbfpx" supprimé
root @ r15-c70-b03-master01 : ~ # kubectl -n infra-lmat obtenir le pod node-exporter-zbfpx
NOM READY STATUS REDEMARRE L'ÂGE
node-exporter-zbfpx 0/1 Terminaison 0 4d
root @ r15-c70-b03-master01 : ~ #
J'ai essayé de modifier le pod et de supprimer la section des finaliseurs dans les métadonnées, mais cela a également échoué.
Je vois toujours cela de manière reproductible à 100% (mêmes définitions de ressources) avec kubectl 1.13 alpha et Docker for Desktop sur macOS. Par reproductible, je veux dire que la seule façon de résoudre ce problème semble être de réinitialiser Docker pour Mac, et lorsque je configure à nouveau mon cluster en utilisant les mêmes ressources (script de déploiement), le même script de nettoyage échoue.
Je ne sais pas pourquoi cela serait pertinent, mais mon script de nettoyage ressemble à:
#!/usr/bin/env bash
set -e
function usage() {
echo "Usage: $0 <containers|envs|volumes|all>"
}
if [ "$1" = "--help" ] || [ "$1" = "-h" ] || [ "$1" = "help" ]; then
echo "$(usage)"
exit 0
fi
if [ $# -lt 1 ] || [ $# -gt 1 ]; then
>&2 echo "$(usage)"
exit 1
fi
MODE=$1
function join_with {
local IFS="$1"
shift
echo "$*"
}
resources=()
if [ "$MODE" = "containers" ] || [ "$MODE" = "all" ]; then
resources+=(daemonsets replicasets statefulsets services deployments pods rc)
fi
if [ "$MODE" = "envs" ] || [ "$MODE" = "all" ]; then
resources+=(configmaps secrets)
fi
if [ "$MODE" = "volumes" ] || [ "$MODE" = "all" ]; then
resources+=(persistentvolumeclaims persistentvolumes)
fi
kubectl delete $(join_with , "${resources[@]}") --all
Étant donné que le cluster est exécuté localement, je peux vérifier qu'aucun conteneur describe
les pods, le statut est indiqué comme Status: Terminating (lasts <invalid>)
Cela m'est arrivé une fois de plus. J'essayais d'installer percona pmm-server avec le partage NFS et le logiciel n'est même pas venu, alors j'ai supprimé et cela s'est produit. (La revendication persistante ne fonctionnait pas pour ce logiciel). Je suppose que j'appelle à nouveau le bon vieux kubectl delete pods <podname> --force --grace-period=0
. Mais la question est de savoir comment puis-je savoir où vit ce pod?
@ shinebayar-g, SSH dans la VM sur laquelle il se trouvait et exécutez docker ps
.
Eh bien, ce n'était pas là ... J'ai peu de VM, alors j'ai demandé comment savoir laquelle est la bonne. :)
@ shinebayar-g cela peut fonctionner:
kubectl describe pod/some-pod-name | grep '^Node:'
même problème.
docker ps
trouvé que le conteneur est à l'état "Mort" non Quitté (0) comme prévu
En supprimant manuellement le conteneur, accédez à l'entrée de journal Docker suivante:
level=warning msg="container kill failed because of 'container not found' or 'no such process': Cannot kill container
Malheureusement, la ligne est coupée, mais je pense que je m'en souviens, le problème était que le processus n'était plus là.
Je suis toujours coincé avec ce problème avec k8s v1.11.0. Voici une liste de contrôle de ce que je fais pour nettoyer mes dosettes:
kubectl get
; certains d'entre eux ne sont connus que du Kubelet sur lequel le pod fonctionne, vous devrez donc suivre son flux de journal localementkubectl edit
le pod échoué et supprimez finalizers:
→ - foregroundDeletion
Deux autres conseils:
kubectl delete
bloquée dans une autre fenêtre pour suivre votre progression (même sur un pod que vous avez déjà "supprimé" plusieurs fois). kubectl delete
se terminera dès que la dernière ressource bloquée sera libérée.Face à cela aujourd'hui.
Ce qui a été fait:
kubectl get pods
me montre ce que mon conteneur coincé 0/1 terminating
(était 1/1 terminating
)finalizers
du pod, mon was foregroundDeletion
($ kubectl edit pod / name) -> conteneur supprimé de la liste des podskubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
nous sommes confrontés au même problème lorsque nous avons commencé à monter des secrets (partagés avec de nombreux pods). Le pod entre dans l'état terminating
et y reste pour toujours. Notre version est v1.10.0. Le conteneur docker attaché a disparu, mais la référence dans le serveur API reste à moins que je ne supprime de force le pod avec l'option --grace-period=0 --force
.
À la recherche d'une solution permanente.
Eh bien, récemment, j'ai testé l'exploit runc CVE-2019-5736 sur mon cluster de préparation, comme vous le savez déjà, l'exploit réécrit le binaire runc sur la machine hôte. Son exploit destructeur. Après cela, j'ai vu un comportement étrange sur le cluster. Tous les pods sont bloqués sur l'état de fin. La solution de contournement consistait à vidanger le docker de purge de nœud affecté et à le réinstaller. Après cela, tous les pods et clusters k8 fonctionnent normalement comme avant. Peut-être que c'est un problème de docker et le réinstaller résout votre problème aussi !. Merci
La nouvelle version v1.13.3 est installée ici. Cela m'arrive aussi. Cela se produit depuis que j'ai monté les mêmes volumes NFS sur quelques pods, ce qui semble avoir quelque chose à voir avec cela.
Je vois ce problème lors de la création d'un déploiement qui tente de créer un volume en utilisant un secret qui n'existe pas, la suppression de ce déploiement / service laisse autour d'un pod Terminating
.
face au même problème avec v.1.12.3, et --grace-period = 0 --force ou --now les deux invalides, supprimez le statefulset qui appartient également invalide
Même problème avec un montage SMB (je pense?) (Partage Azure Files selon https://docs.microsoft.com/en-us/azure/aks/azure-files-volume).
même problème avec 13.3
J'ai le même problème que le pod est dans l'état «Terminé» depuis près de 2 jours.
J'utilise Minikube sur une machine Linux (Debian).
Version Kubectl:
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.3", GitCommit:"721bfa751924da8d1680787490c54b9179b1fed0", GitTreeState:"clean", BuildDate:"2019-02-01T20:00:57Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Version Minikube:
minikube version: v0.34.1
@ardalanrazavi pourquoi se termine-t-il pendant deux jours? Il suffit de forcer la suppression si elle ne supprime pas après 5 minutes
@nmors
pourquoi se termine-t-il pendant deux jours?
C'est une bonne question. Nous aimerions tous savoir cela.
Il suffit de forcer la suppression si elle ne supprime pas après 5 minutes
Le supprimer de force laisse le cluster dans un état incohérent. (Avec minikube, ce n'est pas votre vrai cluster, c'est certes beaucoup moins préoccupant)
@AndrewSav
Je ne vois aucune autre solution ici pour être franc.
Bien sûr, le cluster sera laissé dans un "état incohérent". J'aimerais comprendre ce que vous entendez exactement par là. La fermeture forcée est mauvaise. Je n'aime pas non plus cela, mais dans mon cas, je suis à l'aise pour détruire et redéployer toutes les ressources au besoin.
Dans mon cas, il semble ne rester bloqué qu'en se terminant sur les pods qui ont un montage NFS. Et cela ne se produit que lorsque le serveur NFS tombe en panne avant que le client essaie de tomber en panne.
J'ai résolu le problème, j'ai pu isoler que tous les pods bloqués se terminaient tous sur un nœud, le nœud a été redémarré et le problème a disparu.
@nmors @AndrewSav J'ai également forcé la suppression.
La suppression de votre serveur nfs avant de supprimer vos pods est connue pour entraîner un blocage définitif du démontage. Dans ce cas, il est préférable d'ordonner vos suppressions afin que votre serveur nfs soit toujours supprimé en dernier.
@ msau42 Mon serveur NFS ne fait pas partie du cluster k8s - c'est un appareil et une machine séparés tous ensemble
Peu importe qu'il fasse partie du cluster k8s ou non. Si le serveur nfs est inaccessible, le démontage se bloque jusqu'à ce qu'il redevienne accessible.
@ msau42 c'est étrange, car je suis à peu près sûr que même quand il est revenu en ligne, les pods étaient toujours bloqués. les nouveaux pods démarrent et se montent bien.
J'utilise le serveur NFS sur kubernetes suivi de cet exemple et cela arrive assez souvent malheureusement ..
@ shinebayar-g J'ai également suivi ce guide, mais maintenant je me suis débarrassé des PV et des PVC et j'ai défini mon volume directement dans le déploiement, comme ceci:
volumeMounts:
- mountPath: /my-pod-mountpoint
name: my-vol
volumes:
- name: my-vol
nfs:
server: "10.x.x.x"
path: "/path/on/server"
readOnly: false
Je n'ai eu aucun problème depuis, j'ai changé cela seulement environ une semaine en espérant que la configuration plus simple serait plus fiable .. voyons voir ... Peut-être que cela résoudra le problème?
Pour contourner le problème, j'ai écrit un script qui saisit quelques dernières lignes de /var/log/syslog
et recherche des erreurs comme "Opération pour ... supprimer / var / lib / kubelet / pods ... répertoire non vide" ou "nfs. ..le périphérique est occupé ... unmount.nfs "ou" descripteur de fichier NFS périmé ".
Ensuite, il extrait le répertoire complet du pod_id ou du pod et voit ses montages (comme mount | grep $pod_id
), puis tout démonte et supprime les répertoires correspondants. Finalement, kubelet fait le reste et arrête et supprime les pods en douceur. Plus de pods à l'état de terminaison.
J'ai mis ce script dans cron pour qu'il s'exécute toutes les minutes. En conséquence - aucun problème pour l'instant, même 3-4 mois plus tard.
Remarque : je sais que cette approche n'est pas fiable et qu'elle nécessite une vérification à chaque mise à niveau du cluster, mais cela fonctionne!
J'utilise la version 1.10 et j'ai rencontré ce problème aujourd'hui et je pense que mon problème est lié au problème du montage d'un volume secret qui aurait pu laisser une tâche en suspens et laisser le pod en état de terminaison pour toujours.
J'ai dû utiliser l'option --grace-period = 0 --force pour terminer les pods.
root@ip-10-31-16-222:/var/log# journalctl -u kubelet | grep dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds
Mar 20 15:50:31 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: I0320 15:50:31.179901 528 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume "config-volume" (UniqueName: "kubernetes.io/configmap/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-config-volume") pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds" (UID: "e3d7c57a-4b27-11e9-9aaa-0203c98ff31e")
Mar 20 15:50:31 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: I0320 15:50:31.179935 528 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume "default-token-xjlgc" (UniqueName: "kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-default-token-xjlgc") pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds" (UID: "e3d7c57a-4b27-11e9-9aaa-0203c98ff31e")
Mar 20 15:50:31 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: I0320 15:50:31.179953 528 reconciler.go:207] operationExecutor.VerifyControllerAttachedVolume started for volume "secret-volume" (UniqueName: "kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume") pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds" (UID: "e3d7c57a-4b27-11e9-9aaa-0203c98ff31e")
Mar 20 15:50:31 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:31.310200 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:50:31.810156118 +0000 UTC m=+966792.065305175 (durationBeforeRetry 500ms). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:50:31 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:31.885807 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:50:32.885784622 +0000 UTC m=+966793.140933656 (durationBeforeRetry 1s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxxxx-com\" not found"
Mar 20 15:50:32 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:32.987385 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:50:34.987362044 +0000 UTC m=+966795.242511077 (durationBeforeRetry 2s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:50:35 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:35.090836 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:50:39.090813114 +0000 UTC m=+966799.345962147 (durationBeforeRetry 4s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:50:39 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:39.096621 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:50:47.096593013 +0000 UTC m=+966807.351742557 (durationBeforeRetry 8s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:50:47 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:50:47.108644 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:51:03.10862005 +0000 UTC m=+966823.363769094 (durationBeforeRetry 16s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:51:03 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:51:03.133029 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:51:35.133006645 +0000 UTC m=+966855.388155677 (durationBeforeRetry 32s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxxx-com\" not found"
Mar 20 15:51:35 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:51:35.184310 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:52:39.184281161 +0000 UTC m=+966919.439430217 (durationBeforeRetry 1m4s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxx-com\" not found"
Mar 20 15:52:34 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:52:34.005027 528 kubelet.go:1640] Unable to mount volumes for pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)": timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]; skipping pod
Mar 20 15:52:34 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:52:34.005085 528 pod_workers.go:186] Error syncing pod e3d7c57a-4b27-11e9-9aaa-0203c98ff31e ("dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)"), skipping: timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]
Mar 20 15:52:39 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:52:39.196332 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:54:41.196308703 +0000 UTC m=+967041.451457738 (durationBeforeRetry 2m2s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxxx-com\" not found"
Mar 20 15:54:41 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:54:41.296252 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:56:43.296229192 +0000 UTC m=+967163.551378231 (durationBeforeRetry 2m2s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxxx-com\" not found"
Mar 20 15:54:48 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:54:48.118620 528 kubelet.go:1640] Unable to mount volumes for pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)": timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]; skipping pod
Mar 20 15:54:48 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:54:48.118681 528 pod_workers.go:186] Error syncing pod e3d7c57a-4b27-11e9-9aaa-0203c98ff31e ("dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)"), skipping: timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]
Mar 20 15:56:43 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:56:43.398396 528 nestedpendingoperations.go:267] Operation for "\"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\" (\"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\")" failed. No retries permitted until 2019-03-20 15:58:45.398368668 +0000 UTC m=+967285.653517703 (durationBeforeRetry 2m2s). Error: "MountVolume.SetUp failed for volume \"secret-volume\" (UniqueName: \"kubernetes.io/secret/e3d7c57a-4b27-11e9-9aaa-0203c98ff31e-secret-volume\") pod \"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds\" (UID: \"e3d7c57a-4b27-11e9-9aaa-0203c98ff31e\") : secrets \"data-platform.xxxx-com\" not found"
Mar 20 15:57:05 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:57:05.118566 528 kubelet.go:1640] Unable to mount volumes for pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)": timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]; skipping pod
Mar 20 15:57:05 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:57:05.118937 528 pod_workers.go:186] Error syncing pod e3d7c57a-4b27-11e9-9aaa-0203c98ff31e ("dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)"), skipping: timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]
Mar 20 15:59:22 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:59:22.118593 528 kubelet.go:1640] Unable to mount volumes for pod "dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)": timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume config-volume default-token-xjlgc]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]; skipping pod
Mar 20 15:59:22 ip-10-31-16-222.eu-west-2.compute.internal kubelet[528]: E0320 15:59:22.118624 528 pod_workers.go:186] Error syncing pod e3d7c57a-4b27-11e9-9aaa-0203c98ff31e ("dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds_default(e3d7c57a-4b27-11e9-9aaa-0203c98ff31e)"), skipping: timeout expired waiting for volumes to attach or mount for pod "default"/"dp-tag-change-ingestion-com-depl-5bd59f74c4-589ds". list of unmounted volumes=[secret-volume config-volume default-token-xjlgc]. list of unattached volumes=[secret-volume config-volume default-token-xjlgc]
J'ai trouvé que si vous utilisez --force --grace-period=0
tout ce qu'il fait est de supprimer la référence ... si vous ssh dans le nœud, vous verrez toujours les conteneurs docker en cours d'exécution.
Dans mon cas, il y avait Out of memory sur le nœud.
Et le noyau a tué l'agent de cil, ce qui semble perturber la terminaison des gousses.
Je viens de redémarrer le nœud et il s'est effacé.
D'après mon expérience, sudo systemctl restart docker
sur le nœud aide (mais il y a évidemment des temps d'arrêt).
Et cela se produit encore périodiquement sur des nœuds aléatoires qui sont soit A) proches des limites de mémoire, soit B) en manque de processeur (soit en raison d'un problème kswapd0 qui pourrait encore être lié à la mémoire, soit en charge réelle)
Les problèmes disparaissent après 90 jours d'inactivité.
Marquez le problème comme récent avec /remove-lifecycle stale
.
Les problèmes périmés pourrissent après 30 jours d'inactivité supplémentaires et finissent par se fermer.
Si ce problème peut être résolu en toute sécurité maintenant, veuillez le faire avec /close
.
Envoyez vos commentaires à sig-testing, kubernetes / test-infra et / ou fejta .
/ cycle de vie périmé
Les problèmes périmés pourrissent après 30 jours d'inactivité.
Marquez le problème comme récent avec /remove-lifecycle rotten
.
Les problèmes pourris se ferment après 30 jours supplémentaires d'inactivité.
Si ce problème peut être résolu en toute sécurité maintenant, veuillez le faire avec /close
.
Envoyez vos commentaires à sig-testing, kubernetes / test-infra et / ou fejta .
/ cycle de vie pourri
Les problèmes pourris se ferment après 30 jours d'inactivité.
Rouvrez le problème avec /reopen
.
Marquez le problème comme récent avec /remove-lifecycle rotten
.
Envoyez vos commentaires à sig-testing, kubernetes / test-infra et / ou fejta .
/Fermer
@ fejta-bot: Clôture de ce numéro.
En réponse à cela :
Les problèmes pourris se ferment après 30 jours d'inactivité.
Rouvrez le problème avec/reopen
.
Marquez le problème comme récent avec/remove-lifecycle rotten
.Envoyez vos commentaires à sig-testing, kubernetes / test-infra et / ou fejta .
/Fermer
Les instructions pour interagir avec moi en utilisant les commentaires PR sont disponibles ici . Si vous avez des questions ou des suggestions concernant mon comportement, veuillez signaler un problème avec le
C'est encore un problème très actif, k8s 1.15.4 et RHEL Docker 1.13.1. Tout le temps les pods restent dans Terminating
mais le conteneur est déjà parti, et k8s ne peut pas se comprendre, mais nécessite une interaction humaine. Rend le script de test réel PITA.
/rouvrir
/ remove-lifecycle pourri
@tuminoid : Vous ne pouvez pas rouvrir un problème / PR à moins que vous ne l'ayez créé ou que vous ne soyez un collaborateur.
En réponse à cela :
C'est encore un problème très actif, k8s 1.15.4 et RHEL Docker 1.13.1. Tout le temps les pods restent dans
Terminating
mais le conteneur est déjà parti, et k8s ne peut pas se comprendre, mais nécessite une interaction humaine. Rend le script de test réel PITA./rouvrir
/ remove-lifecycle pourri
Les instructions pour interagir avec moi en utilisant les commentaires PR sont disponibles ici . Si vous avez des questions ou des suggestions concernant mon comportement, veuillez signaler un problème avec le
/rouvrir
/ remove-lifecycle pourri
Idem ici: le pod est bloqué en phase de fin pendant plus de 19 minutes. Le conteneur est terminé avec succès, mais Kubernetes pense toujours qu'il doit attendre quelque chose.
Name: worker-anton-nginx-695d8bd9c6-7q4l9
Namespace: anton
Priority: 0
Status: Terminating (lasts 19m)
Termination Grace Period: 30s
IP: 10.220.3.36
IPs: <none>
Controlled By: ReplicaSet/worker-anton-nginx-695d8bd9c6
Containers:
worker:
Container ID: docker://12c169c8ed915bc290c14c854a6ab678fcacea9bb7b1aab5512b533df4683dd6
Port: 8080/TCP
Host Port: 0/TCP
State: Terminated
Exit Code: 0
Started: Mon, 01 Jan 0001 00:00:00 +0000
Finished: Mon, 01 Jan 0001 00:00:00 +0000
Ready: False
Restart Count: 0
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Events: <none>
Pas d'événements, pas de journaux ...
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-17T17:16:09Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.8-gke.2", GitCommit:"188432a69210ca32cafded81b4dd1c063720cac0", GitTreeState:"clean", BuildDate:"2019-10-21T20:01:24Z", GoVersion:"go1.12.11b4", Compiler:"gc", Platform:"linux/amd64"}
a
Pouvez-vous vérifier vos journaux kubelet et voir s'il y a des messages concernant l'échec du démontage du volume ou des pods orphelins?
J'ai vu ça aussi
E1206 03: 05: 40.247161 25653 kubelet_volumes.go: 154] Pod orphelin "0406c4bf-17e3-4613-a526-34e8a6cee208" trouvé, mais les chemins de volume sont toujours présents sur le disque: il y a eu un total de 8 erreurs similaires à celle-ci. Augmentez la verbosité pour les voir.
Je l'ai vu aussi. Impossible de vérifier les journaux car kubectl se plaint qu'il ne peut pas se connecter au conteneur Docker et ne peut pas créer de nouveau pod en raison de l'existence actuelle du pod de terminaison. Plutôt ennuyeux.
Le vivre aussi et c'est plutôt ennuyeux d'avoir à confirmer si Kubernetes a correctement nettoyé les anciens pods ou non.
Espérons que cela sera bientôt résolu.
Et qu'en est-il de ce problème? At-il résolu? J'ai la même chose, mais cela ne commence pas à se produire immédiatement, mais quelque temps après le début du nœud, si vous réinitialisez le nœud, alors pendant un certain temps, tout va bien
Pourriez-vous vérifier s'il y a des finaliseurs sur le pod qui l'empêchent d'être supprimé?
Il n'y a pas de finaliseurs dans le pod émis
Pour info, j'ai résolu ce problème avec une suppression forcée en utilisant:
kubectl delete pods <pod> --grace-period=0 --force
Et je pense que cela a réussi à terminer le pod. Depuis, je n'ai plus ressenti le problème. J'ai peut-être mis à jour depuis lors, il pourrait donc s'agir d'un problème de version, mais pas à 100% depuis que je n'ai pas vu le problème depuis si longtemps.
Cela m'arrive lorsqu'un pod manque de mémoire. Il ne se termine que lorsque l'utilisation de la mémoire diminue à nouveau.
Pour info, j'ai résolu ce problème avec une suppression forcée en utilisant:
kubectl delete pods <pod> --grace-period=0 --force
Et je pense que cela a réussi à terminer le pod. Depuis, je n'ai plus ressenti le problème. J'ai peut-être mis à jour depuis lors, il pourrait donc s'agir d'un problème de version, mais pas à 100% depuis que je n'ai pas vu le problème depuis si longtemps.
Cela a fonctionné pour moi
kubectl delete pods <pod> --grace-period=0 --force
est un correctif temporaire, je ne veux pas exécuter un correctif manuel à chaque fois qu'il y a un basculement pour l'un des pods affectés. Mes pods de gardien de zoo ne se terminent pas dans minikube et sur Azure AKS.
Mise à jour du 9 mars 2020
J'ai utilisé un hook de cycle de vie preStop pour terminer manuellement mes pods. Mes pods de gardien de zoo étaient bloqués dans un état de terminaison et ne répondaient pas à un signal de terme provenant du conteneur. J'avais essentiellement le même manifeste en cours d'exécution ailleurs et tout se termine correctement, aucune idée de la cause première.
même problème, super ennuyeux
même problème: (pods bloqués à la fin, depuis 3 jours
Pour info, j'ai résolu ce problème avec une suppression forcée en utilisant:
kubectl delete pods <pod> --grace-period=0 --force
Et je pense que cela a réussi à terminer le pod. Depuis, je n'ai plus ressenti le problème. J'ai peut-être mis à jour depuis lors, il pourrait donc s'agir d'un problème de version, mais pas à 100% depuis que je n'ai pas vu le problème depuis si longtemps.
De plus, l'indicateur --force
ne signifie pas nécessairement que le pod est supprimé, il n'attend tout simplement pas la confirmation (et laisse tomber la référence, à ma connaissance). Comme indiqué par l'avertissement The resource may continue to run on the cluster indefinetely
.
Edit: j'étais mal informé. Voir le commentaire d'elrok123s ci-dessous pour plus de motivation.
Pour info, j'ai résolu ce problème avec une suppression forcée en utilisant:
kubectl delete pods <pod> --grace-period=0 --force
Et je pense que cela a réussi à terminer le pod. Depuis, je n'ai plus ressenti le problème. J'ai peut-être mis à jour depuis lors, il pourrait donc s'agir d'un problème de version, mais pas à 100% depuis que je n'ai pas vu le problème depuis si longtemps.
De plus, l'indicateur
--force
ne signifie pas nécessairement que le pod est supprimé, il n'attend tout simplement pas la confirmation (et laisse tomber la référence, à ma connaissance). Comme indiqué par l'avertissementThe resource may continue to run on the cluster indefinetely
.
Correct, mais le fait est que --grace-period=0
force la suppression :) je ne sais pas pourquoi votre commentaire est pertinent: /
Je pense que son commentaire est pertinent car le conteneur sous-jacent
(docker ou autre) est peut-être toujours en cours d'exécution et n'est pas entièrement supprimé .., Le
l'illusion de "supprimé" est parfois un peu trompeuse
Le jeu.4 juin 2020 à 09:16, Conner Stephen McCabe <
[email protected]> a écrit:
Pour info, j'ai résolu ce problème avec une suppression forcée en utilisant:
kubectl supprimer des pods
--grace-period = 0 --force Et je pense que cela a réussi à terminer le pod. Depuis, je
n'ont pas rencontré à nouveau le problème. J'ai peut-être mis à jour depuis,
cela pourrait donc être un problème de version, mais pas à 100% car il y a si longtemps
J'ai vu le problème.De plus, l'indicateur --force ne signifie pas nécessairement que le pod est supprimé, il
n'attend tout simplement pas la confirmation (et laisse tomber la référence, à mon
compréhension). Comme indiqué par l'avertissement La ressource peut continuer à s'exécuter
sur le cluster indéfiniment.Correct, mais le fait est que --grace-period = 0 force la suppression à
arriver :) je ne sais pas pourquoi votre commentaire est pertinent: /-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/kubernetes/kubernetes/issues/51835#issuecomment-638840136 ,
ou se désinscrire
https://github.com/notifications/unsubscribe-auth/AAH34CDZF7EJRLAQD7OSH2DRU6NCRANCNFSM4DZKZ5VQ
.
C'est en effet mon point; l'utilisation de cette méthode --force
risque de laisser la charge sous-jacente alourdir vos nœuds et ne résout pas nécessairement le problème d'origine. Dans le pire des cas, c'est un "Si je ne peux pas le voir, il n'existe pas" -fixe qui peut finir par être encore plus difficile à détecter.
Ou dites-vous que --grace-period=0
est garanti pour forcer la suppression du conteneur sous-jacent, @ elrok123?
Si tel est le cas, mon commentaire est basé sur des connaissances erronées et n'est pas pertinent, mais si le risque de laisser des conteneurs en cours d'exécution persiste lors de l'utilisation de --grace-period=0
, mon point de vue l'est également.
@oscarlofwenhamn Autant que je sache, cela exécute efficacement sigkill sur tous les processus de ce pod, garantissant la suppression des processus zombie (source: Point 6 sous `` Termination of Pods '' - https://kubernetes.io/docs/concepts / workloads / pods / pod / # : ~: text = Lorsque% 20the% 20grace% 20period% 20 expire, période% 200% 20 (suppression immédiate de% 20).), et suppression réussie du pod (peut ne pas se produire immédiatement, mais cela se produira se produire.)
Le guide mentionne qu'il supprime la référence, mais ne supprime pas le pod lui-même (source: 'Forcer la suppression' - https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/ ), mais la période de grâce = 0 devrait effectivement tuer votre pod, mais pas immédiatement.
Je lis juste la documentation et les méthodes recommandées pour gérer le scénario que j'ai rencontré. Le problème que j'ai spécifiquement rencontré n'était pas un problème récurrent, et quelque chose qui s'est produit une fois; Je pense que le VRAI correctif pour cela est de corriger votre déploiement, mais jusqu'à ce que vous y arriviez, cette méthode devrait vous aider.
@ elrok123 Brillant - J'étais en effet mal informé. J'ai mis à jour ma réponse ci-dessus, en faisant référence à cette explication. Merci pour la réponse détaillée et une autre méthode motivée pour traiter les pods gênants. À votre santé!
ont actuellement des pods bloqués pendant plus de 2 jours dans l'état de terminaison.
Pour moi, l'espace de noms est bloqué dans Terminating
. Aucun pod n'est répertorié. Pas de services ... rien. L'espace de noms est vide. Toujours ... coincé dans Terminating.
@JoseFMP utilise kubectl pour demander le yaml à partir de l'espace de noms, il peut avoir des finaliseurs qui retardent le processus.
@JordyBottelier Merci.
Aucun finaliseur. Toujours bloqué Terminating
@JoseFMP voici un script pour le tuer complètement (efficacement le nucléaire), enregistrez-le simplement et exécutez ./script_name
''
set -eo pipefail
die () {echo "$ *" 1> & 2; sortie 1; }
avoir besoin() {
dont "$ 1" &> / dev / null || die "Le binaire '$ 1' est manquant mais obligatoire"
}
besoin de "jq"
besoin de "curl"
besoin de "kubectl"
PROJET = "1 $"
décalage
test -n "$ PROJET" || die "Arguments manquants: kill-ns
proxy kubectl &> / dev / null &
PROXY_PID = $!
killproxy () {
tuer $ PROXY_PID
}
piège killproxy EXIT
sleep 1 # donne au proxy une seconde
kubectl récupère l'espace de noms "$ PROJECT" -o json | jq 'del (.spec.finalizers [] | select ("kubernetes"))' | curl -s -k -H "Content-Type: application / json" -X PUT -o / dev / null --data-binary @ - http: // localhost : 8001 / api / v1 / namespaces / $ PROJECT / finalize && echo "Espace de noms tué: $ PROJECT" `` `
J'ai aussi apparemment rencontré cela, avec plusieurs pods bloqués dans la terminaison, y compris un pod qui n'est plus visible nulle part dans mon infrastructure mais qui fonctionne toujours comme un fantôme (il sert les demandes et je peux voir les demandes traitées même avec une échelle de déploiement de zéro).
Je n'ai aucune visibilité ni contrôle sur ce pod et me demande comment je suis censé résoudre une situation comme celle-ci sans fermer tous les nœuds de force?
J'ai aussi apparemment rencontré cela, avec plusieurs pods bloqués dans la terminaison, y compris un pod qui n'est plus visible nulle part dans mon infrastructure mais qui fonctionne toujours comme un fantôme (il sert les demandes et je peux voir les demandes traitées même avec une échelle de déploiement de zéro).
Je n'ai aucune visibilité ni contrôle sur ce pod et me demande comment je suis censé résoudre une situation comme celle-ci sans fermer tous les nœuds de force?
vous devrez accéder au docker sur le nœud.
Vous pouvez utiliser mon dink
(https://github.com/Agilicus/dink) qui affichera un pod avec un shell avec un accès docker, ou ssh vers le pod.
docker ps -a
docker stop ####
bonne chance.
Merci pour la direction.
J'ai finalement réussi à résoudre ce problème, mais je suis toujours un peu perplexe sur la façon dont cela pourrait arriver (pour moi, le pod était complètement invisible). Comme c'était en production, les choses étaient un peu mouvementées et je n'ai pas pu effectuer de diagnostics, mais si cela se reproduit, j'espère que je pourrai faire un meilleur rapport de bogue.
Voyant un symptôme similaire, les pods sont bloqués en fin (il est intéressant de noter qu'ils ont tous une sonde de type exec pour la préparation / la vivacité). En regardant les journaux, je peux voir: kubelet [1445]: I1022 10: 26: 32.203865 1445 prober.go: 124] Sonde de préparation pour "test-service-74c4664d8d-58c96_default (822c3c3d-082a-4dc9-943c-19f04544713e): test -service "a échoué (échec): l'exécution de l'exécution OCI a échoué: échec de l'exécution: impossible d'exécuter un conteneur qui s'est arrêté: inconnu. Ce message se répète pour toujours et changer la sonde exec en tcpSocket semble permettre au pod de se terminer (basé sur un test, suivra). Le pod semble avoir l'un des conteneurs "Running" mais pas "Ready", les journaux du conteneur "Running" s'affichent comme si le service s'était arrêté.
Cela se produit sur containerd 1.4.0 lorsque la charge du nœud est élevée et que vm.max_map_count est défini sur une valeur plus élevée que la valeur par défaut, le containerd-shim ne vide pas le fifo stdout et bloque en attendant qu'il soit drainé, tandis que dockerd ne parvient pas à atteindre le événement / acquitter de containerd que les processus ont disparu
@discanto merci d'avoir partagé cette information. Le problème est-il résolu ou suivi?
@ Random-Liu
Le bug a ouvert plus de 3 ans. Les pods bloqués à la fin peuvent être causés par diverses raisons. Lorsque vous signalez votre cas, il serait très utile de publier certains des journaux de kubelet pour voir si les pods sont bloqués.
Commentaire le plus utile
J'ai le même problème sur Kubernetes 1.8.2 sur IBM Cloud. Une fois les nouveaux pods démarrés, les anciens pods sont bloqués en se terminant.
version kubectl
Server Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.2-1+d150e4525193f1", GitCommit:"d150e4525193f1c79569c04efc14599d7deb5f3e", GitTreeState:"clean", BuildDate:"2017-10-27T08:15:17Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
J'ai utilisé
kubectl delete pod xxx --now
ainsi quekubectl delete pod foo --grace-period=0 --force
en vain.