k8s---ConfiMap

ConfigMap
ConfigMap概述

供容器使用的典型用法

  • 生成容器内的环境变量。
  • 设置容器启动命令的启动参数(需设置为环境变量)。
  • 以Volume的形式挂载为容器内部的文件或目录。
使用ConfigMap的限制条件

使用ConfigMap的限制条件

  • ConfigMap必须在Pod之前创建,Pod才能引用它
  • 如果Pod使用envFrom基于ConfigMap定义环境变量,则无效的环境变量名称(例如名称以数字开头)将被忽略,并在事件中被记录为InvalidVariableNames
  • ConfigMap受命名空间限制,只有处于相同命名空间中的Pod才可以引用它
  • ConfigMap无法用于静态Pod
创建ConfigMap资源对象

通过YAML文件方式创建

将几个应用所需的变量定义为ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appvars
data:
  apploglevel: info
  appdatadir: /var/data

# 运行kubectl create命令创建该ConfigMap
# kubectl create -f cm-appvars.yaml

# 查看创建好的 ConfigMap
# kubectl get configmap
# kubectl describe configmap cm-appvars
# kubectl get configmap cm-appvars -o yaml

将 两 个 配 置 文 件 server.xml 和logging.properties定义为ConfigMap的用法,设置key为配置文件的别名,value则是配置文件的全部文本内容

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appconfigfiles
data: 
  key-serverxml: | 
    <html>
    <head>
    <meta charset="utf-8">
    <title>是一个html文件</title>
    </head>
    <body>
      <h1>是一个html文件</h1>
      <p>是一个html文件。</p>
    </body>
    </html>
  key-loggingproperties: "key-loggingproperties 是一个文本文件"

# 运行kubectl create命令创建该ConfigMap
# kubectl create -f cm-appconfigfiles.yaml

# 查看创建好的ConfigMap
# kubectl get configmap cm-appconfigfiles
# kubectl describe configmap cm-appconfigfiles

# 查看已创建的ConfigMap的详细内容
# kubectl get configmap cm-appconfigfiles -o yaml

通过kubectl命令行方式创建

  • 通过–from-file参数从文件中进行创建,可以指定key的名称,也可以在一个命令行中创建包含多个key的ConfigMap
    kubectl create configmap NAME --from-file=[key]source --from-file=[key]source

  • 通过–from-file参数在目录下进行创建,该目录下的每个配置文件名都被设置为key,文件的内容被设置为value,
    kubectl create configmap NAME --from-file=config-files-dir

  • 使用–from-literal时会从文本中进行创建,直接将指定的key#=value#创建为ConfigMap的内容
    kubectl create configmap NAME --files-literal=key1=value1 --files-literal=key2=value2

kubectl命令行方式创建示例

  • 创建一个包含 server.xml 文件内容的 ConfigMap,ConfigMap 名称为 cm-server.xml
    kubectl create configmap cm-server.xml --from-file=server.xml
    kubectl describe configmap cm-server.xml

  • 创建包含多个个文件内容的 ConfigMap ,两个文件所在目录为 configfiles ,configmap 名称为 cm-appconf
    kubectl create cofigmap cm-appconf --from-file=configfiles
    kubectl describe cofnigmap cm-appconf

  • 使用 --from-literal 参数进行创建 key-value ,configmap名称为 cm-appenv
    kubectl create configmap cm-appenv --from-literal=loglevel=info --from-literal=appdatadir=/var/data
    kubectl describe configmap cm-appenv

容器应用对ConfigMap的使用的两种方法

  • 通过环境变量获取ConfigMap中的内容
  • 通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录
在Pod中使用ConfigMap

通过环境变量方式使用ConfigMap

创建的 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appvars
data:
  apploglevel: info
  appdatadir: /var/data

# kubectl create -f cm-appvars.yaml

