ICode9

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

k8s基础概念之十一 configmap

2021-12-16 18:36:39  阅读:215  来源: 互联网

标签:configmap name 十一 -- test pod k8s config


configmap

configmap用法:
1.生成容器内的变量环境,
2.设置容器启动命令的启动参数(需要设置环境变量)
3.以volumes的方式挂载为容器内部的文件或目录
    在使用configmap时,需要先创建configmap,然后再在其他对象中引用

 

configmap的两种创建方法:

 kubectl create configmap <map-name> --from-file={文件|文件夹}
 #命令行
 ---
#yaml
 apiVersion: v1
kind: ConfigMap
metadata:
  nginx
data:
  MYSQL_ROOT_PASSWORD: '123456' 
  #定义一个变量,值类型为字符串,所以需要加引号
  my.cnf: |
    [mysqld]
    pid-file                        = /var/run/mysqld/mysqld.pid
    socket                          = /var/run/mysqld/mysqld.sock
    datadir                         = /var/lib/mysql
    character-set-server            = utf8
    log-error                       = /var/log/mysqld.log
    # 中继日志
    relay-log=mysql-relay-bin
    replicate-wild-ignore-table=mysql.%
    replicate-wild-ignore-table=test.%
    replicate-wild-ignore-table=information_schema.%
    
#文件名为 my.cnf 需要换行的话冒号后面需要加 |

 

指定目录创建

#如在/tmp/configmap 有如下文件:
# ll /tmp/configmap/

-rw-r--r-- 1 root root 157 Jun 15 17:19 game.properties
-rw-r--r-- 1 root root  83 Jun 15 17:26 ui.properties

# cat game.properties 
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

# cat ui.properties 
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice


#创建cofigmap:
kubectl create configmap game-config --from-file=/tmp/configmap/


#查看
# kubectl describe configmaps game-config
Name:         game-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
Events:  <none>



---
#同理也可以使用指定文件的方式
kubectl create configmap game-spec --from-file=/tmp/configmap/game.properties
  
---
#也可以在命令行指定键值对一个或多个
kubectl create configmap  man-spec --from-literal=name=config.test --from-literal=value=test

 

在pod中指定引用configmap定义环境变量参数

#pod中指定引用configmap环境变量参数
#如果configmap有以下内容(如果已存在,储存是追加储存而不是覆盖储存,也就是说在原有的内容里面追加内容而不是覆盖掉)
# cat config-map.yaml 

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-test
data: 
  apploglevel: info
  appdatadir: /var/data
  
#******分割线**********

#在pod中引用此configmap
   apiVersion: v1
   kind: Pod
   metadata:
     name: configmap-pod
   spec:
     containers:
       - name: test-container
         image: busybox
         command: [ "/bin/sh", "-c", "env|grep TEST" ]   # 获取只包含TEST开头的环境变量名称
         env:
           # Define the environment variable
           - name: TEST-KEY1                             # 容器中的环境变量参数
             valueFrom:                               # 设置环境变量值的源,无法为空                                  
               configMapKeyRef:                       # 选择configmap中的键
                 # The ConfigMap containing the value you want to assign to TEST-KEY1
                 name: config-test                       # 指定已经存在的config名称
                 key: apploglevel                        # 指定此configmap中需要引用的key
           - name: TEST-KEY2
             valueFrom:
               configMapKeyRef:
                 # The ConfigMap containing the value you want to assign to TEST-KEY2
                 name: config-test                       # 这里可以指定不同configmap
                 key: appdatadir
     restartPolicy: Never                                # 执行完启动命令后将退出,不再被系统自动重启
#******分割线******
解释:这个难理解之处在于name、key所指定的是什么?
    name:这里的name就是上一个yaml所创建的configmap的名字
    key:这里的key就是所指定的config里面所储存的值的name,

 

pod中指定引用configmap的所有参数

   apiVersion: v1
   kind: Pod
   metadata:
     name: test-pod
   spec:
     containers:
       - name: test-container
         image: busybox
         command: [ "/bin/sh", "-c", "env" ]
         envFrom:                             
         - configMapRef:                       # 此处不再指定key
             name: config-test                 # 指定configmap
     restartPolicy: Never
---
#和上面有什么不同
velueFrom换成了envFrom,少了key

 

 

通过velumeMount使用configmap

在定义pod时,将configmap以卷的形式挂载到容器目录中,这就相当于容器直接使用这个配置文件了

apiVersion: v1
kind: Pod
metadata:
  name: volume-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "ls -l /etc/config/" ]
      volumeMounts:    #挂载数据卷
      - name: config-volume      #挂载数据卷的名字
        mountPath: /etc/config   #挂载到pod里面的目录
  volumes:
    - name: config-volume      # 定义的这个数据卷的名字
      configMap:               #表示应填充此卷的ConfigMap
        # 提供包含所需文件的ConfigMap的名称
        # 添加到容器中
        name: config-test      #使用configmap的名字
  restartPolicy: Never
##mountPath和subPath的区别,mountPath是覆盖挂载,挂载时候会删除里面的所有内容,而subPath不会
#坑1,如果用的是subpath的话,热更新,是不会同步到subpath里面的
#坑2.如果pod的变量来自于configmap和secret中定义的内容,那么configmap和secret更新后,也不会更新pod中的变量
#解决办法,挂载到其他目录然后在做一个链接过去(ln)

 

不可变的congifmap和secret

immutable: true
#加上此参数,则应用变为不可变类型,适合作为安全来使用
#详情:kubectl explain configmap.immutable

 

标签:configmap,name,十一,--,test,pod,k8s,config
来源: https://www.cnblogs.com/RRecal/p/15699439.html

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

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

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

ICode9版权所有