Kubernets配置文件管理 -- (ConfigMap)
ConfigMap介绍
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配置的修改。
ConfigMap也是按Namespace隔离的,不同的Namespace之间ConfigMap的名称可以相同,但是不能跨Namespace进行访问。所以创建ConfigMap,可以使用-n指定资源所在的Namespace(命名空间),默认创建在default命名空间下。
注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。
配置是程序绕不开的话题,在Kubernetes中使用ConfigMap来配置,它本质其实就是键值对。
# congiMap里的配置文件是如何存储的
## 方法一
键值对 key:value
## 方法二
文件名:配置文件的内容
# configMap支持的配置类型
1.直接定义的键值对
2.基于文件创建的键值对
# configMap创建方式
1.命令行
2.资源配置清单
# configMap的配置文件如何传递到POD里
1.变量传递 (毫无意义)
2.数据卷挂载
# 使用configMap的限制条件
1.ConfigMap必须在Pod之前创建,Pod才能引用他
2.ConfigMap受限于命名空间限制,只有处于同一个命名空间中的Pod才可以被引用
命令行创建ConfigMap -- (key-value)
## 以键值对的方式存在 key=value
--from-literal:指定键值对的 key=value
kubectl create configmap web-config \
--from-literal=nginx_port=80 \
--from-literal=server_name=www.jkt.com
[root@master app]# kubectl create configmap web-config \
> --from-literal=nginx_port=80 \
> --from-literal=server_name=www.jkt.com
configmap/web-config created
[root@master app]# kubectl get cm
NAME DATA AGE
web-config 2 11s
[root@master app]# kubectl describe cm web-config
Name: web-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
nginx_port:
----
80
server_name:
----
www.jkt.com
Events: <none>
POD引用cm
将对应cm中 key的value 赋值给 env的名字 当吃环境变量传递进入系统
apiVersion: v1
kind: Pod
metadata:
name: nginx-cm
spec:
containers:
- name: nginx-pod
image: nginx:alpine
env:
- name: NGINX_PORT
valueFrom:
configMapKeyRef:
name: web-config
key: nginx_port
- name: SERVER_NAME
valueFrom:
configMapKeyRef:
name: web-config
key: server_name
命令行创建ConfigMap--(基于file)
[root@master01 configmap]# cat www.conf
server {
listen 这是一个80端口;
server_name www.kjt.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
}
[root@master cm]# kubectl create configmap nginx-www \
--from-file=web-www=./www.conf
POD引用configmap
apiVersion: v1
kind: Pod
metadata:
name: nginx-cm02
spec:
volumes:
- name: nginx-www-file
configMap:
name: nginx-www
items:
- key: web-www
path: nginx.conffff
containers:
- name: nginx-pod
image: nginx:alpine
volumeMounts:
- name: nginx-www-file
mountPath: /tmp
##### 通过修改cm 实现远程修改
[root@master cm]# kubectl edit cm nginx-www
configmap/nginx-www edited
资源清单创建configMap
将文件内容写入资源清单 通过管道符多行输入
apiVersion: v1 # 指定ConfigMap资源使用的API版本
kind: ConfigMap # 定义资源类型,这里是ConfigMap
metadata: # 包含ConfigMap的元数据
name: kjt-conf # ConfigMap的名称
namespace: default # 指定ConfigMap所在的命名空间,这里是默认命名空间
data: # 该部分包含配置信息
kjt001-key: | # ConfigMap中的一个键,后面是多行字符串
[root@master01 configmap]# cat nginx-cm03.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: kjt-conf
namespace: default
data:
kjt001-key: |
server {
listen 5050;
server_name blog.zls.com;
location / {
root /usr/share/nginx/html/www;
index index.html index.htm;
}
}
kjt002-key: |
server {
listen 5051;
server_name zh.zls.com;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
}
}
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-cm03
spec:
volumes:
- name: kjt-001-file
configMap:
name: kjt-conf
items:
- key: kjt001-key
path: kjt001.conffff
- name: kjt-002-file
configMap:
name: kjt-conf
items:
- key: kjt002-key
path: kjt002.conffff
containers:
- name: nginx-pod
image: nginx:alpine
volumeMounts:
- name: kjt-001-file
mountPath: /tmp/kjt001
- name: kjt-002-file
mountPath: /tmp/kjt002