Je viens de voir que certaines de mes gousses ont été expulsées par les kubernètes. Qu'est-ce qui va leur arriver? juste traîner comme ça ou je dois les supprimer manuellement?
Une solution rapide que j'utilise consiste à supprimer manuellement tous les modules expulsés après un incident. Vous pouvez utiliser cette commande:
kubectl get po -a --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete po \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c
En fonction de l'atteinte d'un { seuil d'expulsion } strict ou matériel, les conteneurs du pod seront fermés avec ou sans délai de grâce, la PodPhase
sera marquée en tant que Failed
et le pod sera supprimé. Si votre application s'exécute dans le cadre, par exemple, de un déploiement, un autre pod sera créé et planifié par Kubernetes - probablement sur un autre nœud ne dépassant pas ses seuils d’expulsion.
Sachez que l'expulsion ne doit pas nécessairement être provoquée par des seuils, mais peut également être invoquée via kubectl drain
à vide un nœud ou manuellement via Kubernetes API .
Equivalent OpenShift de la commande de Kalvin pour supprimer tous les pods 'Expulsés':
eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"
Les pods expulsés doivent être supprimés manuellement. Vous pouvez utiliser la commande suivante pour supprimer tous les pods dans l'état Error
.
kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
Voici le guide "officiel" pour savoir comment coder en dur le seuil (si vous ne voulez pas voir trop de modules expulsés): kube-control-manager
Mais un problème connu est de savoir comment installer kube-control-manager ...