设置容器生命周期 操作场景 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 在“启动后处理”后,设置启动后处理的参数,如下表。 启动后处理参数说明 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: /install.sh installagent 请在执行脚本中填写: /install installagent。这条命令表示容器创建成功后将执行install.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。 停止前处理 步骤 1 登录CCE控制台,在创建工作负载配置生命周期过程中,选择“停止前处理”。 步骤 2 在“停止前处理”后,设置停止前处理的参数,如下表。 停止前处理参数说明 参数 说明 命令行方式 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。 如需要执行的命令如下: exec: command: /uninstall.sh uninstallagent 请在执行脚本中填写: /uninstall uninstallagent。这条命令表示容器结束前将执行uninstall.sh。 HTTP请求方式 发起一个HTTP调用请求。配置参数如下: 路径:请求的URL路径,可选项。 端口:请求的端口,必选项。 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。 容器重启策略 Pod通过restartPolicy字段指定重启策略,重启策略类型为:Always、OnFailure和Never,默认为 Always。 restartPolicy仅指通过同一节点上的kubelet重新启动容器。 重启策略 说明 Always 当容器失效时,由kubelet自动重启该容器。 OnFailure 当容器终止运行且退出码不为0时,由kubelet自动重启该容器。 Never 不论容器运行状态如何,kubelet都不会重启该容器。 说明: 可以管理Pod的控制器有ReplicaSet Controller,Job,DaemonSet,及kubelet(静态Pod)。 RS和DaemonSet:必须设置为Always,需要保证该容器持续运行。 Job:OnFailure或Never,确保容器执行完后不再重启。 kubelet:在Pod失效的时候重启它,不论RestartPolicy设置为什么值,并且不会对Pod进行健康检查。 设置容器生命周期YAML样例 本节以nginx为例,说明kubectl命令设置容器生命周期的方法。 前提条件 请参见通过kubectl操作CCE集群配置kubectl命令,使弹性云主机连接集群。 操作步骤 步骤 1 登录已配置好kubectl命令的弹性云主机。 步骤 2 创建一个名为nginxdeployment.yaml的描述文件。其中,nginxdeployment.yaml为自定义名称,您可以随意命名。 vi nginxdeployment.yaml 在以下配置文件中,您可以看到postStart命令在容器目录/bin/bash下写了个install.sh 命令。 preStop执行uninstall.sh命令。 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: restartPolicy: Always