从 pod 访问环境变量

我编写了 golang 程序,它使用 export var name = somevalue 从系统中设置的环境变量中获取值。


cloudType = os.Getenv("CLOUD_TYPE")

clusterRegion = os.Getenv("CLUSTER_REGION")

clusterType = os.Getenv("CLUSTER_TYPE")

clusterName = os.Getenv("CLUSTER_NAME")

clusterID = os.Getenv("CLUSTER_ID")

如上所述,我的程序尝试使用 getenv func 从系统中设置的 env var 中获取值。如果运行它并从 env 变量中获取值,该程序运行良好。但是当我尝试构建图像并在 pod 中运行它时,它能够从 env var 中获取值。它给出了空值。有没有办法从 pod 访问本地环境变量?


至尊宝的传说
浏览 109回答 3
3回答

qq_笑_17

制作这样的 yaml 文件来定义配置映射apiVersion: v1data:&nbsp; CLOUD_TYPE: "$CLOUD_TYPE"&nbsp; CLUSTER_REGION: "$CLUSTER_REGION"&nbsp; CLUSTER_TYPE: "$CLUSTER_TYPE"&nbsp; CLUSTER_NAME: "$CLUSTER_NAME"&nbsp; CLUSTER_ID: "$CLUSTER_ID"kind: ConfigMapmetadata:&nbsp; creationTimestamp: null&nbsp; name: foo确保您的配置变量已设置,然后将其应用于您的集群,首先使用 env 替换envsubst < foo.yaml | kubectl apply -f然后在 pod 定义中使用 config mapspec:&nbsp; containers:&nbsp; - name: mypod&nbsp; &nbsp; envFrom:&nbsp; &nbsp; - configMapRef:&nbsp; &nbsp; &nbsp; &nbsp; name: foo

湖上湖

...haven't set the env var in the pod. I set it locally in my system在您的主机上设置的环境变量不会自动传递给 Pod。您可以在规范中设置环境并通过容器访问。将规范中的环境变量替换为主机上的变量的常用方法是使用envsubst < draft-spec.yaml > final-spec.yaml. 例如,如果您有规格:apiVersion: v1kind: Podmetadata:&nbsp; labels:&nbsp; &nbsp; run: busybox&nbsp; name: busyboxspec:&nbsp; restartPolicy: Never&nbsp; containers:&nbsp; - name: busybox&nbsp; &nbsp; image: busybox&nbsp; &nbsp; imagePullPolicy: IfNotPresent&nbsp; &nbsp; command: ["ash","-c","echo ${CONTAINER_MESSAGE}"]&nbsp; &nbsp; env:&nbsp; &nbsp; - name: CONTAINER_MESSAGE&nbsp; &nbsp; &nbsp; value: $HOST_MESSAGE你可以运行HOST_MESSAGE='hello, world!' envsubst '{$HOST_MESSAGE}' < busybox.yaml | kubectl apply -f -。这会将 $HOST_MESSAGE 替换为“你好,世界!” 但不会触及 ${CONTAINER_MESSAGE}。这种方法不依赖于 ConfigMap,它允许您kubectl set env在部署后使用它来更新变量。

白板的微信

看来您将 env var 设置为不在图像中。首先,您需要确保在映像或 pod 中设置了 env。在镜像中,您需要在 Dockerfile 中使用 ENV。文档。在 Kubernetes pod 中,doc。其次,你提到你想从你的 pod 中获取运行时环境变量,你可以运行下面的命令。kubectl&nbsp;exec&nbsp;-it&nbsp;${POD_NAME}&nbsp;--&nbsp;printenv
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go