kubectl Drain не выселяет подов memcached из Helm

Я следую этому руководству в попытке обновить кластер Kubernetes на GKE без простоев. Я оцепил все старые узлы и выселил большинство модулей, но для пары узлов kubectl drain просто продолжает работать и больше не выселяет модули.

kubectl get pods --all-namespaces -o=wide показывает, что несколько модулей все еще работают в старом пуле, а когда я запускаю kubectl drain --ignore-daemonsets --force, он выводит предупреждение, объясняющее, почему он игнорирует большинство из них; единственные, о которых он не упоминает, - это модули, которые у меня запущены с memcached, которые были созданы через helm с использованием эту диаграмму.

Мы не слишком сильно полагаемся на memcached, поэтому я мог бы просто продолжить и удалить старый пул узлов на этом этапе и согласиться с кратковременным простоем для этой единственной службы. Но я бы предпочел иметь сценарий, который бы все это делал правильно, и я бы не знал, что делать в этот момент, если бы эти поды делали что-то более важное.

Итак, это каким-то образом ожидаемое поведение? Есть ли что-то в этой диаграмме управления, что заставляет эти капсулы отказываться от выселения? Есть ли другой тип флага принудительного / игнорирования, который мне нужно передать kubectl drain?


person Josh Warfield    schedule 05.01.2018    source источник
comment
Не могли бы вы добавить к вопросу ошибку, которую видите?   -  person Ahmet Alp Balkan    schedule 17.01.2018
comment
Если модули mencached находятся в сиротском состоянии, возможно, вы столкнулись с таким поведением   -  person Carlos    schedule 18.01.2018
comment
@AhmetAlpBalkan Нет сообщения об ошибке; команда drain просто прекращает вывод любых данных на стандартный вывод, но не завершается.   -  person Josh Warfield    schedule 18.01.2018
comment
@ Карлос, это возможно. Я не вижу сообщения error: replicationcontrollers "memcached" not found, но эта проблема возникла несколько версий назад, поэтому конкретные выходные данные могли измениться. Я все еще новичок в кубернетах; как мне определить, являются ли эти стручки сиротами?   -  person Josh Warfield    schedule 18.01.2018
comment
@Josh: Вы можете получить описание POD, чтобы узнать, он связан с контроллером репликации.   -  person Carlos    schedule 19.01.2018
comment
Я охватил кластер и развернул несколько модулей memcached в своем в случае, если капсулы также не были выселены. Я связался с командой документации, чтобы узнать, могут ли они предоставить дополнительную информацию.   -  person Carlos    schedule 26.01.2018


Ответы (1)


Связанная вами диаграмма управления содержит PodDisruptionBudget (PDB). kubectl drain не будет удалять модули, если это нарушит PDB (ссылка: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/, об этом упоминается в разделе "Как работают бюджеты нарушений").

Если minAvailable на вашем PDB равно количеству реплик вашего модуля, вы не сможете опорожнить узел. Учитывая, что https://github.com/kubernetes/charts/blob/master/stable/memcached/values.yaml имеет значение 3, я предполагаю, что это, скорее всего, источник вашей проблемы. Просто установите PDB minAvailable на единицу меньше, чем желаемое количество реплик, и он сможет перемещать ваши поды один за другим.

person Maciek Pytel    schedule 05.02.2018