Kubernetes的发展环境

美好的一天

我们有一个由6个虚拟机组成的开发环境。 目前我们正在使用VirtualBox的Vagrant和Ansible。 正如你可以想象的,托pipe这个环境是一个维护的噩梦,特别是随着软件/操作系统版本的变化。 不要提到开发者机器的资源负载。

我们已经开始将一些虚拟机迁移到docker。 但是这本身带来了编排,正确configuration,沟通等方面的问题。这使我成为了Kubernetes。

难道有人会提供一些推理,说明Kubernetes是否会成为这项工作的正确工具? 这是pipe理和编排“开发”docker集装箱。

谢谢

正如前面提到的,这是一个相当复杂的话题。 但是我现在也在做这个。 所以,让我为你总结一些事情:

使用Kubernetes(K8),您将编排您的SaaS应用程序。 在最好的情况下,它是一个云原生应用程序。 云原生应用程序的属性/需求由云本机计算基金会(CNCF)制定,基本上是在谷歌捐赠给Linux基金会之后,基本上是以k8s为单位形成的。 因此,云原生应用程序的属性/要求是:容器打包,dynamicpipe理和面向微服务(cncf.io/about/charter)。 如果您的应用程序是基于微服务的,并且每个服务都有一个单独的容器,则您将从k8s获益。

有了基于微服务的应用程序,每项服务都可以独立开发。 开发人员只需要遵循12Factor方法(12factor.net)(使用env var而不是硬编码的IP地址等)。

在下一步,开发人员构build一个服务的容器,并将其推送到一个容器registry中。 对于本地开发环境,您可能还需要在集群内运行容器registry,以便开发人员可以在本地推送和testing其代码。

然后,您可以使用Ports,Port-mapping,env vars,Container Images等来定义您的k8s复制控制器,服务,PetSets等,并在集群内创build并运行它。

k8s文档build议Minikube在本地运行k8s(kubernetes.io/docs/getting-started-guides/minikube/)。 随着Minikube你有像DNS,NodePorts,ConfigMaps和秘密仪表板的function。 但是我select了具有Vagrant Cluster的多节点CoreOS Kubernetes作为Puja Abbassi在博客“寻找合适的本地Kubernetes开发环境”( https://deis.com/blog/2016/local-kubernetes-development-环境/ ),它更接近我的生产环境(12因子:10 – 开发/产品平价)。 随着stream浪环境你有这样的function:

  • networking与法兰绒
  • 服务发现与etcd
  • 使用SkyDNS的一组容器的DNS名称
  • 内部负载平衡

如果你想知道,如何一切工作看这里Github回购github.com/coreos/coreos-kubernetes/tree/master/multi-node(vagrant和通用文件夹)。

所以你必须问自己,如果你或你的开发者真的需要在本地运行一个完整的“云环境”。 在很多情况下,开发者可以独立开发服务(基于微服务和容器)。

但是有时需要将多个或所有服务作为开发环境在本地计算机上运行。

这是一个相当复杂的话题,如果值得使用k8s作为本地开发环境,那么就需要考虑很多事情。 特别是当我想让我的本地开发环境非常接近在Kubernetes上运行的生产环境时,我使用了它。 这有助于避免许多configuration错误。

在我看来,Kubernetes(K8s)将为您提供开发环境所需的一切。

它给你很大的灵活性,并自己做了很多configuration。 几个例子:

  • 将新版本部署到本地kubernetes堆栈的简单方法

您为每个应用程序模块准备k8s复制控制器文件(请记住,它们需要是无状态模块)在复制控制器中,您指定了docker映像,就是这样。 使用这种方法,您可以将新的docker映像推送到本地docker_registry,然后使用kubectl控制应用程序的生命周期。

  • 轻松扩展您的应用程序模块

例如:

kubectl scale rc your_application_service --replicas=3 

这样k8​​s会检查你的服务运行了多lesspod,如果它认识到这个数字小于那个副本的值,它将会创build新的来满足副本的数量。

这是无尽的话题,还有很多其他的东西出现在我的脑海里,但是我build议你去尝试一下。

有一个https://github.com/kubernetes/kubernetes/blob/master/docs/devel/developer-guides/vagrant.md项目用于在vagrant中运行k8s集群。

当然,你必须记住,如果你有很多服务,他们都必须推送到本地存储库,并运行K8s。 这将需要一些时间,但如果您使用一些自定义脚本自动执行本地部署,您将不会后悔。