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的使用,不足之處但願你們能夠指出!