1

我在配置目录中定义了应用程序属性文件。配置目录位于以下结构中。

config
  application.properties
  application-test.properties
  application-dev.properties
  application-prod.properties

我已经定义了 configmap 如下

{{ range $path, $bytes := .Files.Glob "config/*" }}
  {{ base $path }}: '{{- $.Files.Get $path | nindent 2 | upper | replace "." "_" }}'
  {{- end }}

我们正在使用 envFrom 属性通过正在运行的容器中的环境变量来使用 ConfigMap。(这在我的部署 yaml 文件中)

spec:
   containers:
   - envFrom:
     - configMapRef:
         name: nginx-configmap

运行后helm install,我看到生成了 configmap。

kubectl describe cm sample-configmap
Data
====
----
 SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE 
----

在 configmap 中,内容不会生成为单个字符串而不是键/值对。

甚至,在容器内部,值也不会存储为键/值对。它们存储为字符串。

kubectl exec -it <pod> sh
/data # env | grep application.properties
application.properties= SERVER_PORT = 8080 SERVER_NAME = LOCALHOST SERVER_GREETING = GREETING-SERVICE SAMPLE_GROUPA_PARAM1 = VALUE1BASE SAMPLE_GROUPA_PARAM2 = VALUE2BASE SAMPLE_HIGHERPARAM = VALUEHIGHERBASE
/data # echo $application.properties
.properties
/data # echo $SERVER_PORT

我也试过

data:
  {{- (.Files.Glob "config/*").AsConfig | nindent 2 | upper | replace "." "_" }}

观察同样的问题。

是否可以在容器内的 env 中将 application.properties 的内容作为键/值对公开?

4

1 回答 1

1

问题在于您读取文件和 configmap 配置的方式。假设您的config文件夹中的文件如下所示(请注意,整数应包含在带引号的字符串中):

配置文件

SERVER_PORT = "8080" 
SERVER_NAME = LOCALHOST 
SERVER_GREETING = GREETING-SERVICE 
SAMPLE_GROUPA_PARAM1 = VALUE1BASE 
SAMPLE_GROUPA_PARAM2 = VALUE2BASE 
SAMPLE_HIGHERPARAM = VALUEHIGHERBASE

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
data:
{{ range $path, $bytes := .Files.Glob "config/*" }}
  {{- $.Files.Get $path | indent 2 | upper | replace "." "_" | replace " = " ": " }}
{{- end }}

豆荚.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config

输出:

$ kubectl logs test-pod
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
SAMPLE_GROUPA_PARAM1=VALUE1BASE
SAMPLE_GROUPA_PARAM2=VALUE2BASE
HOSTNAME=test-pod
...
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1
SERVER_GREETING=GREETING-SERVICE
SERVER_PORT=8080
SERVER_NAME=LOCALHOST

请参阅将 ConfigMap 中的所有键值对配置为容器环境变量

于 2019-08-28T09:10:44.957 回答