kubernetes Configmap secret的使用

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

相關文章
相關標籤/搜索