Configmap

configmap配置信息和镜像解耦,实现方式为将配置信息放到configmap对象中,然后在pod中作为volume挂载到pod中,从而实现导入配置的目的。

使用场景:

  • 通过configmap给pod定义全局环境变量
  • 通过configmap给pod传递命令行参数,如mysql -u -p 中的账户名密码可以通过configmap传递
  • 通过configmap给pod中的容器服务提供配置文件,配置文件以挂载到容器的形式使用

注意:configmap需要在pod使用它之前创建。

  • pod只能使用位于同一个namespace的configmap,即configmap不能跨namespace使用
  • 通常用语非安全加密的配置场景
  • configmap通常是小于1MB的配置

示例1:

[root@haproxy1 case10-configmap]# cat 1-deploy_configmap.yml 
#定义configmap资源
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
  namespace: dujie
data:
#default是key,value对应的是配置文件内容
 default: |
    server {
       listen       80;
       server_name  www.mysite.com;
       index        index.html index.php index.htm;

       location / {
           root /data/nginx/html;
           if (!-e $request_filename) {
               rewrite ^/(.*) /index.html last;
           }
       }
    }


---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dujie
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ng-deploy-80
  template:
    metadata:
      labels:
        app: ng-deploy-80
    spec:
      containers:
      - name: ng-deploy-80
        image: nginx:1.20.0
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath:  /etc/nginx/conf.d/mysite
      volumes:
      #volumes指定类型为configmap
      - name: nginx-config
        configMap:
          name: nginx-config
      #设置item,key为上面定义的,path为文件名
          items:
             - key: default
               path: mysite.conf

---
apiVersion: v1
kind: Service
metadata:
  namespace: dujie
  name: ng-deploy-80
spec:
  ports:
  - name: http
    port: 81
    targetPort: 80
    nodePort: 30019
    protocol: TCP
  type: NodePort
  selector:
    app: ng-deploy-80