Как утилизировать стручки в Кубернетес - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу, чтобы мои стручки были изящно переработаны из моего развертывания после определенного периода времени, например, каждую неделю или месяц.Я знаю, что могу добавить для этого задание cron, если знаю команду Kubernetes.

Вопрос в том, как лучше всего это сделать в Кубернетесе.Какая команда позволит мне достичь этой цели?

Большое спасибо за помощь в этом.

Ответы [ 5 ]

0 голосов
/ 05 мая 2019

Поскольку OP rayhan обнаружил , обнаружил , и, как прокомментировано в kubernetes/kubernetes выпуск 13488 , достаточно kubectl-исправления переменной среды.

Но ... K8s 1.15 принесет kubectl rollout restart ... то есть, когда PR 77423 будет принято и объединено.

kubectl rollout restart теперь работает для наборов демонов и наборов состояний.

0 голосов
/ 27 декабря 2018

До сих пор я обнаружил, что следующая однострочная команда отлично подходит для моих целей.Я запускаю его у Дженкинса после успешной сборки.

kubectl patch deployment {deployment_name} -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"
0 голосов
/ 22 декабря 2018

Вы должны управлять своими модулями через контроллер более высокого уровня, такой как Deployment или StatefulSet.Если вы это сделаете и измените какие-либо подробности спецификации встроенных модулей, Deployment / StatefulSet / ... перезапустит все ваши модули для вас.Вероятно, самый минимальный способ сделать это - добавить аннотацию к спецификации модуля, в которой говорится, когда она была в последний раз развернута:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      annotations:
        deployed-at: 20181222

Возможно, для этого существует kubectl patch однострочная;если вы используете диспетчер развертывания, такой как , то вы можете просто передать текущую дату как «значение» (поле конфигурации) и вставить ее для вас.

Еслихотя вы хотите подумать о большем: различные базовые образы обычно имеют обновления безопасности и незначительные исправления ошибок, и если вы будете docker pull ubuntu:18.04 один раз в месяц или около того, вы получите эти обновления.Если вы активно знаете, что в любом случае хотите перезапускать свои модули каждый месяц, и у вас есть хороший конвейер CI / CD, подумайте о настройке запланированного задания в Jenkins или о том, что перестраивает и переустанавливает все, даже если нет изменений внижележащее исходное дерево.Это приведет к обновлению image:, что приведет к уничтожению и воссозданию всех модулей, и , и вы всегда будете в курсе последних обновлений безопасности.

0 голосов
/ 23 декабря 2018

Вы никогда не утилизируете пакеты вручную, что является явным препятствием для использования kuberentes.

Параметры:

  • Используйте формат declrative с помощью kubectl apply -f --prune

  • Использовать инструмент CI / CD, такой как Gitlab или Spinakar

  • Использовать Ksonnet

  • Используйте Knative

  • Напишите свой собственный инструмент CI / CD, который автоматизирует его

0 голосов
/ 22 декабря 2018

Если вам нужно вручную перезапустить Pod, вы можете запустить

'kubectl get pods | grep somename | awk' {print $ 1} '|xargs -i sh -c 'kubectl delete pod -o name {} && sleep 4'

для задания на основе таймера (например, из вашей системы CI), как это было предложено KIVagant в https://github.com/kubernetes/kubernetes/issues/13488#issuecomment-372456851

Эта ветка GitHub показывает, что в настоящее время нет единого лучшего подхода, и люди предлагают разные вещи.Я упоминаю об этом, так как он наиболее близок к вашему предложению и является простым решением, если вам действительно нужно это сделать.Общепринято, что вам следует избегать перезапуска заданий и использовать пробники, чтобы гарантировать автоматический перезапуск нездоровых модулей.

Периодические обновления (в отличие от перезапусков) отлично подходят для выполнения, особенно в виде непрерывных обновлений.Но если вы сделаете это, будьте осторожны, чтобы все обновления не маскировали проблемы.Если у вас есть блоки с утечками памяти или эти пулы подключений выхлопных газов, когда они работают долго, то вы должны попытаться заставить нездоровые модули сообщать о себе как о нездоровых - и потому, что они могут автоматически перезапускаться, и потому, что это поможет вам отслеживать кодпроблемы и решать их.

...