【问题标题】:What is the best practice to use kubernetes for local development?使用 Kubernetes 进行本地开发的最佳实践是什么?
【发布时间】:2018-10-21 23:30:49
【问题描述】:

我正在使用 docker 容器,并为本地开发和生产环境提供 docker-compose 文件。我想为我的新应用特别是 Google Kubernetes Engine 试用 Google Cloud Platform。我的工具是 Docker for Mac 和本地机器上的 Kubernetes。

对于开发人员来说,能够更改代码并实时查看本地开发的更改非常重要。

用例:

  1. 后端开发人员对基本的 Flask API(或您使用的任何东西)进行更改,应该会立即看到重新加载的应用程序的更改。

  2. 前端开发人员对 HTML 布局进行更改,应该会立即在网页上看到更改。

目前我正在使用 docker-compose 文件将源代码挂载到本地容器。但是Kubernetes不支持相对路径挂载源码。

理想情况下我应该能够设置变量

Deployment.spec.templates.spec.containers.volumes.hostPath

作为我的仓库的相对路径。例如,在我们的团队中,开发人员将 repo 克隆到此文件夹:

/User/BACKEND_developer/code/project_repo

/User/FRONTEND_developer/code/project_repo

显然,您无法在对源代码进行微小更改后提交和构建映像。

那么,使用 Kubernetes 进行本地开发的最佳实践是什么?我需要一些额外的工具来为每个开发者修改 .yaml 文件吗?

【问题讨论】:

  • 你检查过Skaffold吗?
  • Helm 允许您指定将被注入到 yaml 中的值覆盖。我们有一个 gitignored 的“values.local.yaml”文件,其中包含每个开发人员的主机路径

标签: docker kubernetes google-cloud-platform


【解决方案1】:

@tgogos 是对的。 实现目标的最佳方式是使用Skaffold

它会在看到源代码发生变化时重建容器。

Skaffold 具有可插拔的架构,可让您在开发人员工作流程中选择最适合您的工具:

【讨论】:

    【解决方案2】:

    动态语言的一个非常有前途的方法是Skaffold 最近引入的混合方法,它允许利用通常的自动重新加载机制。您可以定义两组文件:

    • 在第一组更改文件会触发完整的重建+推送+部署机制。
    • 在第二组上更改文件只会在本地计算机和容器之间同步文件。

    这种混合方法非常适合大量技术堆栈,例如 Node.js、React、Angular、Python,您可以在其中使用本机热重载机制来更改源代码,并且只触发完全重建需要时(例如,添加依赖项)。这有助于保持低延迟。

    我最近在 All Day Devops 上的 talk 中谈到了这一点。 Here 有一个基于 Node.JS 的示例。

    【讨论】:

    • 马蒂诺,感谢您的回答。当您谈到 skaffold 的单独触发器集时,能否请您指出您谈话中的时间码?视频时长 4.3 小时,寿命很短 :) 我目前正在使用 Skaffold,但我必须在每次更改时重建图像。依赖不是问题,如果我将 requirements.txt(py)/package.json(JS) 文件放在 Dockerfile 的第一行,它们不会每次都安装。但是 webpack 打包需要一些宝贵的时间。将 React Hot Reload 与 Skaffold 一起使用会很棒。谢谢。
    • @ZhorzhAlexandr 视频长达 4 小时,但我的演讲只有 30 分钟 :) 看看 1:20:52
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多