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的使用,不足之处但愿你们能够指出!

相关文章
相关标签/搜索