可以向docker容器里面传入环境变量,例如:
docker run -e APP_COLOR=red my-color-app
k8s也一样:
创建 Pod 时,可以为 Pod 中运行的容器设置环境变量。要设置环境变量,请在配置文件中包含“env”或“envFrom”字段。
向pod里面传入环境变量一般有三种方式——Plain Key Value, ConfigMap, Secrets
:
创建一个pod,yaml文件里定义了env:
apiVersion: v1
kind: Pod
metadata:
name: env-demo
spec:
containers:
- name: nginx
image: nginx
env:
- name: USERINFO
value: "kongpingfan"
- name: GREETING
value: "HELLO my friend"
进入pod进行验证:
参考: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
上节介绍了将env直接写到yaml文件中。
当有许多的yaml文件,他们都有一套环境变量时,管理起来就非常麻烦。
例如有dev环境和prod环境,里面维护了不同的变量:
Dev env: app.env=dev app.mem=2048m app.properties=dev.env.url
Prod env: app.env=prod app.mem=8096m app.properties=prod.env.url
可以将这些环境变量提取出来,放到ConfigMap
里面统一管理。类比于aws的parameter store,一模一样的作用。
使用ConfigMap
非常简单:先创建、再映射到Pod里。
和其他对象一样,ConfigMap
也有两种创建方式:使用命令行和使用yaml文件。
命令行:kubectl create configmap [NAME] [DATA-SOURCE]
[root:etc]$ kubectl create configmap dev-config --from-literal=app.mem=2048m
configmap/dev-config created
查看创建的configmap:
[root:etc]$ kubectl get configmap dev-config -o yaml
apiVersion: v1
data:
app.mem: 2048m
kind: ConfigMap
metadata:
creationTimestamp: "2020-01-26T04:26:10Z"
name: dev-config
namespace: default
resourceVersion: "20135077"
selfLink: /api/v1/namespaces/default/configmaps/dev-config
uid: fa982d7b-3ff3-11ea-8d48-06a014a4eb80
创建一个文件dev-config
,里面内容:
app.env=dev
app.mem=2048m
app.properties=dev.env.url
[root:pod]$ kubectl create configmap dev-env --from-file=dev-config
configmap/dev-env created
[root:pod]$ kubectl get configmap dev-env -o yaml
apiVersion: v1
data:
dev-config: |-
app.env=dev
app.mem=2048m
app.properties=dev.env.url
kind: ConfigMap
metadata:
creationTimestamp: "2020-01-26T04:31:43Z"
name: dev-env
namespace: default
resourceVersion: "20135689"
selfLink: /api/v1/namespaces/default/configmaps/dev-env
uid: c17275e3-3ff4-11ea-8103-02c2b593c912
pod使用ConfigMap
有两种方式:一种是映射到环境变量里,另一种将配置映射到pod某个目录下。
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: nginx
image: nginx
envFrom:
- configMapRef:
name: app-configmap
创建pod后,可以进入pod查看环境变量:
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: dev-env
进入pod查看挂载的文件:
[@root:pod]$ kubectl apply -f configmap-pod.yaml
pod/configmap-pod created
[@root:pod]$ kubectl exec -it configmap-pod bash
root@configmap-pod:/# cd /etc/config
root@configmap-pod:/etc/config# ls
dev-config
root@configmap-pod:/etc/config# cat dev-config
app.env=dev
app.mem=2048m
app.properties=dev.env.url