在Kubernetes中使用镜像启动容器时,可以在Pod资源或Pod模版资源为容器配置使用env参数来定义所使用的环境变量列表,即便容器中的应用本身不处于环境变量,也一样可以向容器传递环境变量,只不过它不被使用罢了。
环境变量配置容器化应用时,需要在容器配置段中嵌套使用env字段,它的值是一个由环境变量构建的列表。环境变量由name和value(或valueFrom)字段构成。
name:环境变量的名称,必须字段。
value:环境变量的值,通过 ${VAR_NAME} 引用,默认值为空。
valueFrom:环境变量值的引用源,例如,当前Pod资源的名称、名称空间、标签等,不能与非空值的value字段同时使用,即环境变量的值要么源于value字段,要么源于valueFrom字段,二者不可同时提供数据。valueFrom字段可引用的值有多种来源,包括当前Pod资源的属性值,容器相关的系统资源配置、ConfigMap对象中的Key以及Secret对象中的Key,它们应分别使用不同的嵌套字段进行定义。
fieldRef:当前Pod资源的指定字段,目前支持使用的字段包括 metadata.name、metadata.namespace、metadata.labels、metadata.annotations、spec.nodeName、spec.serviceAccountName、status.hostIP和status.podIP。
configMapKeyRef:ConfigMap对象中的特定Key。
secretKeyRef:Secret对象中的特定Key。
resourceFieldRef:当前容器的特定系统资源的最小值(配额)或最大值(限额),目前支持的引用包括limits.cpu、limts.ephemeral-storage、requests、cpu、requests.memory、requests.ephemeral-storage。
下面是定义在配置文件 env-demo.yaml 中的Pod资源,其通过环境变量引用当前Pod资源及其所在节点的相关属性值配置容器,fieldRef字段的值是一个对象,它一般由apiVersion(创建当前Pod资源的API版本)或fidldPath嵌套字段所定义:
cat env-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: env-demo
labels:
purpose: demonstrate-environment-variables
spec:
containers:
- name: env-demo-container
image: busybox
command: [ "httpd" ]
args: [ "-f" ]
env:
- name: HELLO_WORLD
value: just a demo
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
restartPolicy: OnFailure
创建Pod对象
kubectl apply -f env-demo.yaml
然后打印它的环境变量列表
kubectl exec -it pods/env-demo -- printenv
HELLO_WORLD=just a demo #在清单中定义的HELLO_WORLD变量与值
MY_NODE_NAME=k8s-node03 #在清单中定义的MY_NODE_NAME变量与从spec.nodeName获取到的值
MY_NODE_IP=192.168.31.233 #在清单中定义的MY_NODE_IP变量与从status.hostIP获取的值
MY_POD_NAMESPACE=default #在清单中定义的MY_POD_NAMESPACE变量与从metadata.namespec获取到的值
容器的启动脚本或应用程序调用或处理这些环境变量、即可实现容器化应用的配置。相较于命令行参数的方式来说,使用环境变量的配置方式更清晰、易懂,尤其是对于首次使用相关容器的用户来说,这种方式能够快速了解容器的配置方式,不过这两种配置方式有一个共同缺陷:无法在容器应用运行过程中更新环境变量从而达到更新应用目的。这通常意味着用户不得不为production、development和qa等不同的环境分别配置Pod资源。好在,用户还有ConfigMap资源可用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75667.html