为容器设置环境变量

为容器设置环境变量

文章目录

  • 为容器设置环境变量
    • 在容器中指定环境变量
    • 使用configMap传递环境变量
    • 一次性传递configMap所有条目作为环境变量

在容器中指定环境变量

假如现在有demo.sh和Dockerfile
demo.sh:

#!/bin/bash

while [[ true ]]; do
	echo time $INTERVAL
	sleep $INTERVAL
done

Dockerfile:

FROM centos
ADD demo.sh /root/demo.sh
ENTRYPOINT [ "/root/demo.sh" ]

构建镜像

docker build -t demo:env .

创建pod

apiVersion: v1
kind: Pod
metadata:
  name: mydemo01
  namespace: test01
  labels:
    app: mydemo01
spec:
  containers:
  - name: mydemo01
    image: demo:env
    env:
    - name: INTERVAL  # 环境变量名称
      value: "1"  # 指定环境变量值
  restartPolicy: Always

如果docker容器中的应用是java编写,使用System.getenv[“INTERVAL”]来获取环境变量,如果是python编写的,使用os.environ[‘INTERVAL’],根据不同应用环境相应获取系统环境变量即可。

使用configMap传递环境变量

创建一个配置条目

[root@master test01]# kubectl create configmap mydemo-conf --from-literal=sleep-interval=2 -n test01
[root@master test01]# kubectl get configmaps -n test01
NAME          DATA   AGE
mydemo-conf   1      17s
[root@master test01]# kubectl describe configmaps -n test01 mydemo-conf
Name:         mydemo-conf
Namespace:    test01
Labels:       <none>
Annotations:  <none>

Data
====
sleep-interval:
----
2

创建pod

apiVersion: v1
kind: Pod
metadata:
  name: mydemo01
  namespace: test01
  labels:
    app: mydemo01
spec:
  containers:
  - name: mydemo01
    image: demo:env
    env:
    - name: INTERVAL  # 变量名称
      valueFrom:  # 值来源于configMap
        configMapKeyRef:
          name: mydemo-conf  # 指定configMap名称
          key: sleep-interval  # 指定配置条目名称
  restartPolicy: Always

一次性传递configMap所有条目作为环境变量

demo.sh

#!/bin/bash

while [[ true ]]; do
	echo args1: $HOST,args2: $PORT,args3: $DB_NAME
	sleep $INTERVAL
done

Dockerfile

FROM centos
ADD demo.sh /root/demo.sh
ENTRYPOINT [ "/root/demo.sh" ]

生成镜像

docker build -t demo:env .

创建configMap

[root@master test01]# kubectl create configmap mydemo-conf -n test01 --from-literal=HOST=127.0.0.1 --from-literal=PORT=3306 --from-literal=DB_NAME=users --from-literal=INTERVAL=2
[root@master test01]# kubectl describe configmaps -n test01 mydemo-conf
Name:         mydemo-conf
Namespace:    test01
Labels:       <none>
Annotations:  <none>

Data
====
PORT:
----
3306
DB_NAME:
----
users
HOST:
----
127.0.0.1
INTERVAL:
----
2

创建pod

apiVersion: v1
kind: Pod
metadata:
  name: mydemo01
  namespace: test01
  labels:
    app: mydemo01
spec:
  containers:
  - name: mydemo01
    image: demo:env
    envFrom:
      - configMapRef:
          name: mydemo-conf
  imagePullPolicy: 
  restartPolicy: Always

验证

[root@master test01]# kubectl get pods -n test01
NAME       READY   STATUS    RESTARTS   AGE
mydemo01   1/1     Running   0          21s
[root@master test01]# kubectl logs -f -n test01 mydemo01
args1: 127.0.0.1,args2: 3306,args3: users
args1: 127.0.0.1,args2: 3306,args3: users
args1: 127.0.0.1,args2: 3306,args3: users

你可能感兴趣的:(kubernetes,容器,docker,kubernetes)