kubernetes Configmap secret的使用

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: 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,

这种就是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: 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的使用,不足之处希望大家可以指出!

猜你喜欢

转载自www.cnblogs.com/dingbin/p/9766641.html