ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

k8s学习记录,配置管理ConfigMap&Secret(十七)

2021-06-05 16:04:25  阅读:347  来源: 互联网

标签:ConfigMap name conf configmap 配置管理 nginx Secret key volumes


传统配置管理模式

云原生要素-配置分离

ep:

使用nginx.conf配置文件创建一个configmap资源,在创建nginx的pod资源时,通过 volume将configmap中的配置文件挂载到容器对应的目录,即可实现配置分离管理,当配置修改后,程序通过热加载或reload,即可获取到最新的配置文件,不必每个服务都进行更新

ConfigMaps|Kubernetes

eg:创建ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # property-like keys; each key maps to a simple value
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # file-like keys
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true

eg:Pod使用ConfigMap

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:  #环境变量配置
        # Define the environment variable
        - name: PLAYER_INITIAL_LIVES # Notice that the case is different here  将上面player_initial_lives的值赋值给变量PLAYER_INITIAL_LIVES
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: game-demo           # The ConfigMap this value comes from.
              key: player_initial_lives # The key to fetch.
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:  # 这里配置volumes的挂载
      - name: config  # 下面volumes的名称
        mountPath: "/config"  # 路径
        readOnly: true
  volumes:
    # You set volumes at the Pod level, then mount them into containers inside that Pod
    - name: config
      configMap:
        # Provide the name of the ConfigMap you want to mount.
        name: game-demo  #对应创建的ConfigMap名称
        # An array of keys from the ConfigMap to create as files
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"

创建configmap的几种方法

1、基于文件夹创建configmap【目录下有多个配置文件,以目录为单位一起创建】

kubectl create cm cmfromdir --from-file=conf/

2、基于配置文件创建configmap【目录下有多个配置文件,以其中一个配置文件来创建】

kubectl create cm cmfromfile --from-file=conf/redis.conf

3、基于配置文件创建自定义名称的configmap【很少使用】

kubectl create cm cmspecialname --from-file=my-redis.conf=conf/redis.conf

4、基于环境变量文件创建configmap

kubectl create cm gameenvcm --from-env-file=conf/game.conf

5、也可以直接在命令中设置环境变量来创建configmap

kubectl create cm envfromliteral --from-literal=level=info --from-literal=password=redis123

6、基于yaml文件来创建configmap

kubectl create f game-demo.yaml

Pod中如何使用configmap

1、当我们要使用gameenvcm这个configmap中的live的值时,我们需要在pod中进行如下配置

....
    spec:
      containers:
      - image: nginx:1.15.1
        name: nginx
        env:
          - name: LIVE # pod中定义的变量名
            valueFrom:
              configMapKeyRef:
                name: gameenvcm  # configmap的名字
                key: live # configmap中的key值
          - name: ZW_TEST_ENV # 手动指定环境变量
            value: zw_test_env # 手动指定的ZW_TEST_ENV变量的值为zw_test_env
....  

当创建pod之后,就可以查看pod中的环境变量里 LIVE 这个变量的值和我们在configmap中配置的值一致,

2、当我们要一次性导入更多的环境变量时又该怎么做呢?---------> envFrom

....
    spec:
spec:
      containers:
      - image: nginx:1.15.1
        name: nginx
        envFrom:
          - configMapRef:
              name: cmenvfile
       #env:
       #  - name: LIVE
       #    valueFrom:
       #      configMapKeyRef:
       #        name: gameenvcm
       #        key: live
       #  - name: ZW_TEST_ENV
       #    value: zw_test_env
....


3、以文件形式挂载配置文件

....
   spec:
      containers:
      - image: nginx:1.15.1
        name: nginx-mount
        volumeMounts:
          - name: zw-volume  # 与下面volumes中的名称一致,如果有多个,就是要使用的那个volume的名字
            mountPath: /etc/config  # 挂载到pod中的路径
      volumes:
        - name: zw-volume  # volumes的名称
          configMap:
            name: zwvolume  # 集群中已经创建的ConfigMap的名字
....

如果在configMap中再配置items,则可以给挂载的pod中的配置文件进行重命名操作

...
   spec:
      containers:
      - image: nginx:1.15.1
        name: nginx-mount
        volumeMounts:
          - name: zw-volume  
            mountPath: /etc/config  
      volumes:
        - name: zw-volume 
          configMap:
            name: zwvolume
            items:
              - key: game2.conf # zwvolume中的key值
                path: game2.conf.bak  # 挂载到pod中后,新取的名字
...

修改挂载文件的权限如何做呢?在configMap中配置defaultMode项

...
    spec:
      containers:
        - image: nginx:1.15.1
          name: nginx-mount
          volumeMounts:
            - name: zw-volume  # 与下面volumes中的名称一致,如果有多个,就是要使用的那个volume的名字
              mountPath: /etc/config  # 挂载到pod中的路径
      volumes:
        - name: zw-volume  # volumes的名称
          configMap:
            name: zwvolume  # 集群中已经创建的ConfigMap的名字
            items:
              - key: game2.conf
                path: game2.conf.bak
            defaultMode: 0644  # 设置文件权限为644
...

如果有多个挂载文件,也可以单独给挂载文件设置mode

...
    spec:
      containers:
        - image: nginx:1.15.1
          name: nginx-mount
          volumeMounts:
            - name: zw-volume  # 与下面volumes中的名称一致,如果有多个,就是要使用的那个volume的名字
              mountPath: /etc/config  # 挂载到pod中的路径
      volumes:
        - name: zw-volume  # volumes的名称
          configMap:
            name: zwvolume  # 集群中已经创建的ConfigMap的名字
            items:
              - key: game2.conf
                path: game2.conf.bak
              - key: game2.conf
                path: game2.conf.bak2
                mode:  0755  # 也可以给key单独配置权限,这个权限优先于defaultMode的配置
            defaultMode: 0644  # 设置文件权限为644
...

标签:ConfigMap,name,conf,configmap,配置管理,nginx,Secret,key,volumes
来源: https://www.cnblogs.com/creamk87/p/14849726.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有