zoukankan      html  css  js  c++  java
  • K8S ConfigMap使用

    k8s系列文章:

    configmap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:

    1. 使用k8s部署应用,当你将应用配置写进代码中,就会存在一个问题,更新配置时也需要打包镜像,configmap可以将配置信息和docker镜像解耦。
    2. 使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。

    其次,configmap可以用来保存单个属性,也可以用来保存配置文件。

    创建

    你可以通过命令kubectl create configmap -h帮助信息查看具体的创建。

    configmap有三种常见创建方式:

    **1. 通过yaml / json文件创建(推荐) **

    这种是我比较推荐的方式,创建configmap.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata: 
      name: test-conf
      namespace: test
    data:
      test-conf: |+
        SESSION_LIFETIME: 3600
        URL: "http://test-server:8080"
    

    执行命令:

    kubectl create -f configmap.yaml

    若报错:"namespace 'test' not found",则需要先创建namespace:

    kubectl create namespace test

    2. 通过--from-file

    分别指定单个文件和目录,指定目录可以创建一个包含该目录中所有文件的configmap:

    kubectl create configmap *** --from-file=/path

    将--from-file指定为单个文件就可以从单个文件中创建:

    kubectl create configmap *** --from-file=file1

    其中,--from-file可以使用多次,比如:

    kubectl create configmap *** --from-file=file1 --from-file=file2

    3. . 通过key-value字符串创建

    kubectl create configmap *** --from-literal=config1=123 --from-literal=config2=234

    4. 通过env文件创建

    通过环境文件创建:

    kubectl create configmap *** --from-env-file=env.txt

    其中,env.txt的文件格式为:

    config1=***
    config2=***
    

    当使用多个--from-env-file从多个数据源创建configmap时,仅最后一个env文件有效。

    查看

    可以使用以下命令查看创建成功的configmap:

    命令 说明
    kubectl get configmaps 查看所有configmap
    kubectl get configmaps -n namespace1 查看命名空间为namespace1的所有configmap
    kubectl describe configmaps configmap1 查看configmap1的详细信息
    kubectl get configmaps configmap1 -o yaml 以yaml文件形式展示configmap详细信息

    使用

    configmap创建成功之后,如何在pod中使用呢?有以下几种方法:

    注意

    使用ConfigMap有以下几个限制条件:

    1. ConfigMap必须在pod之前创建
    2. configmap受namespace的限制,只能相同namespace的pod才可以引用

    env

    通过环境变量获取ConfigMap中的内容。

    首先创建configmap:

    kubectl create configmap test-config --from-literal=env_model=prd -n test
    

    接下来用作环境变量,创建pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
      namespace: test
    spec:
      containers:
        - name: test-container
          image: test:v0.1
          env:
            - name: TEST-CONF
              valueFrom:
                configMapKeyRef:
                  name: test-config
                  key: env_model
    

    执行命令创建Pod:

    kubectl create -f pod.yaml

    创建成功之后,执行命令查看pod的详细信息,可以看到已经将configmap中的配置添加到环境变量:

    kubectl describe pod test-pod -n test

    同时,也支持多个configmap共同创建环境变量。

    volume

    通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录,这是我平时用的较多的方式。

    接下来使用最开始创建的test-conf为例说明,将configmap挂载到特定目录,并保存为指定文件:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
      namespace: test
    spec:
      containers:
        - name: test-container
          image: test:v0.1
          volumeMounts:
          - name: test-volume
            mountpath: /app/config
      volumes:
        - name: test-volume
        configMap:
          name:test-conf
          items:
          - key: test-conf
            path: config.yaml      
    

    以上。

  • 相关阅读:
    你敢说自己了解单例模式?
    关于线程池,那些你还不知道的事
    Dubbo透传traceId/logid的一种思路
    当BeanUtils遇到泛型
    Oval框架如何校验枚举类型的一种思路
    HttpClient(4.5.x)正确的使用姿势
    HttpClient官方sample代码的深入分析(连接池)
    Jaxb如何优雅的处理CData
    JAXB性能优化
    Jaxb对xml报文头的小修小改
  • 原文地址:https://www.cnblogs.com/ybjourney/p/12363751.html
Copyright © 2011-2022 走看看