【问题标题】:How to copy files to container in kubernetes yaml如何在 kubernetes yaml 中将文件复制到容器中
【发布时间】:2020-06-20 06:15:30
【问题描述】:

我了解可以使用以下命令将文件/文件夹复制到容器中:

kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir

但是,我希望在 yaml 文件中执行此操作

我该怎么做呢? (假设我正在使用容器的部署)

【问题讨论】:

  • 它们是什么类型的文件?如果您不能使用 ConfigMap,那么您需要将它们添加到您正在部署的映像中,或者将它们安排在您可以挂载的卷中。
  • 这样做的目的是将文件复制到 /usr/share/nginx/html 供 nginx web 服务器使用,所以 html、css 和 javascript 文件。我最初不赞成将文件复制到映像本身,因为在我的 git repo 中,www 文件位于父目录中(而且我不相信您可以使用 Dockerfile 中的 COPY 从父目录复制文件)。这也会使持续交付变得复杂,因为我必须在部署到 k8s 集群之前手动重建每个 dockerfile。

标签: docker kubernetes containers kubectl kubernetes-deployment


【解决方案1】:

你要走的路是错误的方向。 Kubernetes 通过多种方式做到这一点。

首先,考虑一下 configmap

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap

您可以轻松定义在容器中运行的应用程序的配置文件

如果您知道工作节点上存在文件或文件夹,您可以使用hostPath 将其挂载到 k8s yaml 中指定nodeName: node01 的容器中。

https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

如果文件或文件夹是临时生成的,可以使用emptyDir

https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

【讨论】:

    【解决方案2】:

    您不能,从您的工作站映射本地文件不是 Kubernetes 的功能。

    【讨论】:

    • 这看起来很奇怪,因为 pod 没有自己的文件系统,所有容器都可以访问吗?没有创建将静态文件复制到文件系统的功能似乎很奇怪......
    • Kubernetes 是为高度自动化而构建的,而不是手动工作站的东西。您必须执行一些操作,例如将文件放入 initContainer 或使用您的 PVC 提供商提供的任何预填充系统(如果有)。
    • hostPath 是一个东西。
    • hostPath 映射来自底层主机的文件,而不是来自您的工作站。
    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2023-03-11
    • 2023-04-09
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多