我撰寫了 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 訪問本地環境變數?
uj5u.com熱心網友回復:
制作一個像這樣的 yaml 檔案來定義一個配置映射
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 定義中使用配置映射
spec:
containers:
- name: mypod
envFrom:
- configMapRef:
name: foo
uj5u.com熱心網友回復:
看來您設定的 env var 不在影像中。
首先,您需要確保在影像或 pod 中設定了 env。在鏡像中,您需要在 Dockerfile 中使用 ENV。博士。在 Kubernetes pod 中,doc。
其次,你提到你想從你的 pod 中獲取運行時環境變數,你可以運行下面的命令。
kubectl exec -it ${POD_NAME} -- printenv
uj5u.com熱心網友回復:
...haven't set the env var in the pod. I set it locally in my system
在您的主機上設定的環境變數不會自動傳遞到 Pod。您可以在規范中設定 env并通過容器進行訪問。將規范中的環境變數替換為主機上的變數的常用方法是使用envsubst < draft-spec.yaml > final-spec.yaml. 例如,如果您有規格:
apiVersion: v1
kind: Pod
metadata:
labels:
run: busybox
name: busybox
spec:
restartPolicy: Never
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["ash","-c","echo ${CONTAINER_MESSAGE}"]
env:
- name: CONTAINER_MESSAGE
value: $HOST_MESSAGE
你可以運行HOST_MESSAGE='hello, world!' envsubst '{$HOST_MESSAGE}' < busybox.yaml | kubectl apply -f -。這會將 $HOST_MESSAGE 替換為“你好,世界!” 但不會觸及 ${CONTAINER_MESSAGE}。這種方法不依賴于 ConfigMap,它允許您kubectl set env在部署后使用它來更新變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/367225.html
標籤:走 Kubernetes 环境变量 亚马逊-eks Kubernetes-pod
上一篇:從JSON陣列創建整數切片
