环境变量

以环境变量的形式暴露元数据给Pod中的容器,与其他两种方式相比,其缺点主要体现在:仅可以暴露本Pod的元数据,并且可使用的元数据有限。

Pod在生成后,会有自己的定义(配置文件),这种方式就是通过从定义(配置文件)和状态中取得相关数据,并将其作为容器的环境变量,从而被容器中的应用读取和使用。

可用元数据

该方式下,可暴露的元数据如下:

  • 本Pod的名称(metadata.name);

  • 本Pod的IP地址;(status.podIP

  • 本Pod所在的命名空间(metadata.namespace);

  • 本Pod运行的Node的名称(spec.nodeName);

  • 本Pod运行所归属的ServiceAccount名称(spec.serviceAccountName);

  • 本Pod中每个容器的CPU和内存的请求量(spec.containers.resources.requests.cpu);

  • 本Pod中每个容器可使用的CPU和内存的上限(spec.containers.resources.limits.cpu);

circle-info

前五种(非资源相关):pod.spec.containers.env.valueFrom.fieldRef中指定(从字段名可以看出,引用的是配置文件中的相关字段);

后两种(资源相关):pod.spec.containers.env.valueFrom.resourceFieldRef中指定,其中引用的是spec.containers.resources中资源请求量与使用上限等相关字段;

circle-exclamation

使用案例

由于是将元数据以环境变量的方式传递至容器中,因此需要对pod.spec.containers.env.valueFrom进行配置。

在上面介绍可用元数据时,已经提到,针对非资源相关的元数据是在pod.spec.containers.env.valueFrom.fieldRef中指定的,而针对资源相关的元数据则是在pod.spec.containers.env.valueFrom.resourceFieldRef中指定的。

并且在上面也介绍了各元数据所对应的Pod的配置文件中的字段。

这里展示一个案例,创建一个仅包含一个容器的Pod,并且将该方式支持的所有元数据都传入容器中:

circle-info

由于环境变量是在容器级别配置的,因此不指定容器名spec.containers.env.valueFrom.resourceFieldRef.containerName的话,则默认是获取的本容器的资源相关量。

Last updated

Was this helpful?