操作场景
CCE提供了回调函数,在容器的生命周期的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以注册相应的钩子函数。
目前提供的生命周期回调函数如下所示:
- 启动命令: 容器将会以该启动命令启动,请参见启动命令。
- 启动后处理: 容器启动后触发,请参见启动后处理。
- 停止前处理: 容器停止前触发。设置停止前处理,确保升级或实例删除时可提前将实例中运行的业务排水。详细请参见停止前处理。
启动命令
在默认情况下,镜像启动时会运行默认命令,如果想运行特定命令或重写镜像默认值,需要进行相应设置。
Docker的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时将运行镜像制作时提供的默认的命令和参数,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] |
步骤 1 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。
步骤 2 在“启动命令”页签,输入运行命令和运行参数。
表 容器启动命令
命令方式 | 操作步骤 |
---|---|
运行命令 | 输入可执行的命令,例如“/run/server”。若运行命令有多个,多个命令之间用空格进行分隔。 若命令本身带空格,则需要加引号("")。 说明多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。 |
运行参数 | 输入控制容器运行命令参数,例如--port=8080。若参数有多个,多个参数以换行分隔。 |
启动后处理
步骤 1 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。
步骤 2 在“启动后处理”页签,设置启动后处理的参数。
表 启动后处理-参数说明
参数 | 说明 |
---|---|
命令行方式 | 在容器中执行指定的命令,配置为需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 不支持后台执行和异步执行的命令。如需要执行的命令如下: exec: command: - /install.sh - install_agent 请在执行脚本中填写: /install install_agent。这条命令表示容器创建成功后将执行install.sh。 |
HTTP请求方式 | 发起一个HTTP调用请求。 配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。 |
停止前处理
步骤 1 登录CCE控制台,在创建工作负载时,配置容器信息,选择“生命周期”。
步骤 2 在“停止前处理”页签,设置停止前处理的命令。
表 停止前处理
参数 | 说明 |
---|---|
命令行方式 | 在容器中执行指定的命令,配置为需要执行的命令。 命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: - /uninstall.sh - uninstall_agent请在执行脚本中填写: /uninstall uninstall_agent。这条命令表示容器结束前将执行uninstall.sh。 |
HTTP请求方式 | 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。 |
YAML样例
本节以nginx为例,说明kubectl命令设置容器生命周期的方法。
在以下配置文件中,您可以看到postStart命令在容器目录/bin/bash下写了个install.sh命令。 preStop执行uninstall.sh命令。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
command:
- sleep 3600 #启动命令
imagePullPolicy: Always
lifecycle:
postStart:
exec:
command:
- /bin/bash
- install.sh #启动后命令
preStop:
exec:
command:
- /bin/bash
- uninstall.sh #停止前命令
name: nginx
imagePullSecrets:
- name: default-secret