kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件。如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据,让后会动态的改变pod容器里面的配置信息。
configmap的数据是以键值的形式
configMap 的使用
第一步:创建configmap
kubectl create configmap nginx-conf --from-literal=NGINX_PORT=8080 --from-literal=SERVER_NAME=dingbin
这里创建了2个数据,一个是NGINX_PORT=8080,一个是SERVER_NAME=dingbin
显示创建的configmap
pod如何引用configmap的数据,第一种是通过环境变量的方式来引用。看下面的yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-cm
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp-cm
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:
env: #这里开始是引用configmap
- name: Nginx_PORT
valueFrom:
configMapKeyRef:
name: nginx-conf #这个是刚刚创建的configmap的名字
key: NGINX_PORT #这是configmap里面数据的键
- name: NGINX_SERVERNAME
valueFrom:
configMapKeyRef:
name: nginx-conf
key: SERVER_NAME
创建上面的pod,
这种就是pod通过env来引用configmap里面的数据
第二种方法是pod把configmap当作存储卷来挂载的方式
新建一个nginx的虚拟主机的配置文件 vim nginx-server.conf
重新创建一个configmap ,这次是直接把这个文件当作键的值
kubectl create configmap nginx-server --from-file=./nginx-server.conf
pod 通过挂载的方式来引用configmap,yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-cm2
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp-cm
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:
volumeMounts: #这里挂载
- name: html 挂载的卷名
mountPath: /etc/nginx/conf.d/ #挂载在容器的路径
readOnly: true
volumes: #定义卷
- name: html #卷的名字
configMap: 类型是configMap
name: nginx-server 这里是刚创建configmap的名字
创建pod
在容器中创建 /data/web/html ,新建一个index.html
随便找一个节点,添加一个hosts解析
如果配置发生变化,只需要更改configmap里的数据,会自动更新pod容易里面的配置文件,如下
上图是容器里面的配置文件。
注意,容器的配置文件是更改了,但是还是需要重新reload下nginx,否则nginx监听的端口是没有改变的
kubernetes secret 和configmap很像,不同的是secret是数据是私密的数据,会加密成base64的格式,比如一般密码,私钥等要用secret
secret由三种类型,第一种是docker-registry 是专门给docker使用的,第二种是generic是通用型,比如你要存储密码可以使用,第三种是证书的私钥使用的
创建个generic的测试下效果:
创建好了,至于引用的方式和configmap一样,可以是env的方式,也可以是挂载的方式,
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp-secret1
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:
env:
- name: MYSQL_PASSWOED
valueFrom:
secretKeyRef:
name: mysql-password #secret的名字
key: password #secret数据的键
以上是configmap和secret的使用,不足之处希望大家可以指出!