我有configMap的示例cm.yml,带有嵌套的json数据。

kind: ConfigMap
metadata:
 name: sample-cm
data:
 spring: |-
  rabbitmq: |-
   host: "sample.com"
  datasource: |-
   url: "jdbc:postgresql:sampleDb"

我必须在以下pod中设置环境变量spring-rabbitmq-host = sample.com和spring-datasource-url = jdbc:postgresql:sampleDb。
kind: Pod
metadata:
 name: pod-sample
spec:
 containers:
  - name: test-container
    image: gcr.io/google_containers/busybox
    command: [ "/bin/sh", "-c", "env" ]
    env:
     - name: sping-rabbitmq-host
       valueFrom:
        configMapKeyRef:
         name: sample-cm
         key: <what should i specify here?>
     - name: spring-datasource-url
       valueFrom:
        configMapKeyRef:
         name: sample-cm
         key: <what should i specify here?>

最佳答案

不幸的是,由于它是作为单个字符串读取的,因此无法将您创建的configmap中的值作为单独的环境变量进行传递。

您可以使用kubectl describe cm sample-cm进行检查

Name:         sample-cm
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","data":{"spring":"rabbitmq: |-\n host: \"sample.com\"\ndatasource: |-\n url: \"jdbc:postgresql:sampleDb\""},"kind":"Con...

Data
====
spring:
----
rabbitmq: |-
 host: "sample.com"
datasource: |-
 url: "jdbc:postgresql:sampleDb"
Events:  <none>

ConfigMap需要键值对,因此您必须对其进行修改以表示单独的值。

最简单的方法是:
apiVersion: v1
kind: ConfigMap
metadata:
 name: sample-cm
data:
   host: "sample.com"
   url: "jdbc:postgresql:sampleDb"

因此值将如下所示:
kubectl describe cm sample-cm
Name:         sample-cm
Namespace:    default
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","data":{"host":"sample.com","url":"jdbc:postgresql:sampleDb"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"s...

Data
====
host:
----
sample.com
url:
----
jdbc:postgresql:sampleDb
Events:  <none>

并将其传递到 pod :
apiVersion: v1
kind: Pod
metadata:
 name: pod
spec:
 containers:
  - name: test-container
    image: gcr.io/google_containers/busybox
    command: [ "/bin/sh", "-c", "env" ]
    env:
    - name: sping-rabbitmq-host
      valueFrom:
        configMapKeyRef:
          name: sample-cm
          key: host
    - name: spring-datasource-url
      valueFrom:
        configMapKeyRef:
          name: sample-cm
          key: url

关于kubernetes - 有什么方法可以在K8s中使用configMaps并将嵌套值用作Pod中的环境变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60258185/

10-16 05:50