我正在尝试在kubernetes容器中传递环境变量。
到目前为止我做了什么?
创建部署
kubectl create deployment foo --image=foo:v1
创建一个NODEPORT服务并公开端口
kubectl expose deployment/foo --type=NodePort --port=9000
看到豆荚
kubectl get pods
转储配置(以便添加环境变量)
kubectl get deployments -o yaml > dev/deployment.yaml
kubectl get svc -o yaml > dev/services.yaml
kubectl get pods -o yaml > dev/pods.yaml
向容器中添加env变量 env:
删除svc,pod,部署
kubectl delete -f dev/ --recursive
应用配置
kubectl apply -f dev/ --recursive
验证环境参数
kubectl describe pods
有点奇怪
如果我手动更改了Pod Yaml的元信息,并硬编码Pod的名称。它获取env变量。但是,这次有两个Pod,其中一个带有硬编码名称,另一个带有哈希。例如,如果我硬编码的名称是“ foo”,则两个容器,即foo和foo-12314faf(示例)将出现在“ kubectl get pods”中。你能解释为什么吗?
问题
为什么验证步骤没有显示环境变量?
答案 0 :(得分:4)
在注释部分中解决了该问题。
如果您想将 env 设置为广告连播,我建议您使用 set 推荐
kubectl set env --help
将提供更多详细信息,例如列出环境并创建新环境。
Examples:
# Update deployment 'registry' with a new environment variable
kubectl set env deployment/registry STORAGE_DIR=/local
# List the environment variables defined on a deployments 'sample-build'
kubectl set env deployment/sample-build --list
部署启用Pods和ReplicaSets的声明式更新。 Pod通常不会直接在群集上启动。取而代之的是,Pod通常由copySet管理,后者由部署管理。
答案 1 :(得分:1)
spec:
containers:
- name: auth
image: lord/auth
env:
- name: MONGO_URI
value: "mongodb://auth-mongo-srv:27017/auth"
process.env.MONGO_URI
或者您可以先添加一个秘密,然后在无数部署文件中使用新创建的秘密,以共享具有值的相同环境变量:
kubectl create secret generic jwt-secret --from-literal=JWT_KEY=my_awesome_jwt_secret_code
spec:
containers:
- name: auth
image: lord/auth
env:
- name: MONGO_URI
value: "mongodb://auth-mongo-srv:27017/auth"
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
process.env.MONGO_URI
process.env.JWT_KEY