Хуки жизненного цикла контейнера являются базовыми механизмами, предоставляемыми Kubernetes. Они позволяют вставлять пользовательскую логику на ключевых этапах жизненного цикла контейнера. Эти хуки обеспечивают тонкий контроль процессов над контейнеризованными приложениями, позволяя приложениям лучше адаптироваться к динамическим характеристикам облачной нативной среды. CCE предоставляет следующие хуки жизненного цикла контейнера. Для получения дополнительной информации см Хуки жизненного цикла контейнера.
Команда запуска выполняется, когда контейнер запускается. Она используется для определения основного процесса контейнера. Состояние основного процесса определяет жизненный цикл контейнера. Если команда не может быть выполнена и политика перезапуска не настроена, контейнер будет завершён.
По умолчанию команда по умолчанию выполняется при запуске образа. Чтобы запустить конкретную команду или переписать настройку образа по умолчанию, необходимо выполнить определённые операции. По умолчанию контейнер выполняет предустановленную в образе команду запуска. Образы Docker содержат набор полей метаданных для определения поведения при запуске, включая ENTRYPOINT и CMD. Если команды и аргументы (указанные Команда и Аргументы) не настроены в спецификациях контейнера, используются значения по умолчанию, определённые при сборке образа.
Если команды и аргументы, используемые для запуска контейнера, настроены во время создания нагрузки, команды по умолчанию ENTRYPOINT и CMD перезаписываются во время сборки образа. Правила следующие:
Образ ENTRYPOINT | Образ 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] |
Параметр | Пример значения | Описание | Пример YAML |
|---|---|---|---|
Команда | /run/server | Введите одну или несколько исполняемых команд. Если вам нужны несколько команд, разделите их разными строками. ПРИМЕЧАНИЕ: В случае нескольких команд рекомендуется запускать /bin/sh или другой оболочка команды. Другие команды используются как параметры. |
|
Аргументы | --port=8080 | Введите один или несколько аргументов. Если вам нужны несколько аргументов, разделите их на разных строках. |
PostStart hook, хук жизненного цикла контейнера, предоставляемый Kubernetes, используется для выполнения задач инициализации, таких как регистрация сервиса и генерация динамической конфигурации, сразу после запуска основного процесса контейнера. Этот хук асинхронно вызывается kubelet и работает параллельно с основным процессом. Хотя PostStart hook выполняется асинхронно вместе с основным процессом контейнера, если выполнение PostStart hook занимает слишком много времени или приостановлено, контейнер может не перейти в Запущено состояние. Если выполнение PostStart hook не удалось, контейнер может не запуститься и будет завершён.
Метод обработки | Пример значения | Описание | Пример YAML |
|---|---|---|---|
CLI | /install.sh install_agent | Используется для выполнения команд в контейнере. Вам необходимо настроить Команда. Формат команды Команда Arg[1] Arg[2]..., где Команда указывает на системную команду или пользовательскую исполняемую программу. Если путь не указан, система ищет команду в пути по умолчанию. Если требуется выполнить несколько команд, запишите их в скрипт в образе контейнера заранее и вызовите скрипт с помощью этой команды. The исполняемая команда должна выполняться синхронно или во фронтенде. Если она выполняется асинхронно или в бэкенде, lifecycle hook может не выполниться. |
|
HTTP запрос | Путь: /nginx Порт: 80 Хост: 127.0.0.1 | Используется для инициации HTTP запроса. Связанные параметры описаны ниже:
|
|
Если контейнер выходит из строя или завершается аномально, PreStop Hook не будет выполнен. Грейс‑период завершения Под начинает обратный отсчёт до выполнения PreStop Hook. Независимо от результата обработчика Hook, контейнер будет завершён в течение грейс‑периода завершения Под, если только финализатор не задерживает процесс завершения. Другие операции управления контейнером блокируются до завершения PreStop Hook или окончания грейс‑периода.
Параметр | Пример значения | Описание | Пример YAML |
|---|---|---|---|
CLI | /uninstall.sh uninstall_agent | Используется для выполнения команд в контейнере. Вам нужно настроить Команда. Формат команды Команда 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:- sleep 3600 #Startup command: suspends the current process for 3,600s.imagePullPolicy: Alwayslifecycle:postStart:exec:command:- /bin/bash- install.sh #Post-start command: Run the install.sh command in /bin/bash.preStop:exec:command:- /bin/bash- uninstall.sh #Pre-stop command: Run the uninstall.sh command in /bin/bash.name: nginximagePullSecrets:- name: default-secret
kubectl create -f lifecycle.yaml
Если отображается информация, подобная следующей, нагрузка создаётся:
deployment.apps/nginx created
kubectl get deployment
Если все поды нагрузки доступны, нагрузка создана.
NAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 4m59s