我是Kubernetes的新手,所以我想知道将应用程序的源代码放入Kubernetes或类似环境中的容器运行时的最佳做法是什么?
我的应用是PHP,所以我有PHP(fpm)和Nginx容器(从Google容器引擎运行)
起初,我有git卷,但没有办法改变这样的app版本所以我切换到emptyDir并将我的源代码放在一个zip存档中的一个图像中,这些图像会在启动时将其解压缩到此卷中现在我通过带有单独的git目录的git在两个图像中分离了源代码,所以我有/ app和/ app-git。
这很好,因为我不需要共享或配置卷(更少的资源和配置),应用程序的图层在两个图像中都被重用,因此对空间没有影响,因为它是git"基"内置,所以我可以在最后调整我的dockerfile命令,并轻松切换到不同的分支或标记。
我想通过在构建过程中提供凭据作为参数直接从存储库下载包含源代码的存档,但这不起作用,因为我的repo,bitbucket创建了具有附加到目录的最后一个提交ID的存档,所以没有办法o知道归档文件会导致什么解压缩,所以我一直坚持使用git本身。
您处理源代码的方式是什么?
答案 0 :(得分:1)
理想情况下,您可以使用持续交付模式,这意味着使用Travis CI,Bitbucket管道或Jenkins来构建代码更改时的图像。
也就是说,每次代码更改时,您的自动构建都会被触发并构建一个新的Docker镜像,其中包含您的源代码。然后,您可以触发部署滚动更新以使用新映像更新Pod。
如果你有动态内容,你可能会把它作为持久存储,它将重新安装在Pod更新上。
答案 1 :(得分:0)
我们传统上使用PHP做的是运行时的覆盖。基本上,容器将安装一个卷,并使用部署密钥到您的git仓库。这将允许您执行git pull操作。
更紧凑的方法是从fpm或您正在使用的任何图像中扩展代码的自定义标记图像。这样你就可以运行YourImage的1.3版,其中YourImage将包含应用程序的代码版本1.3。
答案 2 :(得分:0)
尝试利用持续集成和持续部署。您可以将Jenkins用作CI / CD服务器,并创建一些用于构建图像,推送图像和部署图像的作业。
我建议将源代码放入docker image,而不是git repo。您还可以从docker镜像中提取配置文件。在kubernetes v1.2中,它提供了新功能' ConfigMap',因此我们可以将配置文件放在ConfigMap中。运行pod时,将自动装入配置文件。这非常方便。