是否可以从环境变量获取容器主机路径?

时间:2019-08-13 15:52:10

标签: kubernetes kustomize

我正在尝试在kubernetes中设置可配置的主机路径,但是我遇到了问题。我创建了一个配置图,该图具有路径,然后尝试用该配置图值替换占位符。这是我的配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  namespace: app
spec:
  template:
    spec:
      containers:
      - name: php
        env:
        - name: PHP_FOLDER
          valueFrom:
            configMapKeyRef:
              name: local-paths
              key: CODE_PATH
      volumes:
      - name: src-code
        hostPath:
          path: PHP_FOLDER
          type: Directory

我也尝试过

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  namespace: app
spec:
  template:
    spec:
      containers:
      - name: php
        env:
        - name: PHP_FOLDER
          valueFrom:
            configMapKeyRef:
              name: local-paths
              key: CODE_PATH
      volumes:
      - name: src-code
        hostPath:
          path: $(PHP_FOLDER)
          type: Directory 

我遇到错误:Error response from daemon: create $(PHP_FOLDER): "$(PHP_FOLDER)" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute pathMountVolume.SetUp failed for volume "src-code" : hostPath type check failed: PHP_FOLDER is not a directory

3 个答案:

答案 0 :(得分:1)

您只是不能直接在yaml文件中使用环境值。您所做的实际上实际上更糟。 ConfigMap或密钥在运行时中创建,这意味着它们将在容器开始运行之前不可用。但是,yaml解析是在pod或部署甚至创建之前进行的。我认为您应该更多地实践时间表,直到在生产甚至测试中使用kubernetes为止。

在这种情况下,最佳实践是在部署和自动化之前使用bash脚本更改yaml文件。

答案 1 :(得分:0)

您不能将变量用于路径定义。

答案 2 :(得分:0)

正如其他用户正确指出的那样,您不能在纯yaml / kubectl中使用env变量。我建议您在部署命令之前添加精益层并使用例如envsubst或ansible