
Посмотрим правде в глаза: команды Kubectl Restart Pod нет. Вот что вы можете попробовать вместо этого
6 декабря 2022 г.Многие операторы Kubernetes ищут команду, например "kubectl restart pod". это позволит им перезапустить модули, которые застряли в состоянии ожидания или иным образом причиняют вред. Однако печальная правда заключается в том, что в Kubernetes такой команды нет.
Но не сдавайтесь — есть несколько отличных обходных путей, которые помогут перезапустить неисправные модули и вернуть их в работу. Я покажу пять из них.
Что такое кубектл?
Kubernetes — это закрытая система, состоящая из главных и рабочих узлов. Единственный способ связаться с ним — через сервер API. Сервер является ключевым компонентом плоскости управления Kubernetes и предоставляет HTTP REST API, который обеспечивает связь между пользователями, кластерами и любыми внешними компонентами.
API считается внешним интерфейсом или основным пользовательским интерфейсом платформы Kubernetes. Запрос, обновление или управление состоянием ресурсов или объектов на платформе Kubernetes осуществляется путем взаимодействия с Kubernetes API через kubectl. – клиентской библиотеке – или путем прямого запроса REST.
kubectl — это наиболее распространенный способ отправки запросов к плоскости управления Kubernetes, выполнения операций Kubernetes, управление операциями автоматического масштабирования, управление развертывание программного обеспечения для контейнерных приложений, проверка ресурсов кластера и управление ими, а также выполнение задач мониторинга и системных журналов.
Состояния подов
У модулей Kubernetes пять состояний жизненного цикла:
* Ожидание — этот статус указывает на то, что один или несколько контейнеров еще не созданы в поде. * Выполняется — все контейнеры созданы и модуль развернут на узле. В этот момент контейнеры либо работают, либо запускаются, либо перезапускаются. * Успех — все контейнеры в поде успешно завершены без перезапуска. * Failed — все контейнеры завершили работу, и по крайней мере один контейнер вышел из строя. * Неизвестно — невозможно получить статус модуля.
Когда вам нужно «перезапустить» модуль?
Под, на котором работает один или несколько контейнеров, — это наименьшая единица, управляемая в Kubernetes. Он работает до тех пор, пока не будет заменен новым развертыванием. Поэтому, строго говоря, модуль не может быть перезапущен и должен быть заменен.
Однако при определенных обстоятельствах модуль необходимо «перезапустить», например, если он завис в «завершенном» состоянии или если в нем есть ошибки, которые нельзя исправить без перезапуска. Могут возникнуть ситуации, когда вам потребуется перезапустить модуль после внесения изменений в конфигурацию, таких как изменение ограничений ресурсов для ограничения ограничений памяти модуля или изменение постоянного хранилища тома, которое использует модуль.
Поскольку в Kubernetes нет команды перезапуска kubectl для модулей, существует несколько способов «перезапустить» модуль с помощью kubectl — мы рассмотрим их ниже.
Перезапуск модулей Kubernetes с помощью kubectl
перезапуск развертывания kubectl
Команда перезапуска развертывания может помочь вам легко перезапустить модули Kubernetes. Когда вы используете эту опцию, контроллер выключает один модуль за раз, используя ReplicaSet для добавления новых модулей, пока он не заменит все старые модули более новыми. Этот вариант идеально подходит для перезапуска модулей, не затрагивая и не закрывая приложение.
Вот команда перезапуска развертывания kubectl:
развертывание kubectl, перезапуск развертывания <deployment_name> -n <пространство имен>
kubectl удалить модуль
Kubernetes предоставляет декларативный API, что означает, что объект API модуля использует команду удаления модуля kubectl. Он автоматически воссоздает модуль, чтобы он соответствовал ожидаемому. Однако если ReplicaSet управляет множеством объектов pod, будет сложно удалить каждый из них вручную. Следующая команда может помочь вам удалить весь ReplicaSet:
kubectl удалить набор реплик <name> -n <пространство имен>
Масштабирование количества реплик
Команда масштабирования позволяет изменить количество разрешенных реплик неисправного модуля. Обратите внимание: если вы установите для этого значения нулевое значение, модуль отключится:
масштабное развертывание kubectl [deployment_name] --replicas=0
Вы можете перезапустить модуль, используя ту же команду, но задав количество реплик больше нуля:
масштабное развертывание kubectl [deployment_name] --replicas=1
Если вы установите количество реплик равным нулю, Kubernetes уничтожит все реплики, которые ему не нужны, в то время как установка числа выше нуля указывает Kubernetes создавать новые реплики с другими именами, чем старые. Используйте команду kubectl get pods, чтобы проверить состояние модулей и просмотреть новые имена.
Изменение аннотаций модуля
Добавление или изменение аннотации может привести к замене модуля, поскольку Kubernetes должен заменить модуль, чтобы применить это изменение. Вот команда, которую вы можете использовать для применения аннотации:
kubectl аннотировать модули my-pod app-version="2" --overwrite
Команда kubectl annotate обновляет аннотацию app-version в my-pod, а флаг --overwrite указывает Kubectl применить это изменение, даже если аннотация существует. В противном случае вы можете добавлять новые аннотации только в качестве меры предосторожности, чтобы предотвратить случайные изменения.
В качестве альтернативы можно обновить переменные среды развертывания, чтобы добиться аналогичного эффекта. Используйте этот вариант, если вы уже предоставляете номер версии приложения, дату развертывания или идентификатор сборки в среде.
kubectl установить развертывание окружения my-deployment APP_VERSION="2"
Использование переменных среды
Вы можете изменить переменную среды, чтобы принудительно перезапустить модули Kubernetes и синхронизировать их с вашими изменениями. Например, попробуйте изменить дату развертывания контейнера с помощью следующей команды:
kubectl установить развертывание env [deployment_name] DEPLOY_DATE="$(date)"
Надеюсь, это поможет! В следующий раз, когда вы успешно перезапустите свою капсулу, кофе будет готов.
п**
Оригинал