容器生命周期

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

目前提供的生命周期操作如下:

  • 启动命令: 容器将会以该启动命令启动.

  • 启动后处理: 容器启动后触发。

  • 停止前处理: 容器停止前触发。设置停止前处理,确保升级或实例删除时可提前将实例中运行的业务排水。

容器如何执行命令和参数

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

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

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

镜像 Entrypoint 镜像CMD 容器运行命令容器 运行参数 最终执行
[ “/bin/bash” ] [ “-c” , “cmd.sh” ] 未设置 未设置 [ “/bin/bash” , “-c”,”cmd.sh” ]
[ “/bin/bash” ] [ “-c” , “cmd.sh” ] [ “/bin/sh” ] 未设置 [ “/bin/sh” ]
[ “/bin/bash” ] [ “-c” , “cmd.sh” ] 未设置 [ “-c” , “comm.sh” ] [ “/bin/bash” , “-c” , “comm.sh” ]
[ “/bin/bash” ] [ “-c” , “cmd.sh” ] [ “/bin/sh” ] [ “-c” , “comm.sh” ] [ “/bin/sh” , “-c” , “comm.sh” ]

设置启动命令

1.登录容器云“控制台” ,在项目管理-项目详情-升级选择卡-高级设置-生命周期。

2.在启动命令后,输入运行命令和运行参数,如 表2

Alt 查看内容 说明:

  • 当前启动命令以字符串数组形式提供,对应于Docker的Entrypoint启动命令,格式为: [“executable”, “param1”, “param2”,..]。容器云的容器启动命令可参见 这里

  • 容器的生命周期与启动命令的生命周期一致,即启动命令执行完成后容器的生命周期结束。


表2 容器启动命令

命令方式 操作步骤
运行命令 输入可执行的命令,例如如:”/usr/local/run-jar.sh”。

若可执行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号(””)。

说明:

多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入,如图1。

运行参数 输入控制容器运行命令参数,例如–port=8080。

若参数有多个,多个参数以换行分隔。

图1多命令-示例


介绍案例

  • 场景一: 容器的“运行命令”和“运行参数”均作设置,界面截图如下:
nginx -c nginx.conf

Alt text


生成的YAML配置


          command:
            - nginx
          args:
            - '-c'
            - nginx.conf

  • 场景二:仅设置容器的“运行命令”,界面截图如下:

说明:
多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入。


生成的YAML配置


          command:
            - nginx -c nginx.conf
          args:

  • 场景三:仅设置容器的“运行参数”,界面截图如下:

生成的YAML配置

          command:
            - /bin/sh
          args:
            - -c
            - "nginx -c nginx.conf"

启动后处理

1.登录CCE控制台,在项目管理-项目详情-升级选项卡时,展开“高级设置”,打开生命周期。

2.在“启动后处理”后,设置启动后处理的参数,如 表3


表3 容器启动命令

命令方式 说明
运行命令 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。

如需要执行的命令如下:

exec:
  command:
  - /install.sh
  - install_agent

请在执行脚本中填写: /install install_agent。

这条命令表示容器创建成功后将执行install_agent安装。

HTTP请求方式 发起一个HTTP调用请求。配置参数如下:
  • 路径:请求的URL路径,可选项。

  • 端口:请求的端口,必选项。

  • 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。

停止前处理

登录CCE控制台,在升级项目配置生命周期过程中,选择“停止前处理”。

在“停止前处理”后,设置停止前处理的参数,如 表4

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

命令方式 说明
运行命令 在容器中执行指定的命令,配置为需要执行的命令。命令的格式为Command Args[1] Args[2]…(Command为系统命令或者用户自定义可执行程序,如果未指定路径则在默认路径下寻找可执行程序),如果需要执行多条命令,建议采用将命令写入脚本执行的方式。

如需要执行的命令如下:

exec:
  command:
  - /install.sh
  - install_agent

请在执行脚本中填写: /install install_agent。

这条命令表示容器创建成功后将执行install_agent安装。

HTTP请求方式 发起一个HTTP调用请求。配置参数如下:
  • 路径:请求的URL路径,可选项。

  • 端口:请求的端口,必选项。

  • 主机地址:请求的IP地址,可选项,默认是容器所在的节点IP。

命令行方式介绍

容器的启动后处理和停止前处理“命令行方式与启动命令相同,”参数说明如下。

发起一个命令行方式请求。配置参数案例如下:

HTTP请求方式介绍

容器的启动后处理和停止前处理“http或者https方式运行,”参数说明如下。

说明:>HTTP使用时,http当前方式,仅支持GET方式请求。

发起一个HTTP调用请求。配置参数案例如下:

设置容器生命周期-YAML样例

1.登录容器云 控制台 ,在项目管理-创建项目-YAML编辑。

2.项目升级
登录”控制台” ,在项目管理-项目详情-YAML编辑。

本节以nginx为例,说明YAML的配置方法。

参见通过YAML格式创建项目时,容器生命周期的参数设置如下所示,详细请参见kubernetes官方文档。

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

父主题:高级设置


上一篇:资源限制 下一篇:健康检查

作者:韓胜永  创建时间:2019-09-11 17:18
最后编辑:韓胜永  更新时间:2025-04-29 18:46