Configmap
Configmap如何建立?
命令行建立
$ kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
configmap/special-config created
$ kubectl get cm
NAME DATA AGE
special-config 2 4s
$ kubectl get configmaps special-config -o yaml
apiVersion: v1
data:
special.how: very
special.type: charm
kind: ConfigMap
metadata:
creationTimestamp: "2020-08-01T12:14:17Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:special.how: {}
f:special.type: {}
manager: kubectl
operation: Update
time: "2020-08-01T12:14:17Z"
name: special-config
namespace: default
resourceVersion: "18003"
selfLink: /api/v1/namespaces/default/configmaps/special-config
uid: 6c116e86-d6b3-4d32-be87-d32f9a608219

指定文件形式建立
$ kubectl create configmap nginx-config --from-file=./nginx.conf
configmap/nginx-config created
$ kubectl get configmap nginx-config -o yaml
apiVersion: v1
data:
nginx.conf: |
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_status $request_time $upstream_response_time';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
server_tokens off;
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;
proxy_temp_path /data/nginx/proxy_temp;
proxy_cache_path /data/nginx/proxy_cache levels=1:2 keys_zone=cache_one:2000m inactive=3d max_size=500g;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
upstream go {
server www.cnblogs.com:80 weight=4;
#server 42.121.252.58:80 weight=4;
}
server {
listen 192.168.55.133:80;
#server_name www.cnblogs.com;
access_log /var/log/nginx/go.access.log main;
error_log /var/log/nginx/go.error.log error;
location / {
proxy_cache cache_one;
#proxy_cache_valid 200 304 301 302 2h;
#proxy_cache_valid any 2h;
#expires 1d;
add_header X-Cache $upstream_cache_status;
proxy_pass http://go;
proxy_cache_key $uri$is_args$args;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.55.0/24;
deny all;
proxy_cache_purge cache_one $1$is_args$args;
}
}
}
kind: ConfigMap
metadata:
creationTimestamp: "2020-08-01T12:19:48Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:nginx.conf: {}
manager: kubectl
operation: Update
time: "2020-08-01T12:19:48Z"
name: nginx-config
namespace: default
resourceVersion: "18116"
selfLink: /api/v1/namespaces/default/configmaps/nginx-config
uid: 2fb95961-a780-45ea-8db3-8ba85db1270d


指定一個目錄建立
$ cat >game/game.properties <<EOF
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.conde.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
EOF
$ cat >game/ui.properties <<EOF
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
EOF
$ ls -l game
total 16
-rw-r--r-- 1 ca0gu0 staff 159 8 1 20:28 game.properties
-rw-r--r-- 1 ca0gu0 staff 83 8 1 20:28 ui.properties
$ kubectl create configmap game-config --from-file=./game
configmap/game-config created
$ kubectl get cm
NAME DATA AGE
game-config 2 5s
nginx-config 1 9m6s
special-config 2 14m
$ kubectl get cm game-config -o yaml
apiVersion: v1
data:
game.properties: |
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.conde.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
kind: ConfigMap
metadata:
creationTimestamp: "2020-08-01T12:28:49Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:game.properties: {}
f:ui.properties: {}
manager: kubectl
operation: Update
time: "2020-08-01T12:28:49Z"
name: game-config
namespace: default
resourceVersion: "18299"
selfLink: /api/v1/namespaces/default/configmaps/game-config
uid: d71c3f79-e5f4-4932-a83d-96e861788d54

configmap如何讀取?
掛載到環境變量
嘗試將configmap配置掛載到環境變量,經過變量名讀取(valueFrom方式)
$ cat configmap-multikeys.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm
$ cat pod-configmap-env-var-valueFrom.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_TYPE
restartPolicy: Never
$ kubectl apply -f configmap-multikeys.yaml
configmap/special-config created
$ kubectl apply -f pod-configmap-env-var-valueFrom.yaml
pod/dapi-test-pod created
$ kubectl get cm
NAME DATA AGE
special-config 2 12s
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 Completed 0 12s
$ kubectl logs dapi-test-pod
very charm

掛載到文件
嘗試將configmap配置掛載到Pod文件,從文件讀取(volumeMounts方式)
# 將所有key都掛載成文件,文件名與key同名
ca0gu0@ca0gu0deMBP configmap % cat pod-configmap-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod2
spec:
containers:
- name: test-container
image: k8s.gcr.io/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
$ kubectl apply -f pod-configmap-volume.yaml
pod/dapi-test-pod2 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod2 0/1 Completed 0 3s
$ kubectl logs dapi-test-pod2
SPECIAL_LEVEL
SPECIAL_TYPE

# 將指定的key掛載到指定文件,自動建立文件
$ cat pod-configmap-volume-specific-key.yaml
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod3
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh","-c","ls /etc/config/; cat /etc/config/keys /etc/config/keys2" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
items:
- key: SPECIAL_LEVEL
path: keys
- key: SPECIAL_TYPE
path: keys2
restartPolicy: Never
$ kubectl create -f pod-configmap-volume-specific-key.yaml
pod/dapi-test-pod3 created
$ kubectl logs dapi-test-pod3
keys # 文件
keys2 # 文件
verycharm # 打印獲得的兩個文件的內容

【完結】