赞
踩
声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记
为了在容器内获取Pod级别的信息,Kubernetes
提供了Downward API
机制来将Pod
和容器的某些元数据信息注入容器环境内,供容器应用方便地使用。
Downward API可以通过以下两种方式将Pod
和容器的元数据信息注入容器内部:
本文来讲解这两种方式。
通过环境变量的方式可以将Pod
信息或Container
信息注入容器运行环境中,下面举两个例子。
下面的例子 通过Downward API将Pod的 IP、名称和所在命名空间 注入容器的环境变量中,Pod的YAML文件内容如下:
yaml设置的环境变量有:
使用命令创建pod
之后,进入容器,可以看到环境变量的配置了:
下面的例子 通过Downward API将 Container的资源请求 和 资源限制信息 设置为容器内的环境变量,Pod的YAML文件内容如下:
环境变量如下:
查看日志,从日志中可以看到Container的requests.cpu、limits.cpu 、 requests.memory、limits.memory
等信息都被正确保存到了容器内的环境变量中:
通过Volume挂载方式可以 将Pod信息或Container信息 挂载为容器内的文件。
下面的例子 通过Downward API将Pod的Label、Annotation信息通过Volume 挂载为容器中的文件:
volumes字段中使用Downward API
的方法,通过fieldRef
字段设置需要引用Pod
的元数据信息,将其设置到volume
的items
中。Pod元数据信息如下:
然后,通过容器级别volumeMounts
的设置,系统会基于volume中各item的 path名称生成文件
根据上面的设置,系统将在容器内的/etc/podinfo
目录下生成 labels
和annotations
两个文件,在labels
文件中将包含Pod
的全部Label
列表,在annotations
文件中将包含Pod
的全部Annotation
列表。
进入容器,查看挂载的文件:
查看labels的内容:
下面的例子通过Downward API将 Container
的资源限制信息通过Volume
挂载为容器中的文件:
在本例中通过Downward API设置将以下Container的资源限制信息设置到
Volume中,内容如下:
进入容器,查看挂载文件:
查看cpu_limit
内容:
下面讲解 Downward API支持设置的Pod和Container信息。
① 可以通过fieldRefi设置的元数据如下:
元数据 | 描述 |
---|---|
metadata.name | Pod名称 |
metadata.namespace | Pod所在的命名空间名称 |
metadata.uid | Pod的UID,从Kubernetes1.8.o-alpha.2版本开始支持 |
metadata.labels[‘<KEY >’] | Pod某个Label的值,通过进行引用,从Kubernetes1.9版本开始支持; |
metadata.annotations[‘<KEY >’] | Pod某个Annotation的值,通过<KEY >进行引用,从Kubernetes1.9版本开始支持 |
② 可以通过resourceFieldRef设置的数据如下:
③ 对以下信息通过fieldRef字段进行设置:
元数据 | 描述 |
---|---|
metadata.labels | Pod的Label2列表,每个Labeli都以key为文件名,value为文件内容,每个Label各占一行 |
metadata.namannotations | Pod的Annotation列表,每个Annotation都以key为文件名,value为文件内容,每个Annotation各占一行 |
④ 以下Pod的元数据信息可以被设置为容器内的环境变量:
元数据 | 描述 |
---|---|
status.podIP | Pod的IP地址 |
spec.serviceAccountName | Pod使用的ServiceAccount名称 |
spec.nodeName | Pod所在Node的名称,从Kubernetes1.4.0-alpha.3版本开始支持 |
status.hostIP | Pod所在Node的IP地址,从Kubernetes1.7.0-alpha.l版本开始支持 |
有时容器内挂载目录的子路径(volumeMounts.subPath
)也需要使用Pod
或Container
的元数据信息。
Kubernetes从1.11版本开始支持通过Downward API
对子路径的名称进行设置,引入了一个新的subPathExpr
字段,到1.17版本达到Stable阶段。
用户可以将Pod或Container信息先使用Downward API设置到环境变量上,再通过subPathExpr将其设置为subPath的名称。
通过Kubernetes提供的Downward API
机制,只需经过一些简单配置容器内的应用就可以直接使用Pod
和容器的某些元数据信息了。
本文主要讲解Kubenetes使用Downward API
的方式,使容器能通过环境变量及volume
的方式来获取pod
的信息,希望能帮助到大家,谢谢大家的阅读,本文完!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。