繁体   English   中英

从 pod 访问环境变量

[英]Accessing environment variables from a 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 访问本地环境变量?

...haven't set the env var in the pod. I set it locally in my system

在您的主机上设置的环境变量不会自动传递给 Pod。 您可以在规范中设置环境并通过容器访问。 将规范中的环境变量替换为主机上的变量的常用方法是使用envsubst < draft-spec.yaml > final-spec.yaml

制作一个像这样的 yaml 文件来定义配置 map

apiVersion: v1
data:
  CLOUD_TYPE: "$CLOUD_TYPE"
  CLUSTER_REGION: "$CLUSTER_REGION"
  CLUSTER_TYPE: "$CLUSTER_TYPE"
  CLUSTER_NAME: "$CLUSTER_NAME"
  CLUSTER_ID: "$CLUSTER_ID"
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: foo

确保您的配置变量已设置,然后将其应用于您的集群,首先使用 env 替换

envsubst < foo.yaml | kubectl apply -f

然后在 pod 定义中使用配置 map

spec:
  containers:
  - name: mypod
    envFrom:
    - configMapRef:
        name: foo

看来您将 env var 设置为不在图像中。

首先,您需要确保在映像或 pod 中设置了 env。 在图像中,您需要在 Dockerfile 中使用 ENV。 文档 在 Kubernetes 吊舱中, 文档

其次,你提到你想从你的 pod 中获取运行时环境变量,你可以运行下面的命令。

kubectl exec -it ${POD_NAME} -- printenv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM