You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
容器配置
设置容器启动和退出顺序
复制全文
下载 pdf
设置容器启动和退出顺序
弹性容器实例(VCI)支持设置同一个 Pod 内多个容器的启动和退出顺序。​
背景信息​
默认情况下,VCI 实例内的各个容器是并发启动和退出的,没有固定的先后顺序。在某些场景下,一个实例内的多个容器之间可能存在依赖关系,某一容器需要在另一容器启动后再启动,或者某一容器需要在另一容器退出后再退出。比如在采集容器日志时,需要保证在业务容器产生日志前,日志容器已经启动完成,处于 Ready 状态;在业务容器退出后,日志容器才退出。针对此类场景,需要实现 Pod 内各个容器按照指定优先级启动和退出的功能。​
本特性针对的是同一个 Pod 内的应用容器(App Container),不包括 Init 容器和临时容器,下文中无特殊说明时,容器均指应用容器。​
前提条件​
  • 通过 kubectl 连接 VCI 业务集群。详细操作,请参见 连接集群。​
配置容器启动顺序​
当需要同一个实例内各个容器按顺序启动时,设置 Pod 内容器启动优先级,其中优先级高的容器会在优先级低的容器启动之前启动,相同优先级的容器不保证其启动先后顺序(并发启动)。​
参数说明​
VCI 支持通过环境变量配置容器启动顺序,环境变量说明,如下表所示。​
​
配置项​
环境变量名称​
配置说明​
容器启动优先级​
VCI_CONTAINER_LAUNCH_PRIORITY​
  • 取值范围为:-1000~1000,默认值为:0。数值越大,启动优先级越高。​
  • 优先级高的容器保证会在优先级低的容器启动之前启动,相同优先级的容器不保证启动顺序(并发启动)。​
  • 如果某个容器依赖其他容器提供服务,则需要在依赖容器中配置就绪探针(Readiness Probe)。例如:B 容器依赖 A 容器提供服务,则在设置 A 容器的启动优先级高于 B 容器的同时,还需要为 A 容器配置 Readiness Probe,确保 A 容器准备就绪后才启动 B 容器。​
​
示例​
下文以创建一个 VCI Deployment,且 Deployment 下的 Pod 中包含 2 个应用容器为例,分别设置各个容器的启动优先级,查看各个容器的启动(started)时间,预期优先级高的容器最先被 started。创建 VCI 实例相关说明,请参见 创建实例。​
  1. 通过 kubectl 创建 VCI Deployment 的 YAML 文件。示例 YAML 文件vci-nginx-deployment.yaml代码如下:​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: vci-nginx-deployment # Deployment 名称。​
    spec:​
    replicas: 1 # Deployment 副本数。​
    selector:​
    matchLabels:​
    app: vci-nginx-deployment​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/burst-to-vci: enforce # 将 Pod 强制部署到 VCI 上。​
    labels:​
    app: vci-nginx-deployment​
    spec:​
    containers:​
    - name: nginx-v1 # 容器名称。​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    ports:​
    - containerPort: 80​
    env:​
    - name: VCI_CONTAINER_LAUNCH_PRIORITY # 容器启动优先级配置。​
    value: "1000" # 当前容器的启动优先级为 1000(优先级最高)。​
    readinessProbe: # 为高优先级的容器配置 Readiness Probe。​
    httpGet:​
    path: /​
    port: 80​
    initialDelaySeconds: 30 ​
    periodSeconds: 3​
    - name: nginx-v2 # 容器名称。​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。 ​
    env:​
    - name: VCI_CONTAINER_LAUNCH_PRIORITY # 容器启动优先级配置。​
    value: "0" # 当前容器的启动优先级为 0。​
    args:​
    - /bin/sh​
    - -c​
    - sleep 3600s​
    ​
  1. 执行以下命令,创建 Deployment。​
  • ​
    kubectl apply -f <Deployment 的 YAML 配置文件路径>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl create -f vci-nginx-deployment.yaml​
    ​
  1. 完成 Deployment 的创建后,验证容器启动顺序。​
  1. 执行以下命令获取 VCI Deployment 下 Pod 的名称。​
  • ​
    kubectl get pods -l app=<Deployment 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl get pods -l app=vci-nginx-deployment​
    ​
  • 从返回信息的NAME字段下获取 Pod 的名称。​
  1. 执行以下命令,获取 Pod 详细信息,观察 Pod 的Events字段中各个容器的启动时间。​
  • ​
    kubectl describe pod <Pod 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl describe pod vci-nginx-deployment-79886764b9-fm7tn​
    ​
