文档首页 > > 用户指南> 工作负载> 容器设置> 设置容器生命周期

设置容器生命周期

分享
更新时间: 2020/06/23 GMT+08:00

CCE提供了回调函数,在容器的生命周期的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以注册相应的钩子函数。

目前提供的生命周期回调函数如下所示:

  • 启动命令容器将会以该启动命令启动,请参见设置容器启动命令
  • 启动后处理容器启动后触发,请参见启动后处理
  • 停止前处理容器停止前触发。设置停止前处理,确保升级或实例删除时可提前将实例中运行的业务排水。详细请参见停止前处理

容器如何执行命令和参数

Docker 的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时将运行镜像制作时提供的默认的命令和参数,Docker 将这两个字段定义为 “ Entrypoint ” 和 " CMD "。关于这两个参数的详细信息,请查看 docker 的 Entrypoint 说明CMD 说明

如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令 " Entrypoint "、" CMD ",规则如下:

表1 容器如何执行命令和参数

镜像 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. “启动后处理”后,设置启动后处理的参数,如表2

    表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. “停止前处理”后,设置停止前处理的参数,如表2

    表3 停止前处理-参数说明

    参数

    说明

    命令行方式

    在容器中执行指定的命令,配置为需要执行的命令。命令的格式为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命令设置容器生命周期的方法。

前提条件

请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令,使弹性云服务器连接集群。

操作步骤

  1. 登录已配置好kubectl命令的弹性云服务器。登录方法请参见登录Linux弹性云服务器
  2. 创建一个名为nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml为自定义名称,您可以随意命名。

    vi nginx-deployment.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:
          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

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问