theboyaply

学,就硬学!

  • Home
  • Archives
  • Java
  • Maven
  • Docker
  • Kubernetes
  • JavaScript
  • ES6
  • Vue
  • 踩坑记录
  • noted

  • 搜索
element ui vue wsimport webservice npm mysql redis node nginx nfs ftp es6 开发工具 vscode 前端 javascript springboot 常见问题 tomcat oracle jenkins maven k8s Linux gitlab docker java

k8s configMap介绍

发表于 2020-03-30 | 分类于 Kubernetes | 0 | 阅读次数 458
  • k8s configMap介绍
  • configMap 四种创建方式
    • 使用目录创建
    • 使用文件创建
    • 使用字面值创建
    • 使用 yaml 创建
  • Pod 中使用 configMap
    • 使用 configMap 注入环境变量
    • 数据卷挂载
  • 查看 configMap 信息

k8s configMap介绍

ConfigMap 功能在 Kuberbetes 1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 json 二进制大对象。

configMap 四种创建方式

使用目录创建

创建一个目录,并在里面创建两个文件:

[root@k8s-master01 ~]# mkdir configmapDir
[root@k8s-master01 ~]# cd configmapDir/
[root@k8s-master01 configmapDir]# pwd
/root/configmapDir

[root@k8s-master01 configmapDir]# vim fileOne.properties

[root@k8s-master01 configmapDir]# cat fileOne.properties 
name=tom
agr=24
gender=man

[root@k8s-master01 configmapDir]# vim fileTwo.properties
[root@k8s-master01 configmapDir]# cat fileTwo.properties 
color=red
number=10

创建 configMap:

[root@k8s-master01 configmapDir]# kubectl create configmap cm-by-directory --from-file=/root/configmapDir
configmap/cm-by-directory created

[root@k8s-master01 configmapDir]# kubectl get cm
NAME              DATA   AGE
cm-by-directory   2      11m

其中 --from-file:指定创建方式以及所在文件所在目录。该目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键就是文件的名字,值就是文件的内容。

使用文件创建

我们使用上面例子中的 fileOne.properties 文件来创建:

[root@k8s-master01 configmapDir]# kubectl create configmap cm-by-file --from-file=/root/configmapDir/fileOne.properties
configmap/cm-by-file created

[root@k8s-master01 configmapDir]# kubectl get cm
NAME              DATA   AGE
cm-by-directory   2      11m
cm-by-file        1      4s

--from-file 可以被使用多次,这个例子中,如果我们将 fileOne.properties 和 fileTwo.properties 都指定了的话,那么效果和指定整个目录一样。

使用字面值创建

和上面两个例子使用的关键字不一样,这里使用 --from-literal 参数传递配置信息,该参数可以使用多次。如:

[root@k8s-master01 configmapDir]# kubectl create configmap cm-by-literal --from-literal=name=tom --from-literal=age=24
configmap/cm-by-literal created

[root@k8s-master01 configmapDir]# kubectl get cm
NAME              DATA   AGE
cm-by-directory   2      16m
cm-by-file        1      5m55s
cm-by-literal     2      4s

使用 yaml 创建

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

保存为 special.yaml,并执行:

kubectl apply -f special.yaml

Pod 中使用 configMap

使用 configMap 注入环境变量

special-config.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

log-level-config.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: log-level-config
  namespace: default
data:
  log_level: INFO

创建上面两个 configMap:

[root@k8s-master01 configmapDir]# kubectl apply -f log-level-config.yaml  
configmap/log-level-config created

[root@k8s-master01 configmapDir]# kubectl apply -f special-config.yaml 
configmap/special-config created

