美好的一天
我们有一个由6个虚拟机组成的开发环境。目前我们正在使用Vagrant和Ansible与VirtualBox。 您可以想象,托管此环境是一项维护噩梦,特别是随着软件/操作系统版本的变化。没有提到开发人员机器的资源负载。
我们已经开始将一些虚拟机迁移到docker。但这本身就会引起围绕编排,正确配置,沟通等方面的问题。这让我想到了Kubernetes。
有人会非常友好地提供一些推论,说明Kubernetes是否会成为这项工作的正确工具?那就是管理和编排'开发'docker容器。
由于
答案 0 :(得分:2)
这是一个非常复杂的主题,如果将k8s用作本地开发环境是值得考虑的话。特别是当我想让我的本地开发人员环境非常接近于在Kubernetes上运行的生产环境时,我使用它。这有助于避免许多配置错误。
在我看来,Kubernetes(k8s)将为您提供开发环境所需的一切。
它为您提供了很大的灵活性,并且可以进行大量配置。几个例子:
为每个应用程序模块准备k8s复制控制器文件(请记住,它们需要是无状态模块) 在复制控制器中,您可以指定docker镜像以及它。 使用这种方法,您可以将新的docker映像推送到本地docker_registry,然后使用kubectl控制应用程序的生命周期。
例如:
kubectl scale rc your_application_service --replicas=3
这样k8s将检查您为服务运行的pod数量,如果它识别出该数量小于副本值,则它将创建新的以满足副本数量。
这是一个无穷无尽的话题,还有许多其他事情在我脑海中浮现,但我建议你试一试。
有一个https://github.com/kubernetes/kubernetes/blob/master/docs/devel/developer-guides/vagrant.md项目用于在vagrant中运行k8s群集。
当然,您必须记住,如果您有许多服务,则必须将它们全部推送到本地存储库并由k8s运行。这需要一些时间,但如果您使用一些自定义脚本自动化本地部署,您将不会后悔。
答案 1 :(得分:0)
正如之前提到的那样,这是一个非常复杂的话题。但此刻我也是这样做的。所以,让我总结一些事情:
使用Kubernetes(k8s),您将编排SaaS应用程序。在最好的情况下,它是一个云原生应用程序。 Cloud-native应用程序的属性/要求由Cloud Native Computing Foundation(CNCF)制定,它基本上是在k8s之后形成的,之后Google将其捐赠给Linux Foundation。 因此,云原生应用程序的属性/要求是:容器打包,动态管理和面向微服务(cncf.io/about/charter)。如果您的应用程序是基于微服务的,并且每个服务都有一个单独的容器,那么您将主要受益于k8s。
使用基于微服务的应用程序,每项服务都可以独立开发。开发人员只需要遵循12Factor方法(12factor.net)(使用env var而不是硬编码的IP地址等)。
在下一步中,开发人员为服务构建容器并将其推送到容器注册表。对于本地开发环境,您可能还需要在集群内部运行容器注册表,以便开发人员可以在本地推送和测试其代码。
然后,您可以使用端口,端口映射,环境变量,容器映像等定义k8s复制控制器,服务,PetSet等,并在集群内创建并运行它。
k8s文档建议Minikube在本地运行k8s(kubernetes.io/docs/getting-started-guides/minikube/)。使用Minikube,您可以获得DNS,NodePorts,ConfigMaps和Secrets等功能 仪表板。 但我选择了我的开发环境中使用Vagrant Cluster的多节点CoreOS Kubernetes,就像Puja Abbassi在博客“寻找合适的本地Kubernetes开发环境”(https://deis.com/blog/2016/local-kubernetes-development-environment/)中提到的那样,它更贴近我的生产环境(12Factor: 10 - Dev / prod parity)。 通过Vagrant Environment,您可以获得以下功能:
如果你想知道,一切如何运作在这个Github repo github.com/coreos/coreos-kubernetes/tree/master/multi-node(vagrant和generic folder)中。
因此,如果您或您的开发人员确实需要在本地运行完整的“云环境”,那么您必须问问自己。在许多情况下,开发人员可以独立开发服务(基于微服务和容器)。
但有时需要在本地计算机上运行多个或所有服务作为开发环境。