Kubernetes/Helm:在 Init 和 Main 容器之间共享一个非属性文件

Kubernetes/Helm: sharing a single not properties file between Init and Main containers

在 kubernetes (minikube) / helm env 中,我有一个 ldif 文件,我想在 Init 容器和普通容器之间的卷上共享。我不想共享存储此文件的整个文件夹。

不幸的是,根据我的理解,这是不可能的,除非文件是属性文件(语法 "key=value")。

我使用 configMap/subPath 进行了测试,似乎如果不遵守 key/value 语法,Init 容器甚至不会启动,否则一切正常,文件也会出现在主容器中。

所以我想知道是否有可能完成这种分享。

BR

编辑:主容器启动命令是单服务启动,它不能复制或移动init容器共享的文件,除非它是唯一的方法。

要在 init 容器和其他容器之间共享文件,您可以使用带 emptyDir 的卷挂载

  volumes:
  - name: cache-volume
    emptyDir: {}

init容器要共享的文件可以由容器进程复制到emptyDir的mountPath上,然后主容器从emptyDir卷的mouthPath中获取。

即使在 pod 重新启动后,有问题的文件,比如路径 /path1/file 也会被复制到 /path2/file(initcontainer 上的 emptyDir 的 mouthPath),然后在挂载 emptyDir 时保留在那里到主容器可用,直到 pod 重新启动

是的,这是可能的,而且您的方向是正确的。

这是一个如何执行此操作的示例。

---
kind: ConfigMap 
apiVersion: v1 
metadata:
  name: example-configmap 
data:
  my-file.ldif: |
     dn: cn=The Postmaster,dc=example,dc=com
     objectClass: organizationalRole
     cn: The Postmastermongodb
---
kind: Pod
apiVersion: v1
metadata:
  name: example-pod
spec:
  volumes: 
  - name: config-volume
    configMap:
      name: example-configmap
  initContainers:
  - name: init
    image: busybox
    volumeMounts:
    - name: config-volume
      mountPath: /path/in/the/init-container/my-file.ldif
      subPath: my-file.ldif
  containers:
  - name: main
    image: busybox
    volumeMounts:
    - name: config-volume
      mountPath: /path/in/the/container/my-file.ldif
      subPath: my-file.ldif

如果您发布您的配置图,将会有所帮助。您可能会被绊倒,因为要使其正常工作,您需要将文件的全部内容作为 configmap 中一个键的值。