kubernetes configmap 核心做用是让配置信息和镜像解耦,pod可使用configmap的数据生成配置文件。若是后端的pod配置文件要改变时,只须要更改下configmap里面的数据,让后会动态的改变pod容器里面的配置信息。html
configmap的数据是以键值的形式mysql
configMap 的使用nginx
第一步:建立configmap web
kubectl create configmap nginx-conf --from-literal=NGINX_PORT=8080 --from-literal=SERVER_NAME=dingbinsql
这里建立了2个数据,一个是NGINX_PORT=8080,一个是SERVER_NAME=dingbindocker
显示建立的configmapvim
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: 80 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,api
这种就是pod经过env来引用configmap里面的数据app
第二种方法是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: 80 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: 80 env: - name: MYSQL_PASSWOED valueFrom: secretKeyRef: name: mysql-password #secret的名字 key: password #secret数据的键
以上是configmap和secret的使用,不足之处但愿你们能够指出!