Хуки жизненного цикла контейнера — это основные механизмы, предоставленные Kubernetes. Они позволяют вставлять пользовательскую логику на ключевых фазах жизненного цикла контейнера. Эти хуки обеспечивают тонкое управление процессами контейнеризованных приложений, позволяя приложениям лучше адаптироваться к динамическим характеристикам облачной нативной среды. CCE предоставляет следующие хуки жизненного цикла контейнера. Для получения дополнительной информации см. Container Lifecycle Hooks.
Команда запуска выполняется при старте контейнера. Она используется для определения основного процесса контейнера. Статус основного процесса определяет жизненный цикл контейнера. Если команда не выполняется и политика перезапуска не настроена, контейнер будет завершён.
По умолчанию выполняется команда по умолчанию при запуске образа. Чтобы выполнить конкретную команду или изменить настройку образа по умолчанию, необходимо выполнить определённые операции. По умолчанию контейнер исполняет предустановленную команду запуска из образа. Docker‑образы содержат набор полей метаданных для определения поведения запуска, включая ENTRYPOINT and CMD. Если команды и аргументы (указанные Команда and Аргументы) не настроены в спецификациях контейнера, используются значения по умолчанию, заданные при сборке образа.
Если команды и аргументы, используемые для запуска контейнера, настроены при создании рабочей нагрузки, команды по умолчанию ENTRYPOINT and CMD переопределяются при сборке образа. Правила следующие:
ENTRYPOINT образа | CMD образа | Команда для запуска контейнера | Аргумент для запуска контейнера | Выполняемая команда |
|---|---|---|---|---|
[touch] | [/root/test] | Not set | Not set | [touch /root/test] |
[touch] | [/root/test] | [mkdir] | Not set | [mkdir] |
[touch] | [/root/test] | Not set | [/opt/test] | [touch /opt/test] |
[touch] | [/root/test] | [mkdir] | [/opt/test] | [mkdir /opt/test] |
Параметр | Example Value | Описание | Example YAML |
|---|---|---|---|
Команда | /run/server | Введите одну или несколько исполняемых команд. Если необходимо несколько команд, разделите их разными строками. NOTE: В случае нескольких команд рекомендуется запускать /bin/sh или другие оболочки команды. Другие команды используются как параметры. |
|
Аргументы | --port=8080 | Введите один или несколько аргументов. Если необходимо несколько аргументов, разделите их разными строками. |
Хук PostStart, хук жизненного цикла контейнера, предоставляемый Kubernetes, используется для выполнения задач инициализации, таких как регистрация сервисов и генерация динамических конфигураций, сразу после запуска основного процесса контейнера. Этот хук асинхронно инициируется kubelet и работает параллельно с основным процессом. Хотя хук PostStart выполняется асинхронно с основным процессом контейнера, если хук PostStart занимает слишком много времени или приостановлен, контейнер может не перейти в состояние Running состояния. Если хук PostStart не выполнится, контейнер может не запуститься и будет завершён.
Метод обработки | Example Value | Описание | Example YAML |
|---|---|---|---|
CLI | /install.sh install_agent | Используется для выполнения команд в контейнере. Необходимо настроить Команда. Формат команды: Command Arg[1] Arg[2]..., где Команда указывает на системную команду или пользовательскую исполняемую программу. Если путь не указан, система ищет команду в пути по умолчанию. Если необходимо выполнить несколько команд, заранее поместите их в скрипт в образе контейнера и вызовите скрипт с помощью этой команды. Эта исполняемая команда должна выполняться синхронно или во фронтенде. Если она выполняется асинхронно или в бэкэнде, хук жизненного цикла может не выполниться. |
|
HTTP запрос | Путь: /nginx Порт: 80 Хост: 127.0.0.1 | Используется для инициирования HTTP запроса. Связанные параметры описаны ниже:
|
|
Если контейнер падает или завершается аномально, хук PreStop не будет запущен. Период завершения работы pod начинается до выполнения хука PreStop. Независимо от результата обработчика хука, контейнер будет завершён в течение периода завершения pod, если только финализатор не задерживает процесс завершения. Другие операции управления контейнером блокируются до завершения хука PreStop или пока не истечёт период завершения.
Параметр | Example Value | Описание | Example YAML |
|---|---|---|---|
CLI | /uninstall.sh uninstall_agent | Используется для выполнения команд в контейнере. Необходимо настроить Команда. Формат команды: Command Arg[1] Arg[2]..., где Команда указывает на системную команду или пользовательскую исполняемую программу. Если путь не указан, система ищет команду в пути по умолчанию. Если необходимо выполнить несколько команд, заранее поместите их в скрипт в образе контейнера и вызовите скрипт с помощью этой команды. |
|
HTTP запрос | Путь: /nginx Порт: 80 Хост: 127.0.0.1 | Используется для инициирования HTTP запроса. Связанные параметры описаны ниже:
|
|
vim lifecycle.yaml
Содержимое файла выглядит следующим образом:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginxcommand: command:- sleep 3600 - sleep 3600 #Startup command #Startup command: приостанавливает текущий процесс на 3 600 сек.imagePullPolicy: Alwayslifecycle:postStart: postStart:exec: exec:command: command:- /bin/bash - /bin/bash- install.sh - install.sh ##Post-start commandPost-start command: Выполнить install.shinstall.sh command in /bin/bash/bin/bash.preStop: preStop:exec: exec:command: command:- /bin/bash - /bin/bash- uninstall.sh - uninstall.sh #Pre-stop command #Pre-stop command: Выполнить uninstall.shuninstall.sh command in /bin/bash/bin/bash.name: nginximagePullSecrets:- name: default-secret
kubectl create -f lifecycle.yaml
Если отображается информация, аналогичная следующей, рабочая нагрузка создаётся:
deployment.apps/nginx created
kubectl get deployment
Если все pod этой рабочей нагрузки доступны, нагрузка успешно создана.
NAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 4m59s