ConfigMap数据(YML格式)-Kubernetes

时间:2019-07-02 13:44:30

标签: spring-boot kubernetes configmap spring-cloud-kubernetes

我有一个application.yml(春季)文件,该文件有将近70个字段,希望将这些字段移动到ConfigMap。 在设置ConfigMap的过程中,已经意识到将所有70个字段都弄平了的示例:webservice.endpoint.transferfund 将70个字段全部转换为平坦字段将是一项艰巨的任务,还有其他选择吗?

请提出建议。

以下配置有效:

file1.txt:'a',
file2.txt:'b',
...

以下配置无法正常工作,请以yml格式尝试。

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmapname
  namespace: default
data:
  webservice.endpoint.transferfund: http://www.customer-service.app/api/tf
  webservice.endpoint.getbalance: http://www.customer-service.app/api/balance
  webservice.endpoint.customerinfo: http://www.customer-service.app/api/customerinfo
src / main / resources / application.yml中的

具有用于访问ConfigMap密钥的以下字段:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmapname
  namespace: default
data:
  application.yaml: |-
    webservice:
      endpoint:
        transferfund: http://www.customer-service.app/api/tf
        getbalance: http://www.customer-service.app/api/balance
        customerinfo: http://www.customer-service.app/api/customerinfo 

已更新:

ConfigMap描述:

webservice:
  endpoint:
    transferfund: ${webservice.endpoint.transferfund}
    getbalance: ${webservice.endpoint.getbalance}
    customerinfo: ${webservice.endpoint.customerinfo}

部署脚本:(上面提供的configMapRef名称作为configmap名称)

C:\Users\deskktop>kubectl describe configmap configmapname
Name:         configmapname
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
application.yaml:
----
webservice:
  endpoint:
    transferfund: http://www.customer-service.app/api/tf
    getbalance: http://www.customer-service.app/api/balance
    customerinfo: http://www.customer-service.app/api/customerinfo
Events:  <none>

3 个答案:

答案 0 :(得分:1)

您需要将ConfigMap挂载为Volume。否则,内容将存在于环境变量中。我在此处发布的示例来自https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#add-configmap-data-to-a-volume

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "ls /etc/config/" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        # Provide the name of the ConfigMap containing the files you want
        # to add to the container
        name: special-config
  restartPolicy: Never

答案 1 :(得分:1)

ConfigMap是配置设置的词典。它由字符串的键值对组成。然后Kubernetes将这些值添加到您的容器中。

在您的情况下,您必须将它们弄平,因为Kubernetes无法理解它们。

您可以在有关Creating ConfigMap的文档中阅读以下内容:

  

kubectl create configmap <map-name> <data-source>

     

其中是您要分配给ConfigMap的名称,是从中提取数据的目录,文件或文字值。

     

数据源对应于ConfigMap中的键/值对,其中

     
      
  • key =您在命令行上提供的文件名或密钥,并且
  •   
  • value =您在命令行上提供的文件内容或文字值。
  •   
     

您可以使用kubectl describekubectl get来检索有关ConfigMap的信息。

编辑

您可以使用定义好的键从文件创建ConfigMap。

Define the key to use when creating a ConfigMap from a file

语法可能看起来像这样:

kubectl create configmap my_configmap --from-file=<my-key-name>=<path-to-file> ConfigMap可能如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  creationTimestamp: 2019-07-03T18:54:22Z
  name: my_configmap
  namespace: default
  resourceVersion: "530"
  selfLink: /api/v1/namespaces/default/configmaps/my_configmap
  uid: 05f8da22-d671-11e5-8cd0-68f728db1985
data:
  <my-key-name>: |
    key=value
    key=value
    key=value
    key=value

我还能够找到Create Kubernetes ConfigMaps from configuration files

  

功能

     

投影机可以:

     
      
  • 获取原始文件并将其填充到ConfigMap中
  •   
  • 配置文件中的Glob文件,并将它们全部塞入配置图
  •   
  • 从结构化数据(yaml / json)中提取字段
  •   
  • 通过提取某些字段并删除其他字段,从yaml / json源的子集创建新的结构化输出
  •   
  • 在JSON和YAML之间来回转换(将YAML源转换为JSON输出,等等)
  •   
  • 支持从源中提取复杂字段,例如对象+数组,而不仅仅是标量!
  •   

答案 2 :(得分:0)

您提到,您在Spring项目的上下文中使用application.yaml。因此,如果您不在乎是否使用.yaml或.property配置文件,则可以只使用属性文件,因为configMap生成支持它们。它可以与--from-env-file标志一起使用:

kubectl create configmap configmapname --from-env-file application.properties

因此,在您的部署文件中,您可以直接访问密钥:

...
env:
  - KEYNAME
    valueFrom:
       configMapKeyRef:
          name: configmapname
          key: KeyInPropertiesFile