我们有一组使用相同docker镜像的部署(pod集)。例子:
它们都需要一组常见的环境变量,例如数据库主机的位置,外部服务的密钥等。它们还有一组不常见的环境变量。
无论如何,还有人可以:
最佳解决方案是名称空间感知,因为我们使用kubernetes名称空间分隔测试,阶段和prod环境。
类似于dockers env_file的东西会很好。但我找不到任何与此相关的例子或参考。我唯一能找到的是通过秘密设置env,但这不是干净的,详细的方式,因为我仍然需要为每个部署编写所有环境变量。
答案 0 :(得分:2)
您可以create a ConfigMap使用所有常见kye:value
对env变量。
然后,您可以重复使用configmap将configMap
的所有值声明为Deployment
中的环境。
创建一个包含多个键值对的ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm
使用envFrom将所有ConfigMap的数据定义为Pod环境变量。 ConfigMap中的键成为Pod中的环境变量名称。
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: special-config # All the key-value pair will be taken as environment key-value pair
env:
- name: uncommon
value: "uncommon value"
restartPolicy: Never
您可以在env
字段中指定不常见的env变量。
现在,要验证环境变量是否实际可用,请参阅日志。
$ kubectl logs -f test-pod
KUBERNETES_PORT=tcp://10.96.0.1:443
SPECIAL_LEVEL=very
uncommon=uncommon value
SPECIAL_TYPE=charm
...
在这里,可以看到所有提供的环境都可用。
答案 1 :(得分:0)
您可以先添加一个秘密,然后在无数部署文件中使用新创建的秘密,以共享具有值的相同环境变量:
kubectl create secret generic jwt-secret --from-literal=JWT_KEY=my_awesome_jwt_secret_code
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: lord/auth
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
env:
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
process.env.JWT_KEY
apiVersion: apps/v1
kind: Deployment
metadata:
name: tickets-depl
spec:
replicas: 1
selector:
matchLabels:
app: tickets
template:
metadata:
labels:
app: tickets
spec:
containers:
- name: tickets
image: lord/tickets
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
env:
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
process.env.JWT_KEY