Хуки жизненного цикла контейнера являются базовыми механизмами, предоставляемыми Kubernetes. Они позволяют вставлять пользовательскую логику на ключевых этапах жизненного цикла контейнера. Эти хуки обеспечивают тонкий контроль процессов над контейнеризованными приложениями, позволяя приложениям лучше адаптироваться к динамическим характеристикам облачной нативной среды. CCE предоставляет следующие хуки жизненного цикла контейнера. Для получения дополнительной информации см. Container Lifecycle Hooks.
Команда запуска выполняется при старте контейнера. Она используется для определения основного процесса контейнера. Статус основного процесса определяет жизненный цикл контейнера. Если команда не выполнится и политика перезапуска не настроена, контейнер будет завершён.
По умолчанию команда по умолчанию выполняется при запуске образа. Чтобы запустить конкретную команду или переопределить настройку образа по умолчанию, необходимо выполнить определённые операции. По умолчанию контейнер выполняет предустановленную в образе команду запуска. Docker‑образы содержат набор полей метаданных для определения поведения при запуске, включая ENTRYPOINT и CMD. Если команды и аргументы (указанные в Command и Args) не заданы в спецификациях контейнера, используются значения по умолчанию, определённые при сборке образа.
Если команды и аргументы, используемые для запуска контейнера, задаются при создании рабочей нагрузки, команды по умолчанию ENTRYPOINT и CMD переопределяются при сборке образа. Правила следующие:
Image ENTRYPOINT | Image CMD | Команда для запуска контейнера | Аргумент для запуска контейнера | Выполненная команда |
|---|---|---|---|---|
[touch] | [/root/test] | Не задано | Не задано | [touch /root/test] |
[touch] | [/root/test] | [mkdir] | Не задано | [mkdir] |
[touch] | [/root/test] | Не задано | [/opt/test] | [touch /opt/test] |
[touch] | [/root/test] | [mkdir] | [/opt/test] | [mkdir /opt/test] |
Parameter | Example Value | Description | Example YAML |
|---|---|---|---|
Command | /run/server | Введите одну или несколько исполняемых команд. Если вам требуется несколько команд, разделите их разными строками. ПРИМЕЧАНИЕ: В случае нескольких команд рекомендуется запускать /bin/sh или другие shell команды. Другие команды используются в качестве параметров. |
|
Args | --port=8080 | Введите один или несколько аргументов. Если вам требуется несколько аргументов, разделите их разными строками. |
PostStart hook, хук жизненного цикла контейнера, предоставляемый Kubernetes, используется для выполнения задач инициализации, таких как регистрация сервисов и генерация динамической конфигурации, сразу после запуска основного процесса контейнера. Этот хук асинхронно вызывается kubelet и работает параллельно с основным процессом. Хотя PostStart hook выполняется асинхронно с основным процессом контейнера, если он занимает слишком много времени или приостановлен, контейнер может не перейти в состояние Running. Если выполнение PostStart hook не удалось, контейнер может не запуститься и будет завершён.
Метод обработки | Пример значения | Описание | Пример YAML |
|---|---|---|---|
CLI | /install.sh install_agent | Используется для выполнения команд в контейнере. Вам необходимо настроить Command. Формат команды: Command Arg[1] Arg[2]..., где Command обозначает системную команду или пользовательскую исполняемую программу. Если путь не указан, система ищет команду в пути по умолчанию. Если необходимо выполнить несколько команд, запишите их в скрипт в образе контейнера заранее и вызовите скрипт с помощью этой команды. The executable command должна выполняться синхронно или во фронтенде. Если она выполняется асинхронно или в бэкенде, hook жизненного цикла может не выполниться. |
|
HTTP-запрос | Путь: /nginx Порт: 80 Хост: 127.0.0.1 | Используется для инициирования HTTP-запроса. Связанные параметры описаны ниже:
|
|
Если контейнер падает или завершается аномально, хук PreStop не будет вызван. Период грации завершения pod начинается отсчёт до выполнения хука PreStop. Независимо от результата обработчика хука, контейнер будет завершён в течение периода грации завершения pod, если только финализатор не задерживает процесс завершения. Другие операции управления контейнером блокируются до завершения хука PreStop или до истечения периода грации завершения.
Parameter | Example Value | Description | Example YAML |
|---|---|---|---|
CLI | /uninstall.sh uninstall_agent | Используется для выполнения команд в контейнере. Необходимо настроить Command. Формат команды: Command Arg[1] Arg[2]..., где Command указывает на системную команду или пользовательскую исполняемую программу. Если путь не указан, система ищет команду в пути по умолчанию. Если необходимо выполнить несколько команд, запишите их в скрипт в образе контейнера заранее и вызовите скрипт с помощью этой команды. |
|
HTTP‑запрос | Path: /nginx Port: 80 Host: 127.0.0.1 | Используется для инициации HTTP‑запроса. Связанные параметры описаны ниже:
|
|
vim lifecycle.yaml
Содержимое файла выглядит следующим образом:
kubectl create -f lifecycle.yaml
Если отображается информация, аналогичная следующей, workload создаётся:
deployment.apps/nginx created
kubectl get deployment
Если все pod'ы workload доступны, workload создан.
NAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 4m59s