官方文档: 配置 Pod 使用 ConfigMap
ConfigMap
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,Pods 可以将其用作环境变量,命令行参数或者存储卷中的配置文件。
ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配置的修改。
注意,ConfigMap 并不提供保密或者加密功能。如果你想存储的数据是机密的,请使用 Secret,或者使用其他第三方工具来保证你数据的私密性,而不是使用 ConfigMap。
ConfigMap 在设计上不是用来保存大量数据的,在 ConfigMap 中保存的数据不可超过 1MiB。如果你需要保存超过此尺寸限制的数据,你可能希望考虑挂载存储卷或者使用独立的数据库或者文件服务。
ConfigMap 对象
ConfigMap 是一个 API 对象,让你可以存储其他对象所需要使用的配置。和其他 kubernetes 对象都有一个 spec
不同的是,ConfigMap 使用 data
和 binarData
字段。这些字段能够接收键值对作为其取值。data 和 binaryData 字段都是可选的。data 字段设计用来保存 UTF-8 字节序列,而 binaryData 则被设计用来保存二进制数据作为 base64 编码的字串。
data
或 binaryData
字段下面的每个键的名称都必须由字母数字字符或者 -
、_
或 .
组成。在 data
下保存的键名不可以与在 binaryData
下出现的键名由重叠。
从 v1.19 开始,可以添加一个 immutable 字段到 ConfigMap 定义中,创建不可变更的 ConfigMap。
创建 ConfigMap
可以使用 kubectl create configmap 或者 kustomization.yaml 中的 ConfigMap 生成器来创建 ConfigMap。注意,kubectl 从 1.14 版本开始支持 kustomization.yaml。
使用 kubectl 创建 ConfigMap
可以使用 kubectl create configmap 命令基于目录,文件或者字面值来创建 ConfigMap:
1 | kubectl create configmap <map-name> <data-source> |
- map-name:要设置的 ConfigMap 名称
- data-source:要从中提取数据的目录,文件或者字面值。
当你基于文件来创建 ConfigMap 时,data-source 中的键名默认取自文件的基本名,而对应的值默认为文件的内容。
可以使用 kubectl describe 或者 kubectl get 获取有关 ConfigMap 的信息。
基于目录创建 ConfigMap
你可以使用 kubectl create configmap 基于同一目录中的多个文件创建 ConfigMap。当基于目录创建 ConfigMap 时,kubectl 识别目录下基本名可以作为合法键名的文件,并将这些文件打包到新的 ConfigMap 中。普通文件之外的所有目录项都会被忽略(例如,子目录,符号链接,设备,管道等)。
例如:
1 | # 创建本地目录 |
以上命令将 configure-pod-container/configmap
目录下的所有文件,也就是 game.properties
和 ui.properties
打包到 game-config
ConfigMap 中。
- 你可以使用下面的命令显示 ConfigMap 的详细信息
1 | # kubectl describe configmaps game-config |
configure-pod-container/configmap/
目录中的 game.properties
和 ui.properties
文件出现在 ConfigMap 的 data
部分。
- 也可以使用 kubectl get 命令查看,输出类似如下内容
1 | # kubectl get configmaps game-config -oyaml |
基于文件创建 ConfigMap
你可以使用 kubectl create configmap
基于单个文件或多个文件创建 ConfigMap,例如
1 | # kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties |
将产生以下 ConfigMap
1 | # kubectl describe configmaps game-config-2 |
可以多次使用 --from-file
参数,从多个数据源创建 ConfigMap
1 | # kubectl create configmap game-config-3 --from-file=configure-pod-container/configmap/game.properties --from-file=configure-pod-container/configmap/ui.properties |
查看上面创建的 game-config-3
1 | # kubectl describe configmaps game-config-3 |
从环境文件创建 ConfigMap
使用 --from-env-file
选项从环境文件创建 ConfigMap,例如:
Env 文件包含环境变量列表。其中适用以下语法规则
- Env 文件中的每一行必须为 VAR=VAL 的格式;
- 以 # 开头的行(即注释)将被忽略;
- 空行将被忽略;
- 引号不会被特殊处理(即它们将成为 ConfigMap 值得一部分)。
将示例文件下载到 configure-pod-container/configmap/
目录
1 | wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties |
env 文件 game-env-file.properties 内容如下
1 | # cat configure-pod-container/configmap/game-env-file.properties |
创建 configMap
1 | # kubectl create configmap game-config-env-file --from-env-file=configure-pod-container/configmap/game-env-file.properties |
将产生以下 ConfigMap
1 | # kubectl get configmaps game-config-env-file -oyaml |
注意,当多次使用
--from-env-file
来从多个数据源创建 ConfigMap 时,仅仅最后一个env
文件有效。
定义从文件创建 ConfigMap 时要使用的键
在使用 –from-file 参数时,你可以定义在 configMap 的 data 部分出现的键名,而不是按默认行为使用文件名
1 | kubectl create configmap game-config-3 --from-file=<my-key-name>=<path-to-file> |
说明:
<my-key-name>
是你要在 ConfigMap 中使用的键名;<path-to-name>
是你想要键表示数据源文件的位置。
例如:
1 | # kubectl create configmap game-config-5 --from-file=game-special-key=configure-pod-container/configmap/game.properties |
查看产生的 game-config-5 内容
1 | # kubectl get configmaps game-config-5 -oyaml |
根据字面值创建 ConfigMap
可以将 kubectl create configmap 与 –from-literal 参数一起使用,从命令行定义文字值
1 | kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm |
可以传入多个键值对。命令行中提供的每对键值在 ConfigMap 的 data 部分均表示为单条的条目
1 | # kubectl get configmaps special-config -oyaml |
使用 ConfigMap 数据定义容器环境变量
使用单个 ConfigMap 中的数据定义容器环境变量
在 ConfigMap 中将环境变量定义为键值对
1
2# kubectl create configmap special-config --from-literal=special.how=very
configmap/special-config created将 ConfigMap 中定义的 special.how 的值分配给 Pod 规范中的 SPECIAL_LEVEL_KEY 环境变量,创建 Pod 文件 pod-single-configmap-env-variable.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "env"]
env:
# 定义环境变量
- name: SPECIAL_LEVEL_KEY # 容器中环境变量的名称
valueFrom:
configMapKeyRef:
name: special-config # ConfigMap 的名字
key: special.how # 需要分配的 key 的名称
restartPolicy: Never创建 Pod
1
2# kubectl create -f pod-single-configmap-env-variable.yaml
pod/dapi-test-pod created现在查看 Pod 的输出中是否包含环境变量 SPECIAL_LEVEL_KEY=very
1
2# kubectl logs dapi-test-pod |grep SPECIAL_LEVEL_KEY
SPECIAL_LEVEL_KEY=very
使用来自多个 ConfigMap 的数据定义容器环境变量
与前面的示例一样,首先创建 ConfigMap 文件 configmaps.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO创建 ConfigMap
1
2
3# kubectl create -f configmaps.yaml
configmap/special-config created
configmap/env-config created定义 Pod 规范文件 pod-multiple-configmap-env-variable.yaml,使用 定义的环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: ["bin/sh", "-c", "env"]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: env-config
key: log_level
restartPolicy: Never创建 Pod
1
2# kubectl create -f pod-multiple-configmap-env-variable.yaml
pod/dapi-test-pod created查看 Pod 的输出中是否包含环境变量 SPECIAL_LEVEL_KEY=very 和 LOG_LEVEL=INFO
1
2
3# kubectl logs dapi-test-pod |grep -E "SPECIAL_LEVEL_KEY|LOG_LEVEL"
LOG_LEVEL=INFO
SPECIAL_LEVEL_KEY=very
将 ConfigMap 中的所有键值对配置为容器环境变量
创建一个包含多个键值对的 ConfigMap 文件 configmap-multikeys.yaml
1
2
3
4
5
6
7
8apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm创建 ConfigMap
1
2# kubectl create -f configmap-multikeys.yaml
configmap/special-config created使用 envFrom 将所有 ConfigMap 的数据定义为容器环境变量,ConfigMap 中的键称为 Pod 中的环境变量名称
1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "env"]
envFrom:
- configMapRef:
name: special-config
restartPolicy: Never创建 Pod
1
2# kubectl apply -f pod-configmap-envFrom.yaml
pod/dapi-test-pod created查看 Pod 的输出是否包含变量
1
2
3# kubectl logs dapi-test-pod |grep -E "SPECIAL_LEVEL|SPECIAL_TYPE"
SPECIAL_LEVEL=very
SPECIAL_TYPE=charm
在 Pod 命令中使用 ConfigMap 定义的环境变量
你可以在 kubernetes 中使用 $(VAR_NAME) 语法在容器的 command 和 args 部分中使用 ConfigMap 中定义的环境变量
例如,以下 Pod 规范文件 pod-configmap-env-var-valueFrom.yaml
1 | apiVersion: v1 |
通过运行下面的命令创建 Pod
1 | # kubectl create -f pod-configmap-env-var-valueFrom.yaml |
查看 pod 的输出
1 | # kubectl logs dapi-test-pod |
将 ConfigMap 数据添加到一个卷中
如基于文件创建 ConfigMap 中所述,当你使用 –from-file 创建 ConfigMap 时,文件名成为存储在 ConfigMap 的 data 部分中的键,文件内容成为键对应的值。
本节中的示例引用了一个名为 special-config 的 ConfigMap,如下所示
1
2
3
4
5
6
7
8apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm创建 ConfigMap
1
kubectl create -f configmap-multikeys.yaml
使用存储在 ConfigMap 中的数据填充数据卷
在 Pod 的规范文件中的
volumes
部分添加 ConfigMap 名称。这会将 ConfigMap 数据添加到指定为volumeMounts.mountPath
的目录(本例中为/etc/config
)。command
部分引用存储在 ConfigMap 中的special.level
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: [ "/bin/sh", "-c", "ls /etc/config/" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: special-config
restartPolicy: Never创建 Pod
1
2# kubectl create -f pod-configmap-volume.yaml
pod/dapi-test-pod created查看 Pod 的输出
1
2
3# kubectl logs dapi-test-pod
SPECIAL_LEVEL
SPECIAL_TYPE
注意:如果在 /etc/config/ 目录中有一些文件,它们将被删除
将 ConfigMap 数据添加到数据卷中的特定路径
使用 path 字段为特定的 ConfigMap 项目指定预期的文件路径。在这里,SPECIAL_LEVEL 将被挂载在 config-volume 数据卷中的 /etc/config/keys 目录下
创建 Pod yaml 文件 pod-configmap-volume-special-key.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/keys" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
items:
- key: SPECIAL_LEVEL
path: keys
restartPolicy: Never创建 Pod
1
2# kubectl create -f pod-configmap-volume-special-key.yaml
pod/dapi-test-pod created查看pod输出
1
2# kubectl logs dapi-test-pod
very
注意,和之前一样,/etc/config/ 目录中的所有文件都将被删除,如果不想文件被删除,可以使用 subPath
的方式挂载。但是 ConfigMap 和 Secret 如果是以 subPath 的形式挂载的,那么 Pod 是不会感知到 ConfigMap 和 Secret 的更新的。如果 Pod 的变量来自于 ConfigMap 和 Secret 中定义的内容,那么 ConfigMap 和 Secret 更新后,也不会更新 Pod 中的变量。
把 ConfigMap 挂载到容器中充当配置文件
例如,nginx 的配置文件 nginx.conf;可以使用 nginx.conf 文件创建 ConfigMap,然后将 configMap 挂载到 Pod 上;
创建 ConfigMap
1
kubectl create configmap nginx-config --from-file=nginx-config=nginx.conf
查看创建的 configmap
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# kubectl get configmaps nginx-config -oyaml
apiVersion: v1
data:
nginx-config: |
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-13T02:32:23Z"
name: nginx-config
namespace: default
resourceVersion: "3490546"
selfLink: /api/v1/namespaces/default/configmaps/nginx-config
uid: 84dda5f6-0bb7-463d-bd19-0e9d90a4f613创建 Deployment 文件
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
47
48
49
50
51
52
53
54
55
56
57
58apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demo-nginx
name: demo-nginx
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: demo-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: demo-nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
name: http
protocol: TCP
resources:
limits:
cpu: 100m
memory: 270Mi
requests:
cpu: 100m
memory: 70Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/nginx.conf
subPath: etc/nginx/nginx.conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: nginx-config
items:
- key: nginx-config
path: etc/nginx/nginx.conf
name: config-volume创建 deployment
1
2# kubectl create -f nginx-deploy.yaml
deployment.apps/demo-nginx created查看 pod 中的配置文件
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# kubectl exec -ti demo-nginx-54cfc9b7b8-tzcps -- ls /etc/nginx
conf.d koi-utf mime.types nginx.conf uwsgi_params
fastcgi_params koi-win modules scgi_params win-utf
# kubectl exec -ti demo-nginx-54cfc9b7b8-tzcps -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}修改 nginx.conf 文件,然后热更新 configMap
1
2
3# kubectl create cm nginx-config --from-file=nginx-config=nginx.conf --dry-run -oyaml |kubectl replace -f-
W0413 10:51:03.771630 114648 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
configmap/nginx-config replaced查看更新后的 ConfigMap
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# kubectl get configmaps nginx-config -oyaml
apiVersion: v1
data:
nginx-config: |
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-13T02:32:23Z"
name: nginx-config
namespace: default
resourceVersion: "3493764"
selfLink: /api/v1/namespaces/default/configmaps/nginx-config
uid: 84dda5f6-0bb7-463d-bd19-0e9d90a4f613查看 pod 的配置文件是否更新
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# kubectl exec demo-nginx-54cfc9b7b8-tzcps -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}这时候发现 Pod 中的配置文件并没有更新,这正好验证了之前说的 “ConfigMap和Secret如果是以subPath 的形式挂载的,那么Pod是不会感知到ConfigMap和Secret的更新的。”。
如果要实现 Pod 的配置文件自动更新,可以使用软连接的方式,具体实现方式可以使用 Pod 的以下特性:
- postStart: 容器启动之前执行的命令
- preStop: 容器停止之前执行的命令
实现 Pod 自动感知 ConfigMap 的更新而更新配置文件,修改 nginx-deployment.yaml 文件,添加 Pod 生命周期配置,不使用 subpath 的方式挂载,
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demo-nginx
name: demo-nginx
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: demo-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: demo-nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
name: web
protocol: TCP
resources:
limits:
cpu: 100m
memory: 270Mi
requests:
cpu: 100m
memory: 70Mi
lifecycle:
# 配置容器启动时执行创建软连接动作
postStart:
exec:
command:
- sh
- -c
- "rm -rf /etc/nginx/nginx.conf && ln -s /mnt/nginx-config /etc/nginx/nginx.conf"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
# 不采用 subpath 的方式挂载 configMap
#- name: config-volume
# mountPath: /etc/nginx/nginx.conf
# subPath: etc/nginx/nginx.conf
# 挂载新增的 ConfigMap 到 /mnt 目录
- name: config-volume-none-subpath
mountPath: /mnt/
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: nginx-config
items:
- key: nginx-config
path: etc/nginx/nginx.conf
name: config-volume
# 新增一个 configMap
- configMap:
defaultMode: 420
name: nginx-config
name: config-volume-none-subpath更新 deployment
1
2# kubectl replace -f nginx-deploy.yaml
deployment.apps/demo-nginx replaced查看当前 nginx 配置
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# kubectl exec -it demo-nginx-6696dd98b5-4d589 -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}修改 nginx.conf 问价, 更新 configMap。
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73# kubectl create configmap nginx-config --from-file=nginx-config=nginx.conf --dry-run -oyaml |kubectl replace -f-
W0413 11:43:13.754420 29651 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
configmap/nginx-config replaced
# kubectl get configmaps nginx-config -oyaml
apiVersion: v1
data:
nginx-config: |
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 1024m;
client_body_buffer_size 10m;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
server_tokens off;
tcp_nodelay on;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-13T02:32:23Z"
name: nginx-config
namespace: default
resourceVersion: "3503019"
selfLink: /api/v1/namespaces/default/configmaps/nginx-config
uid: 84dda5f6-0bb7-463d-bd19-0e9d90a4f613检查 Pod 中的 nginx.conf 文件是否更新
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
47
48
49
50
51
52
53
54
55
56
57
58# kubectl exec -it demo-nginx-6696dd98b5-4d589 -- cat /etc/nginx/nginx.conf
user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 1024m;
client_body_buffer_size 10m;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
server_tokens off;
tcp_nodelay on;
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}