0

我正在尝试在 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 path要么MountVolume.SetUp failed for volume "src-code" : hostPath type check failed: PHP_FOLDER is not a directory

4

3 回答 3

1

您不能直接在 yaml 文件中使用环境值。你所做的实际上更糟糕。ConfigMap 或机密是在运行时创建的,这意味着它们在容器开始运行之前不可用。然而,yaml 解析发生在 pod 或部署甚至创建之前。我认为你应该更多地练习时间线,直到你在生产甚至测试中使用 Kubernetes。

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

于 2019-08-13T17:27:49.493 回答
0

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

于 2019-08-13T16:54:41.130 回答
0

正如其他用户正确指出的那样,您不能在普通的 yaml/kubectl 中使用环境变量。我建议您在部署命令之前添加一个精简层,并使用例如 envsubst 或 ansible 模板化清单

于 2019-08-13T20:04:00.513 回答