Я только что видел, как кубернеты выселили некоторые из моих капсул. Что с ними будет? просто так болтаются или мне их вручную удалять?
kubernetes
ричлин
источник
источник
Evicted
состоянии уже 13 дней. Похоже, что выселенные стручки не удаляются (а может, это просто ошибка).DiskPressure
) , который можно найти с помощьюkubectl describe pods my-pod-name --namespace prod
Ответы:
Я использую быстрое обходное решение - вручную удалить все выселенные модули после инцидента. Вы можете использовать эту команду:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c
источник
-a
аргумент недействителен.Чтобы удалить модули в состоянии сбоя в пространстве имен
default
источник
status.phase=Evicted
. Мне удалось это сделатьkubectl -n default delete pods --field-selector=status.phase!=Running
. Но будьте осторожны, это удалит всеkubectl -n default get pods --field-selector=status.phase=Failed
сначала может быть полезно запустить .Evicted
меня от стручков.Выселенные стручки следует удалить вручную. Вы можете использовать следующую команду для удаления всех модулей в
Error
состоянии.kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
источник
В зависимости от того, был ли достигнут порог мягкого или жесткого выселения , контейнеры в модуле будут закрыты с льготным периодом или без него,
PodPhase
они будут помечены как,Failed
а модуль удален. Если ваше приложение работает как часть, например, развертывания, Kubernetes будет создавать и запланировать еще один модуль, вероятно, на другом узле, не превышающий пороговые значения для исключения.Учтите , что выселение не обязательно должно быть вызвано пороговыми значениями , но также может быть вызвано с помощью ,
kubectl drain
чтобы освободить узел или вручную через API Kubernetes .источник
kubectl get pods -n mynamespace
kubectl describe pod <pod>
говорит?kubectl describe
говорит: «Статус: сбой Причина: выселено Сообщение: Pod Узлу не хватило ресурса: [MemoryPressure]».Kube-controller-manager
существует по умолчанию при работающей установке K8s. Похоже, что по умолчанию не более 12500 завершенных модулей до того, как сработает сборщик мусора.Непосредственно из документации K8s: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager
источник
kubectl edit pod kube-controller-manager-<master_name> -n kube-system
это дает мнеpod is invalid
ошибку после сохранения файла конфигурации.Если у вас есть капсулы со
Completed
статусом, который вы хотите сохранить:kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
источник
На всякий случай кто-то хочет автоматически удалить все выселенные поды для всех пространств имен:
Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces
источник
OpenShift, эквивалент команды Калвина для удаления всех «выселенных» модулей:
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')"
источник
Еще одна команда bash для удаления выселенных подов
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
источник
Чтобы удалить все
Evicted
поды принудительно, вы можете попробовать эту однострочную команду:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'
Советы: используйте
p
модификаторs
commandsed
вместо вместо того,e
чтобы просто распечатать настоящую команду для выполнения задания удаления:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'
источник
Вот «официальное» руководство по жесткому кодированию порога (если вы не хотите видеть слишком много выселенных модулей): kube-controll-manager
Но известная проблема - как установить kube-controll-manager ...
источник
Другой способ еще с
awk
.Чтобы предотвратить любую человеческую ошибку, которая может свести меня с ума (удаление желаемых модулей), я проверяю перед результатом
get pods
команды:kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed
Если все выглядит хорошо, приступим:
kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \ awk '{system("kubectl -n my-ns delete pods " $1)}'
источник
Приведенная ниже команда удаляет все неудачные модули из всех пространств имен.
kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod
источник
команда ниже получит все выселенные модули из пространства имен по умолчанию и удалит их
kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}
источник