Kubernetes使用ConfigMap配置应用程序(二)

上一篇学习了通过args方式还是env方式都是将配置应用,配置参数硬编码在POD配置文件中,实际应用部署的过程中,我们希望配置参数和POD配置能够解藕,今天我们就看一下如何用ConfigMap配置应用。

创建一个ConfigMap

  • 使用命令行创建
1
kubectl create configmap fortune-configmap --from-literal=sleep-interval=60

创建成功以后可以通过kubectl命令查询configmap的配置。

kubectl get configmap fortune-configmap -o yaml 查询结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
data:
sleep-interval: "60"
kind: ConfigMap
metadata:
creationTimestamp: "2020-09-29T12:29:40Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:sleep-interval: {}
manager: kubectl-create
operation: Update
time: "2020-09-29T12:29:40Z"
name: fortune-configmap
namespace: default
resourceVersion: "2434"
selfLink: /api/v1/namespaces/default/configmaps/fortune-configmap
uid: a6562e65-1431-47b1-b153-e4c270561a2c
  • 使用yaml文件创建

上述查询到信息将metadata中只保留名称就可以创建一个简单的ConfigMap配置文件,使用如下命令即可通过文件创建ConfigMap kubectl create -f fortune-congfigmap.yaml

在POD文件中使用CongfigMap配置应用

  • 使用环境变量配置应用 修改POD配置文件,使用ConfigMap配置env参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
apiVersion: v1
kind: Pod
metadata:
name: fortune-env
labels:
app: fortune-env
spec:
containers:
- name: html-gen
image: 172.17.0.1:5000/fortune:env
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-configmap
key: sleep-interval
volumeMounts:
- name: html
mountPath: /var/htdocs
- name: log
mountPath: /var/log/fortune
- name: web-server
image: 172.17.0.1:500/nginx:alpine
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
- name: log-server
image: 172.17.0.1:5000/nginx:log
volumeMounts:
- name: log
mountPath: /usr/share/nginx/log
readOnly: true
ports:
- containerPort: 8080
protocol: TCP
volumes:
- name: html
emptyDir: {}
- name: log
emptyDir: {}

重新创建PODkubectl create -f fortune-pod-env.yaml, 此时再查询fortune每个60秒更新一次。实际应用部署时,也可以修改ConfigMap的配置,当新新建POD时会使用新的ConfigMap值。

  • 使用参数配置应用

和使用环境变量配置POD类似,修改POD配置文件,使用ConfigMap配置args参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
apiVersion: v1
kind: Pod
metadata:
name: fortune-args
labels:
app: fortune-args
spec:
containers:
- name: html-gen
image: 172.17.0.1:5000/fortune:args
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-configmap
key: sleep-interval
args: [$(INTERVAL)]
volumeMounts:
- name: html
mountPath: /var/htdocs
- name: log
mountPath: /var/log/fortune
- name: web-server
image: 172.17.0.1:500/nginx:alpine
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
- name: log-server
image: 172.17.0.1:5000/nginx:log
volumeMounts:
- name: log
mountPath: /usr/share/nginx/log
readOnly: true
ports:
- containerPort: 8080
protocol: TCP
volumes:
- name: html
emptyDir: {}
- name: log
emptyDir: {}

创建PODkubectl create -f fortune-pod-args.yaml, 此时查询fortune每个60秒更新一次。

此时,如果删除旧的ConfigMap,重新配置一个新的ConfigMap,再同时删除frotune-env pod和fortune-args pod并重新新建POD时会使用新的ConfigMap值。

ConfigMap可以配置的资源

从文件、文件夹和字符创建的ConfigMap

Kubernetes使用ConfigMap配置应用程序(二)

http://mixiang.tech/2020/09/29/2020-09-29-20/

作者

Mixion

发布于

2020-09-29

更新于

2022-12-02

许可协议