Kubernetes将映像数据复制到卷装载

Kubernetes将映像数据复制到卷装载,kubernetes,Kubernetes,我需要在两个容器之间共享一个目录:myapp和monitoring,为了实现这一点,我在两个容器上创建了一个emptyDir:{}和volumeMount spec: volumes: - name: shared-data emptyDir: {} containers: - name: myapp volumeMounts: - name: shared-data

我需要在两个容器之间共享一个目录:myapp和monitoring,为了实现这一点,我在两个容器上创建了一个emptyDir:{}和volumeMount

spec:
      volumes:
        - name:  shared-data
          emptyDir: {}
      containers:
      - name: myapp
        volumeMounts:
          - name:  shared-data
            mountPath:  /etc/myapp/
      - name: monitoring
        volumeMounts:
          - name: shared-data
            mountPath: /var/read 
这很好,因为我写入共享数据目录的数据在两个容器中都是可见的。但是,在/etc/myapp/myapp.config下创建容器时创建的配置文件将隐藏,因为共享数据卷装载在/etc/myapp路径上(重叠)

如何强制容器首先将卷装载到/etc/myapp路径,然后使docker映像将myapp.config文件放置在默认路径/etc/myapp下,除非它是装载的卷,从而允许监控容器在/var/read下访问配置文件

摘要:让监控容器读取myapp容器上的/etc/myapp/myapp.config文件


是否有人可以提供建议?

是否可以将共享数据装载在init容器中的/var/read处,并将配置文件从/etc/myapp/myapp.config复制到/var/read?

考虑与一起使用

ConfigMap是用于在中存储非机密数据的API对象 键值对。POD可以使用ConfigMaps作为环境变量, 命令行参数,或作为卷中的配置文件

有时,共享一个卷以便在一个环境中多次使用是很有用的 单荚。
volumeMounts.subPath属性指定一个子路径
在引用的卷中,而不是在其根中

ConfigMaps可以用作卷。
模板.spec中的
volumeMounts
与任何其他卷相同。但是,卷部分是不同的。您不必指定
persistentVolumeClaim
或其他卷类型,而是按名称引用configMap。然后可以添加
子路径
属性,该属性如下所示:

volumeMounts:
  - name:  shared-data
    mountPath:  /etc/myapp/
    subPath: myapp.config
以下是将向您展示如何设置它的资源:

  • :官方文件

  • :循序渐进指南

  • :副刊


容器本身必须以某种形式运行
cp
,可以在自己的入口点中运行,也可以在init容器中运行。Kubernetes从不单独将文件复制到卷中(这与Docker的行为不同)。。。/etc/myapp下有默认配置文件(由图像写入)和新配置文件(myapp容器正在运行)的数据应可供监控容器拾取。@BuggyB您是否设法使其工作?否,我现在放弃了上述内容。我将二进制文件(用于度量报废)直接嵌入到主myapp容器中,该容器可以直接从/etc/myapp/*读取,而不是使用需要上述功能的工具。这不是一个好的解决方案,因为当我扩展myapp时,监控也会扩展,但对于我的场景,我不会扩展-单容器myapp.1。将共享数据卷装载到/var/read-是2。但如何将myapp容器上的/etc/myapp/myapp.config复制到监视容器上的/var/read?