在Kubernetes中的路径中使用变量
我有一个带有两个容器的简单状态集。我只想通过emptyDir卷共享路径:在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
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)
我不知道这件事。我在这里考试,成绩很好。回答得好。