2015-09-28 64 views
0

目前我有一个应用程序(myapp),它可以作为在“原始”(Ubuntu)VM上运行的Java Web应用程序进行部署。在生产中,在任何给定时间内基本上有5-10个虚拟机运行,所有负载均衡在nginx负载平衡器之后。每个虚拟机由Chef管理,它会注入正确的env变量,并为应用程序提供对生产有意义的运行时参数。再来一次:通过nginx进行负载均衡,并通过Chef进行配置。Kubernetes API用于供应豆荚即服务?

我现在对将来的工作负载进行容器化,并将此应用移植到Docker/Kubernetes中感兴趣。 我正在尝试查看Kubernetes提供的哪些功能可以取代我的应用对nginx和Chef的依赖。

所以我的关注:

  • 是否库贝代理(或任何其他Kubernetes工具)提供子域或以其他方式-loadbalanced的网址,可以负载平衡到任意数量的荚副本。换句话说,如果我将新集装箱化的应用程序/映像“推送”到Kubernetes API,那么Kubernetes是否可以使图像可用,例如10个副本副本均在myapp.example.com之后均衡负载均衡?如果不是Kubernetes和网络软件(DNS/DHCP)之间的集成是什么?
  • Kubernetes(比如说,通过etc?)提供任何类型的键值basec配置吗?将命令发送到Kubernetes API并给它标签,如myapp:nonprodmyapp:prod,并让Kubernetes将正确的KV对“注入”到正在运行的容器中将会很好。例如,在“nonprod”环境中,应用程序可以连接到一个名为mydb-nonprod.example.com的MySQL数据库,但它可以连接到RDS集群。或者其他的东西。
  • Kubernetes是否提供可替代Consul/ZooKeeper功能的服务注册表?

回答

1

答案:

1)Kubernetes DNS子域:

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns

此外,每个服务的负载均衡器获得一个静态IP地址,所以如果你想你也可以其他的DNS名称编程以该IP地址为目标。

2)键/值对

在创建时,你可以将任意键/值的环境变量,然后使用这些脚本中的/ config中。例如您可以连接到$ {DB_HOST}

尽管对于您的具体示例,我们建议使用命名空间(http://kubernetes.io/v1.0/docs/admin/namespaces/README.html),您可以拥有“prod”命名空间和“dev”命名空间,并且在这些命名空间内解析服务的DNS名称(如mysql.prod.cluster.internal和mysql.dev.cluster.internal)

3)是的,这就是DNS和服务对象提供(http://kubernetes.io/v1.0/docs/user-guide/walkthrough/k8s201.html#services

+0

感谢@brendan(+1)我欣赏坚实的反馈。如果你不介意的话,快速跟进一下:关于KV对,你提到“*创建时**你可以......”,这是否意味着一旦创建了一个pod /服务,它的KV对是不可变的?这将成为一个问题,因为应用程序的演变,需要新的环境特定的配置......想法?再次感谢! – smeeb

+0

另外一般来说,服务似乎不需要像[注册机构](https://github.com/gliderlabs/registrator)这样的工具。你能想到为什么有人需要注册器在内部(或以某种方式)运行Kubernetes集群的任何原因吗? – smeeb