编写 Pod 资源清单(cm-env-pod.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: cm-env-pod
  namespace: default
spec:
  restartPolicy: Never
  containers:
  - name: nginx-container
    image: hub.xixihaha.com/library/mynginx:v1
    command: ['sh', '-c', 'env']
    envFrom:
    - configMapRef:
        name: log-level-config
    env:
    - name: SPECIAL_HOW_STR
      valueFrom:
        configMapKeyRef:
          name: special-config
          key: special.how
    - name: SPECIAL_TYPE_STR
      valueFrom:
        configMapKeyRef:
          name: special-config
          key: special.type

说明,上面共使用了两种方式注入环境变量:

  • command:输出容器的环境变量。

  • spec.envFrom:指定一个 configMap,并使用 configMap 的 key 和 value 作为环境变量的 key 和 value。

  • spec.env:name 为环境变量的 key,valueFrom 指定使用哪个 configMap 以及哪个 key 的值。

创建 Pod 并查看输出的环境变量:

[root@k8s-master01 ~]# kubectl apply -f cm-env-pod.yaml 
pod/cm-env-pod created

[root@k8s-master01 ~]# kubectl get pod 
NAME         READY   STATUS      RESTARTS   AGE
cm-env-pod   0/1     Completed   0          5s

[root@k8s-master01 ~]# kubectl log cm-env-pod
log is DEPRECATED and will be removed in a future version. Use logs instead.
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=cm-env-pod
HOME=/root
PKG_RELEASE=1~buster
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
NGINX_VERSION=1.17.9
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SPECIAL_HOW_STR=very
KUBERNETES_PORT_443_TCP_PORT=443
NJS_VERSION=0.3.9
KUBERNETES_PORT_443_TCP_PROTO=tcp
SPECIAL_TYPE_STR=charm
log_level=INFO
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

数据卷挂载

apiVersion: v1
kind: Pod
metadata:
  name: volume-config-pod
  namespace: default
spec:
  restartPolicy: Never
  containers:
  - name: nginx-container
    image: hub.xixihaha.com/library/mynginx:v1
    command: ['sh', '-c', 'sleep 3600']
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: special-config

说明:

  • spec.volumes.name:定义一个数据卷,名称为 config-volume。
  • spec.volumes.configMap.name:数据卷关联的 configMap 名称,这里使用上面例子中创建的 special-config。
  • spec.containers.volumeMounts.name:数据卷名称。
  • spec.containers.volumeMounts.mountPath:数据卷挂载的容器内路径。

创建 Pod 并进入容器查看挂载的目录内容:

[root@k8s-master01 ~]# kubectl apply -f volume-config-pod.yaml 
pod/volume-config-pod created

[root@k8s-master01 ~]# kubectl get pod
NAME                READY   STATUS      RESTARTS   AGE
volume-config-pod   1/1     Running     0          3s

[root@k8s-master01 ~]# kubectl exec volume-config-pod -it /bin/bash
root@volume-config-pod:/# cd /etc/config
root@volume-config-pod:/etc/config# ls
special.how  special.type
root@volume-config-pod:/etc/config# cat special.how
very
root@volume-config-pod:/etc/config# cat special.type
charm
root@volume-config-pod:/etc/config# 

从结果可以看见,configMap(special-config)中的内容:

data:
  special.how: very
  special.type: charm

在挂载数据卷后,容器内部将 configMap 的 key 作为文件名,value 作为文件内容,创建成一个个的文件。

查看 configMap 信息

查看所有 configMap:

[root@k8s-master01 configmapDir]# kubectl get cm -n default
NAME              DATA   AGE
cm-by-directory   2      4s

查看 configMap 内容:

[root@k8s-master01 configmapDir]# kubectl describe cm cm-by-directory
Name:         cm-by-directory
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
fileOne.properties:
----
name=tom
agr=24
gender=man

fileTwo.properties:
----
color=red
number=10

Events:  <none>

查看 configMap yaml 内容:

[root@k8s-master01 configmapDir]# kubectl get cm cm-by-directory -o yaml
apiVersion: v1
data:
  fileOne.properties: |
    name=tom
    agr=24
    gender=man
  fileTwo.properties: |
    color=red
    number=10
kind: ConfigMap
metadata:
  creationTimestamp: "2020-03-30T03:33:51Z"
  name: cm-by-directory
  namespace: default
  resourceVersion: "204260"
  selfLink: /api/v1/namespaces/default/configmaps/cm-by-directory
  uid: 2ce09007-f6fa-42cc-8f4f-7fc115034b6d

-- end --

# k8s
k8s Ingress介绍
k8s Secret介绍
  • 文章目录
  • 站点概览
theboyaply

theboyaply

好记性不如烂笔头

184 日志
13 分类
27 标签
Github E-mail
Creative Commons
0%
© 2019 — 2023 theboyaply
由 Halo 强力驱动
|
主题 - NexT.Gemini
湘ICP备19009291号

湘公网安备 43312402001034号