Карантинный стручок и создать замену - PullRequest
0 голосов
/ 16 апреля 2020

У меня странная среда, в которой я в настоящее время не могу записывать логи модуля k8s в службу журналов (loggly, sumo, et c ...). Иногда у одного из модулей возникают проблемы в prod, и исправление заключается в удалении модуля и его замене, которым управляет операционная группа (у меня нет прямого доступа для этого).

Что бы я хотел Например, нужно сохранить модуль с проблемами, чтобы трафик c не направлялся на него и не заменялся контроллером. Таким образом, я могу копаться в модуле и журналах, чтобы определить, что произошло.

Я изучил маркировку, чтобы сделать это здесь: https://kubernetes.io/docs/concepts/configuration/overview/

Важный раздел это

Вы можете манипулировать метками для отладки. Поскольку контроллеры Kubernetes (такие как ReplicaSet) и Сервисы совпадают с модулями, использующими метки селектора, удаление соответствующих меток из модуля остановит его для рассмотрения контроллером или для обслуживания traffi c службой. Если вы удалите метки существующего Pod, его контроллер создаст новый Pod, чтобы занять его место. Это полезный способ отладки ранее «живого» модуля в «карантинной» среде. Для интерактивного удаления или добавления меток используйте ярлык kubectl.

Я вошел и отредактировал модуль напрямую, используя:

kubectl edit <pod> 

Затем полностью удалил раздел меток и сохранил.

Когда я так поступаю, кажется, ничего не происходит. Стручок остается и не заменяется, насколько я вижу, проверяя:

kubectl get pods

Он перемещен куда-то, чего я не вижу? Должно ли удаление ярлыков работать так, как я ожидаю (Controller создает новый модуль на его месте)?

Любая помощь будет принята с благодарностью. Спасибо.

Редактировать 1:

Удаление или замена ярлыков с модулей, как предложено в публикации mdaniel, не удаляет модули и ускоряет замену.

Я развертываю с помощью Helm, поэтому метки Run нет, как в примере, но у меня есть раздел выбора службы и настройки ярлыков модуля, например:

Раздел yaml Service Selector:

 selector:
    app.kubernetes.io/instance: foo
    app.kubernetes.io/name: bar

Секция ярлыка Pod:

  labels:
    app.kubernetes.io/instance: foo
    app.kubernetes.io/name: bar
    controller-revision-hash: some-hash
    statefulset.kubernetes.io/pod-name: pod-name

Я изменяю секцию ярлыка Pod на:

  labels:
    app.kubernetes.io/instance: i-am-debugging-this-pod
    app.kubernetes.io/name: i-am-debugging-this-pod
    controller-revision-hash: some-hash
    statefulset.kubernetes.io/pod-name: pod-name

И тогда ... ничего не происходит. Стручок просто продолжает пыхтеть. Кажется, это должно работать, но нада.

1 Ответ

0 голосов
/ 16 апреля 2020

Два ответа. Во-первых, вы можете сделать это с помощью вашего датчика готовности. Во-вторых, в любом случае, удаленные журналы стручков хранятся некоторое время, так что, может быть, просто использовать их? Используйте опцию -p для записи логов kubectl.

...