当前位置: 首页 > 科技观察

KubernetesPod注入环境变量的方法及优先级问题

时间:2023-03-13 09:02:37 科技观察

1.KubernetesPod引用环境变量的几种方式1.1DirectKey/Value可以直接设置Value值,也可以使用当前Pod信息作为Value值。apiVersion:v1kind:Podmetadata:name:envar-demolabels:purpose:demonstrate-envarsspec:containers:-name:envar-demo-containerimage:gcr.io/google-samples/node-hello:1.0env:-名称:DEMO_GREETING值:“来自环境的问候”-名称:DEMO_FAREWELL值:“如此甜蜜的悲伤”-名称:MY_NODE_NAMEvalueFrom:fieldRef:fieldPath:spec.nodeName-名称:MY_POD_NAMEvalueFrom:fieldRef:fieldPath:metadata.name1.2来自秘密引用Secret中的变量有两种方式:通过envFrom引用Secret中的所有变量和通过valueFromapiVersion引用Secret中的指定变量:v1kind:Podmetadata:name:secret-env-podspec:containers:-name:mycontainerimage:redisenvFrom:-secretRef:name:secret-configenv:-name:SECRET_USERNAMEvalueFrom:secretKeyRef:name:secret-configkey:username-name:SECRET_PASSWORDvalueFrom:secretKeyRef:name:secret-configkey:password1.3从ConfigMap中引用ConfigMap中的变量有两种方式:通过envFrom引用ConfigMap中的所有变量和通过valueFrom引用ConfigMap中的指定变量apiVersion:v1kind:Podmetadata:name:dapi-测试podspec:容器:-名称:测试容器图像:k8s.gcr.io/busyboxenvFrom:-configMapRef:名称:configmap-configenv:-名称:SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:名称:special-configkey:special。如何-名称:LOG_LEVELvalueFrom:configMapKeyRef:名称:env-configkey:log_level2。变量引用的优先级从源码可以看出实现逻辑是会初始化一个Map来存放环境变量,然后按照以下步骤进行处理:依次遍历envFrom引用的ConfigMap的Key/Value和Secret依次遍历env中设置的Key/Value。由于Pod默认开启了EnableServiceLinks,所以需要注入Service相关的变量。优先级为Servicevariable>Env>EnvFrom,其中EnvFrom优先级为覆盖注入到环境变量中的服务相关变量:注入范围。命名空间中所有服务注入的内容。同一命名空间下的所有服务地址、端口和协议。Injectedformat.大写字母加下划线的格式,例如ADMIN_WEB_PC_TEST_PORT_80_TCP=tcp://10.233.45.183:80,ADMIN_WEB_PC_TEST_PORT=tcp://10.233.45.183:80,ADMIN_WEB_PC_TEST_PORT_80_TCP_ADDR=10.233.45.183,ADMIN_WEB_PC_TEST_PORT_80_TCP_PORT=80,ADMIN_WEB_PC_TEST_PORT_80_TCP_PROTO=tcp。If大量服务部署在同一个命名空间下,每个Pod中可能会添加数百个这样的变量。3、参考https://img.ydisp.cn/news/20220901/ty0v4z0yo4e.godata-id="l20de63f-pCK01fpn">https://img.ydisp.cn/news/20220901/pobvhcxqkzs.go