【问题标题】:Using a variable within a path in Kubernetes在 Kubernetes 的路径中使用变量
【发布时间】:2021-02-11 00:30:21
【问题描述】:

我有一个带有两个容器的简单 StatefulSet。我只想通过 emptyDir 卷共享路径:

volumes:
 - name: shared-folder
 emptyDir: {}

第一个容器是busybox:

  - image: busybox
    name: test
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /cache
      name: shared-folder

第二个容器在 /cache/ 上创建一个文件。我想在 emptyDir 卷中挂载两个路径,以便能够在容器之间共享文件。

  volumeMounts:
    - name: shared-folder
      mountPath: /cache/$(HOSTNAME)

问题。第二个容器没有解析 /cache/$(HOSTNAME),所以它不是挂载 /cache/pod-0,而是挂载 /cache/$(HOSTNAME)。我也尝试过获取 POD_NAME 并将其设置为 env 变量,但它也没有解决它。

有人知道是否可以在 mountPath 属性中使用这样的路径(带有环境变量)?

【问题讨论】:

    标签: kubernetes kubernetes-statefulset


    【解决方案1】:

    要将 mountpath 与 env 变量一起使用,您可以使用 subPath with expanded environment variables (k8s v1.17+)。

    在您的情况下,它如下所示:

    containers:
    - env:
      - name: MY_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
      volumeMounts:
      - mountPath: /cache
        name: shared-folder
        subPathExpr: $(MY_POD_NAME)
    

    【讨论】:

    • 我不知道这个。我在这里进行了测试并且工作得很好。很好的答案。
    【解决方案2】:

    我在这里进行了测试,仅将 Kubernetes (k8s

    您可以使用 Helm 在 values.yaml 文件中使用相同的值定义您的 mounthPath 和 statefulset,然后获取相同的值并将其设置为 mounthPath 字段和 statefulset 名称的值。你可以看看这个here

    编辑: 如果您使用的是 k8s 1.17 或更高版本,请遵循 Matt 的回答。

    【讨论】:

      【解决方案3】:

      问题在于 YAML 配置文件完全按照它们的编写方式发布到 Kubernetes。这意味着您需要创建一个模板化的 YAML 文件,您可以在其中将引用的 ti 环境变量替换为绑定到环境变量的值。

      由于这是 Kubernetes 的一个已知“怪癖”,因此已经存在规避此问题的工具。 Helm 是使用起来非常愉快的工具之一

      【讨论】:

        猜你喜欢
        • 2021-03-13
        • 1970-01-01
        • 2022-01-02
        • 2020-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多