在Kubernetes中的路径中使用变量

在Kubernetes中的路径中使用变量,kubernetes,kubernetes-statefulset,Kubernetes,Kubernetes Statefulset,我有一个带有两个容器的简单状态集。我只想通过emptyDir卷共享路径: volumes: - name: shared-folder emptyDir: {} 第一个容器是busybox: - image: busybox name: test command: - sleep - "3600" volumeMounts: - mountPath: /cache name: shared-fold

我有一个带有两个容器的简单状态集。我只想通过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/$(主机名),因此它没有装载/cache/pod-0,而是装载/cache/$(主机名)。我还尝试将POD_名称和设置作为env变量,但它也无法解析它


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

我在这里测试过,仅使用Kubernetes(k8s<1.16)和env变量是不可能实现您想要的,基本上,这个变量只有在pod部署之后才可以访问,并且您在它发生之前引用它

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

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

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


由于这是Kubernetes的一个众所周知的“怪癖”,因此已经存在一些工具来规避这个问题。Helm是一种非常易于使用的工具

使用mountpath和您可以使用的env变量(k8s v1.17+)

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

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

我不知道这件事。我在这里考试,成绩很好。回答得好。