更新时间:2025-08-12 GMT+08:00

复制业务容器环境变量和卷挂载点

使用场景

在容器的日志收集与处理、配置管理、数据同步等场景中,可以通过环境变量传递配置文件的路径,或者通过共享卷挂载点将主业务容器的卷挂载到Sidecar容器中来实现特定功能。云容器实例提供了复制业务容器的环境变量(env)和卷挂载点(volumeMounts)的能力,从而简化了这些操作并实现特定功能。

您可参考以下几种方式复制业务容器环境变量和卷挂载点:

前提条件

如果使用ClusterExtensionProfile或ExtensionProfile方式复制业务容器环境变量和卷挂载点,您需要先配置Sidecar工具容器,操作步骤请参考配置Sidecar工具容器

功能规格

表1 功能规格

功能描述

功能说明

注入Sidecar时支持复制业务容器env的能力

  • 通过容器名和环境变量名来复制环境变量。
  • 通过容器序号和环境变量名来复制环境变量。

注入Sidecar时支持复制业务容器volumeMount的能力

  • 通过容器名和volumeMount名来复制卷挂载点。
  • 通过容器序号和volumeMount名来复制卷挂载点。

约束与限制

表2 功能约束

功能字段

字段约束

envFromContainer

  • envFromContainer的name不能为空。
  • envFromContainer的name不能重复或与sidecarContainer的env配置中的env名重复。
  • containerFieldRef中的name和index至少配置其中一个。
  • containerFieldRef的fieldPath须为"name"或以"env."开头。

volumeMountFromContainer

  • volumeMountFromContainer的volumeMountName不能为空。
  • volumeMountFromContainer的volumeMountName不能重复或与sidecarContainer的volumeMount配置中的name重复。
  • containerRef中的name和index至少配置其中一个。

方式一 通过注解复制业务容器环境变量和卷挂载点

通过在Pod.Annotations中加入注解添加envFromContainer、volumeMountFromContainer复制业务容器的环境变量和卷挂载点。

bursting.cci.io/pod-sidecars: '{"containers":[{"name":"busybox","image":"busybox:latest","command":["sh","-c","sleep 3600"],"resources":{},"envFromContainer":[{"name":"POD_IP","containerFieldRef":{"index":0,"fieldPath":"env.POD_IP"}},{"name":"POD_NAME","containerFieldRef":{"name":"nginx","fieldPath":"env.POD_NAME"}},{"name":"CONTAINER_NAME","containerFieldRef":{"index":0,"fieldPath":"name"}}],"volumeMountFromContainer":[{"volumeMountName":"log-storage","containerRef":{"index":0}},{"volumeMountName":"log-storage1","containerRef":{"name":"nginx"}}]}]}'

方式二 通过ClusterExtensionProfile复制业务容器环境变量和卷挂载点

  1. 生成YAML文件。通过ClusterExtensionProfile来配置Sidecar容器的环境变量和卷挂载点。

    YAML示例:

    apiVersion: bursting.cci.io/v1
    kind: ClusterExtensionProfile
    metadata:  
      name: podsidecar-cluster-profile
    spec:  
      actions:    
        podSidecars:
          containers:
          - command:
            - sh
            - -c
            - sleep 3600
            image: busybox:latest
            name: busybox
            envFromContainer:
            - containerFieldRef:
                fieldPath: env.POD_IP
                index: 0
              name: POD_IP
            - containerFieldRef:
                fieldPath: env.POD_NAME
                name: nginx
              name: POD_NAME
            - containerFieldRef:
                fieldPath: name
                index: 0
              name: CONTAINER_NAME
            volumeMountFromContainer:
            - containerRef:
                index: 0
              volumeMountName: log-storage
            - containerRef:
                name: nginx
              volumeMountName: log-storage1
      namespaceLabels:    
        matchLabels:      
            key: value

  2. 使用以下命令创建配置。

    kubectl apply -f <podsidecar-cluster-profile>     #所创建的YAML文件名,替换为实际值

  3. (可选)查询是否配置成功。

    kubectl get cextp

方式三 通过ExtensionProfile复制业务容器环境变量和卷挂载点

  1. 生成YAML文件。通过ExtensionProfile来配置Sidecar容器的环境变量和卷挂载点。

    YAML示例:

    apiVersion: bursting.cci.io/v1
    kind: ExtensionProfile
    metadata:  
      name: podsidecar-profile
    spec:  
      actions:    
        podSidecars:
          containers:
          - command:
            - sh
            - -c
            - sleep 3600
            image: busybox:latest
            name: busybox
            envFromContainer:
            - containerFieldRef:
                fieldPath: env.POD_IP
                index: 0
              name: POD_IP
            - containerFieldRef:
                fieldPath: env.POD_NAME
                name: nginx
              name: POD_NAME
            - containerFieldRef:
                fieldPath: name
                index: 0
              name: CONTAINER_NAME
            volumeMountFromContainer:
            - containerRef:
                index: 0
              volumeMountName: log-storage
            - containerRef:
                name: nginx
              volumeMountName: log-storage1
      objectLabels:
        matchLabels:
          key1: value1

  2. 使用以下命令创建配置。

    kubectl apply -f <podsidecar-profile>     #所创建的YAML文件名,替换为实际值

  3. (可选)使用以下命令查询是否配置成功。

    kubectl get extp

参数说明

表3 关键参数说明

参数

参数说明

InitContainers

注入到CCI侧pod.spec.initContainers的initContainer列表。InitContainer对象的结构与Pod中initContainer的结构类似,不支持配置restartPolicy,并增加了position、envFromContainer、volumeMountFromContainer参数,详情请参见表4

Containers

注入到CCI侧pod.spec.containers的Container列表。详情请参见表4

Volumes

注入到CCI侧pod.spec.volumes的volume列表。

表4 Container参数描述

参数

是否必选

参数类型

描述

position

String

可通过为container配置position字段指定注入位置,配置为head注入在头部,配置为tail注入在尾部,默认注入在尾部,相同position的container注入的先后顺序与actions.podSidecars配置的顺序一致。