Docker 如何为Kubernetes创建本地开发环境?
似乎都是关于将容器部署到集群云中。它似乎没有涉及到开发和登台环境(或诸如此类的环境) 在开发过程中,您希望通过一些重要的更改尽可能接近生产环境:Docker 如何为Kubernetes创建本地开发环境?,docker,google-cloud-platform,kubernetes,openshift-origin,Docker,Google Cloud Platform,Kubernetes,Openshift Origin,似乎都是关于将容器部署到集群云中。它似乎没有涉及到开发和登台环境(或诸如此类的环境) 在开发过程中,您希望通过一些重要的更改尽可能接近生产环境: 在本地部署(或至少在您且只有您可以访问的地方部署) 在页面刷新时使用最新的源代码(假设它是一个网站;理想情况下,在本地文件保存时使用页面自动刷新,这可以通过装载源代码和使用类似的东西来完成) 类似地,人们可能希望非公共环境进行持续集成 Kubernetes是否支持此类开发环境,还是必须构建这样的环境,希望在生产过程中仍能正常工作?更新(2016-0
- 在本地部署(或至少在您且只有您可以访问的地方部署)
- 在页面刷新时使用最新的源代码(假设它是一个网站;理想情况下,在本地文件保存时使用页面自动刷新,这可以通过装载源代码和使用类似的东西来完成)
你可以跑。一旦有一个节点运行,您就可以启动一个pod,它有一个简单的web服务器,并从主机装载一个卷。当您点击web服务器时,它将从卷中读取,如果您更改了本地磁盘上的文件,它可以提供最新版本 这种“热装”是我们计划增加的,但并不像今天那么容易。但是,如果您喜欢冒险,您可以将rsync与docker exec、kubectl exec或osc exec(所有这些操作大致相同)一起使用,以便在本地目录发生更改时将其同步到容器中。您可以将rsync与kubectl或osc exec一起使用,如下所示:
# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder
另一个很好的起点是这一点,特别是如果您的主机操作系统是Windows。明显的优势在于
- 快速无痛的安装
- 易于销毁/重新创建机器
- 对资源的隐性限制
- 通过创建多个节点测试水平缩放的能力
mount\u选项:“nolock,vers=3,udp,noac”
也不能完全消除缓存问题,但它在大多数情况下都有效。在主机操作系统上,在容器中运行的某些Gulp任务可能需要5分钟,而在主机操作系统上则需要8秒。一个好的折衷方案似乎是装载选项:“nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15”
至于自动代码重新加载,这是特定于语言的,但我们对Django的用于Python的devserver和用于Node.js的Nodemon感到满意。对于前端项目,您当然可以使用gulp+browserSync+watch这样的工具做很多事情,但是对于许多开发人员来说,从Apache提供服务并只进行传统的硬刷新并不困难
我们为Kubernetes保留了4套yaml文件。Dev,“devstable”,stage,prod。它们之间的区别是
- 显式设置环境的环境变量(dev/stage/prod)
- 副本数
- devstable、stage、prod使用docker映像
- 开发人员使用docker映像,并将NFS文件夹与源代码映射到它们上面
recusers
,它将执行kubectl delete-f;kubectl创建-f…
。如果我想启动整个设置,我键入recfo
,它会重新创建十几个服务,提取最新的docker映像,从Staging env导入最新的db转储文件,并清理旧的docker文件以节省空间。有关如何从主机装载卷的信息,请参见:
docker run -v hostPath:ContainerPath
我们一直在开发一种工具来实现这一点。基本思想是,您有一个远程Kubernetes集群,它实际上是一个登台环境,然后您在本地运行代码,它将被代理到远程集群。您可以获得透明的网络访问、复制的环境变量、对卷的访问。。。尽可能接近远程环境,但代码在本地运行并在您的完全控制下 比如说,你可以进行实时开发。位于的文档有助于设置本地群集。大多数情况下,我在本地机器上使用基于vagrant的集群 您可以调整这些变量以获得所需的kubernetes版本。我刚刚开始 将代码中的更改自动应用于本地集群非常有用
要部署本地群集,最好的方法是Minikube或Docker for Mac和Windows,两者都包括Kubernetes接口。正如Robert之前指定的那样,Minikube是一种方法 是开始使用minikube的快速指南。一般步骤如下:
- 安装minikube
- 创建minikube群集(在虚拟机中,如果是Windows,则可以是VirtualBox或Docker for Mac或HyperV)
- 创建应用程序文件的Docker映像(使用Dockerfile)
- 通过创建展开来运行映像
- 创建一个公开应用程序的服务,以便您可以访问它
- 使用
minkube
的缺点是它会在您的机器上生成另一个虚拟机。此外,对于最新的minikube
版本,您的系统至少需要2个CPU和2GB的RAM,如果您的系统没有足够的资源,这将使系统非常沉重
这就是我切换到microk8s进行开发的原因
snap install microk8s --classic
velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled