You need to enable JavaScript to run this app.
导航
使用 Init 容器初始化应用
最近更新时间:2024.08.01 17:14:19首次发布时间:2024.08.01 14:21:52

Init 容器是一种特殊的容器,允许在 Pod 内的应用容器启动之前运行。Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或安装脚本。本文介绍 Init 容器的基本使用方法。

背景信息

Init 容器可以在多种 Kubernetes 工作负载里使用,例如:Deployment、DaemonSet、Job 等,常用于在主容器启动前,进行的初始化工作。

Init 容器与普通容器属性和行为非常相似,除了如下两点:

  • Init 容器总是运行到完成。
  • Pod 中允许包含一个或多个 Init 容器,但每个 Init 容器都必须在下一个启动之前成功完成。

如果 Pod 的 Init 容器启动失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止。 然而,如果 Pod 对应的 restartPolicy 值为Never,并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

Init 容器通过initContainers字段配置,该字段为 Container 类型对象数组形式,和主容器的containers数组同级相邻。更多详情,请参见 Kubernetes 官方文档

操作步骤

说明

通过 kubectl 命令行创建无状态负载(Deployment)前请确保:

  • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
  • 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群

本文以 Deployment 为例,介绍如何配置 Init 容器。

  1. 创建工作负载的 YAML 文件。示例文件deployment-demo.yaml代码如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment 
    spec:
      replicas: 1 
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          initContainers: # 配置 Init 容器
          - name: getresource
            image: cr-cn-beijing.volces.com/tw/nginx:1.0 # Init 容器镜像地址和 Tag
            command: ['sh', '-c', 'echo This is initContainers information! && sleep 30']
          containers:
          - name: nginx
            image: cr-cn-beijing.volces.com/tw/nginx:1.0 # 主容器镜像地址和 Tag
            ports:
            - containerPort: 80
    
  2. 执行以下命令,创建工作负载。
    kubectl apply -f deployment-demo.yaml
    

后续操作

查看 Init 容器信息

配置完成后,您可以在控制台查看 Init 容器的状态信息。

  1. 登录无状态负载页面。
    1. 登录 容器服务控制台
    2. 单击左侧导航栏中的 集群
    3. 在集群列表页面,单击需要创建无状态负载的目标集群。
    4. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态负载
  2. 在无状态负载页面,单击目标工作负载的名称,进入工作负载详情页面。
  3. 选择 实例列表 页签,单击实例名称前的 +,展开实例列表,即可查看到 Init 容器的状态。

alt

查看 Init 容器日志

  1. 在无状态负载页面,单击目标工作负载的名称,进入工作负载详情页面。
  2. 选择 日志 页签,在 Pod/Container 下拉列表中选择对应的 Init 容器,即可查看到该 Init 容器的日志。

alt