将ConfigMap中的内容以环境变量(APPLOGLEVEL和APPDATADIR)方式设置为容器内部的环境变量,容器的启动命令将显示这两个环境变量的值(“env|grepAPP”)

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cm-test
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c", "env | grep APP"]
    env:
    - name: APPLOGLEVEL    # 定义环境变量的名称
      valueFrom:           # key"applogleve1”对应的值
        configMapKeyRef:
          name: cm-appvars  #环境变量的值取自 cm-appvars:
          key: apploglevel  #key为apploglevel
    - name: APPDATADIR     #定义环境变量的名称
      valueFrom:           # key “appdatadir”对应的值
        configMapKeyRef:
          name: cm-appvars #环境变量的值取自 cm-appvars
          key: appdatadir   # key为appdatadir
  restartPolicy: Never

# 创建
# kubectl create -f cm-test-pod.yaml
# 查看pod
# kubectl get pods 
# kubectl logs cm-test-pod
# 输出
# APPDATADIR=/var/data
# APPLOGLEVEL=info

字段envFrom,实现了在Pod环境中将ConfigMap(也可用于Secret资源对象)中所有定义的key=value自动生成为环境变量

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cm-test
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh", "-c", "env" ]
    envFrom:
    - configMapRef: 
        name: cm-appvars   #根据cm-appvars中的key=value自动生成环境变量
  restartPolicy: Never

# 创建
# kubectl create -f cm-test.yaml
# 查看日志输出
# kubectl logs cm-test-pod

通过volumeMount使用ConfigMap

cm-appconfigfiles.yaml例子中包含两个配置文件的定义:server.xml和logging.properties

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appconfigfiles
data: 
  key-serverxml: | 
    <html>
    <head>
    <meta charset="utf-8">
    <title>是一个html文件</title>
    </head>
    <body>
      <h1>是一个html文件</h1>
      <p>是一个html文件。</p>
    </body>
    </html>
  key-loggingproperties: "key-loggingproperties 是一个文本文件"

# 运行kubectl create命令创建该ConfigMap
# kubectl create -f cm-appconfigfiles.yaml

# 查看创建好的ConfigMap
# kubectl get configmap cm-appconfigfiles
# kubectl describe configmap cm-appconfigfiles

# 查看已创建的ConfigMap的详细内容
# kubectl get configmap cm-appconfigfiles -o yaml

将ConfigMap“cm-appconfigfiles”中的内容以文件的形式挂载到容器内部的/configfiles目录下

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-app
spec:
  containers:
  - name: cm-test-app
    #image: kubeguide/tomcat-app:v1
    image: busybox:latest
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    #ports:
    #- containerPort: 8080
    volumeMounts:
    - name: serverxml                 #引用Volume 的名称
      mountPath: /configfiles         #挂载到容器内的目录
  volumes:
  - name : serverxml                  #定义volume的名称
    configMap:
      name: cm-appconfigfiles         #使用ConfigMap " cm-appconfigfiles”
      items:
      - key: key-serverxml            # key=key-serverxml
        path: server.xml              # value将server. xm1 文件名进行挂载
      - key : key-loggingproperties   # key=key-loggingproperties
        path: logging.properties      # value将logging.properties 文件名进行挂载
		
# 创建
# kubectl create -f cm-test-app.yaml
# 查看挂载
# kubectl exec -it cm-test-app -- cat  /configfiles/server.xml
# kubectl exec -it cm-test-app -- cat  /configfiles/logging.properties

在引用ConfigMap时不指定items,则使用volumeMount方式在容器内的目录下为每个item都生成一个文件名为key的文件

apiVersion: v1
kind: Pod
metadata:
  name: cm-test-app
spec:
  containers:
  - name: cm-test-app
    #image: kubeguide/tomcat-app:v1
    image: busybox:latest
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    #ports:
    #- containerPort: 8080
    volumeMounts:
    - name: serverxml                 #引用Volume 的名称
      mountPath: /configfiles         #挂载到容器内的目录
  volumes:
  - name : serverxml                  #定义volume的名称
    configMap:
      name: cm-appconfigfiles         #使用ConfigMap " cm-appconfigfiles”

		
# 创建
# kubectl create -f cm-test-app.yaml
# 查看挂载
# kubectl exec -it cm-test-app -- ls  /configfiles/
# kubectl exec -it cm-test-app -- cat  /configfiles/key-serverxml
# kubectl exec -it cm-test-app -- cat  /configfiles/key-loggingproperties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值