配置容器退出顺序​
当需要同一个实例内各个容器按顺序退出时,设置 Pod 内容器退出优先级,其中优先级高的容器会在优先级低的容器退出之前退出,相同优先级的容器不保证其退出先后顺序(并发退出)。​
说明​
若设置了容器退出顺序,在删除 Pod 时可能会导致整个 Pod 的删除时间大于设定的优雅删除时间。​
参数说明​
VCI 支持通过环境变量配置容器退出顺序,环境变量说明,如下表所示。​
​
配置项​
环境变量名称​
配置说明​
容器退出优先级​
VCI_CONTAINER_EXIT_PRIORITY​
  • 取值范围为:-1000~1000,默认值为:0。数值越大,退出优先级越高。​
  • 优先级高的容器保证会在优先级低的容器退出之前退出,相同优先级的容器不保证退出顺序(并发退出)。​
​
示例​
下文以创建一个 VCI Deployment,且 Deployment 下的 Pod 中包含 2 个应用容器为例,分别设置各个容器的退出优先级,同时设置 Pod 优雅删除时间为 90 秒, 查看各个容器的退出(killed)时间,预期优先级高的 容器最先被 killed。创建 VCI 实例相关说明,请参见 创建实例。​
  1. 通过 kubectl 创建 VCI Deployment 的 YAML 文件。示例 YAML 文件vci-nginx-deployment.yaml代码如下:​
  • ​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: vci-nginx-deployment # Deployment 名称。​
    spec:​
    replicas: 1 # Deployment 副本数。​
    selector:​
    matchLabels:​
    app: vci-nginx-deployment​
    template:​
    metadata:​
    annotations:​
    vke.volcengine.com/burst-to-vci: enforce # 将 Pod 强制部署到 VCI 上。​
    labels:​
    app: vci-nginx-deployment​
    spec:​
    containers:​
    - name: nginx-v1 # 容器名称。​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。​
    ports:​
    - containerPort: 80​
    env:​
    - name: VCI_CONTAINER_EXIT_PRIORITY # 容器退出优先级配置。​
    value: "1000" # 当前容器的退出优先级为 1000(优先级最高)。​
    httpGet:​
    path: /​
    port: 80​
    initialDelaySeconds: 30 ​
    periodSeconds: 3​
    - name: nginx-v2 # 容器名称。​
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。 ​
    env:​
    - name: VCI_CONTAINER_EXIT_PRIORITY # 容器退出优先级配置。​
    value: "0" # 当前容器的退出优先级为 0。​
    args:​
    - /bin/sh​
    - -c​
    - sleep 3600s​
    ​
  1. 执行以下命令,创建 Deployment。​
  • ​
    kubectl apply -f <Deployment 的 YAML 配置文件路径>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl create -f vci-nginx-deployment.yaml​
    ​
  1. 完成 Deployment 的创建后,验证容器退出顺序。​
  1. 执行以下命令获取 VCI Deployment 下 Pod 的名称。​
  • ​
    kubectl get pods -l app=<Deployment 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl get pods -l app=vci-nginx-deployment​
    ​
  • 从返回信息的NAME字段下获取 Pod 的名称。​
  1. 执行以下命令,删除 Pod,然后快速获取 Pod 详细信息,观察 Pod 的Events字段中各个容器 Killing 事件的顺序。​
  • ​
    kubectl delete pod <Pod 的名称>​
    kubectl describe pod <Pod 的名称>​
    ​
  • 本示例中命令如下:​
  • ​
    kubectl delete pod vci-nginx-deployment-79886764b9-fm7tn​
    kubectl describe pod vci-nginx-deployment-79886764b9-fm7tn​
    ​
​
最近更新时间:2026.08.19 11:25:08
这个页面对您有帮助吗?
有用
有用
无用
无用