另一个很好的起点是这个Vagrant 设置,尤其是。如果您的主机操作系统是 Windows。明显的优势是
- 快速无痛的设置
- 易于破坏/重建机器
- 对资源的隐含限制
- 通过创建多个节点来测试水平缩放的能力
缺点 - 你需要大量的内存,而 VirtualBox 就是 VirtualBox ......无论好坏。
一个混合的优点/缺点是通过 NFS 映射文件。在我们的设置中,我们创建了两组 RC 定义 - 一组只是下载我们的应用程序服务器的 docker 映像;另一个有 7 个额外的行,用于设置从 HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes pod 的文件映射;覆盖 Docker 镜像中的源代码。
这样做的缺点是 NFS 文件缓存 - 有了它,它会出现问题,没有它,它会很慢。即使设置mount_options: 'nolock,vers=3,udp,noac'
也不能完全摆脱缓存问题,但它在大多数情况下都有效。一些在容器中运行的 Gulp 任务可能需要 5 分钟,而在主机操作系统上需要 8 秒。一个很好的妥协似乎是mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'
。
至于自动代码重新加载,这是特定于语言的,但我们对 Django 的 Python 开发服务器和 Node.js 的 Nodemon 感到满意。对于前端项目,你当然可以使用 gulp+browserSync+watch 之类的东西来做很多事情,但是对于许多开发人员来说,从 Apache 提供服务并进行传统的硬刷新并不难。
我们为 Kubernetes 保留了 4 组 yaml 文件。开发,“devstable”,舞台,产品。它们之间的区别是
- env 变量显式设置环境(dev/stage/prod)
- 副本数
- devstable、stage、prod 使用 docker 镜像
- dev 使用 docker 镜像,并将 NFS 文件夹与源代码映射到它们之上。
rec users
创建大量 bash 别名和自动完成功能非常有用——我只需键入即可kubectl delete -f ... ; kubectl create -f ...
。如果我想启动整个设置,我输入recfo
,它会重新创建十几个服务,拉取最新的 docker 映像,从 Staging env 导入最新的 db 转储并清理旧的 Docker 文件以节省空间。