【问题标题】:How to mount volume into the source code of the app?如何将卷挂载到应用程序的源代码中?
【发布时间】:2017-04-26 06:28:50
【问题描述】:

我有 kubernetes pod,我将我的应用程序源代码安装为 git 卷。我尝试了各种设置来将源代码放入 pod 中,最后我得到了 git volume。

但现在我遇到了数据问题。我的应用程序中有一个文件目录(空),我需要在其中安装一个卷(保险丝)。但由于目的地位于 git 卷上,我不能这样做。所以我想知道我应该如何重新设计我的应用程序?

我应该将应用程序的源代码直接构建到映像中,以便我可以将数据卷挂载到其中,还是有什么方法可以将卷挂载到另一个卷中,这样我就不必进行任何调整?

我无法将目标目录移动到其他位置,因为它必须可由应用程序在其目录中以及从 Web 访问。

【问题讨论】:

    标签: docker kubernetes google-kubernetes-engine


    【解决方案1】:

    我通常做的是在构建镜像时将源添加到 docker 镜像中。这是一个直截了当的过程,您始终可以将映像视为部署的黑匣子。这实现了有效地将映像的准备和在运行时部署/更新作为两个不同的过程解耦。

    我相信这就是为什么 kubernetes 通过交换完整的镜像而不是尝试修复容器的内容来轻松执行滚动升级以推出新软件版本的原因。就像使用以下命令一样简单:

    kubectl set image deployment/my-nginx-deployment my-nginx-image=TagXX

    替换图像还可以确保清除所有碎片(例如不断增长的日志、临时文件等),并且它允许您进行更多更改,而不仅仅是更改源(例如升级服务器软件版本)。

    它还允许您基于确切的图像执行测试/暂存,而不仅仅是在可能与生产服务器不同的服务器上部署代码。

    您可以在this pageUpdating a Deployment 下阅读它。

    【讨论】:

    • 问题是,如果您需要多个容器中的源代码(例如 nginx 和 php),那么您总是必须重建两个镜像并跟踪它们中源代码的正确版本而使用 gitRepo,您​​只需将版本保留在部署中,您根本不必重建映像。
    • 如果我有一个php的应用程序,我通常将nginx和php部署在同一个容器中,所以代码只部署一次。而且我相信交换我的答案中列出的整个容器的好处超过了不将代码加载到两个单独的容器中可能获得的任何便利。下面是一个如何使用 nginx 和 php 创建容器的示例:github.com/ngineered/nginx-php-fpm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多