目前我有一个应用程序( myapp
),它可以部署为在"raw"(Ubuntu)VM上运行的Java Web应用程序 . 在 生产环境 中,基本上有5-10个VM在任何给定时间运行,所有负载均衡在nginx负载均衡器后面 . 每个VM都由Chef管理,它会注入正确的env变量,并为应用程序提供对 生产环境 有意义的运行时参数 . 所以再次:通过nginx负载 balancer 和通过Chef配置 .
我现在有兴趣将我未来的工作负载集中在一起,并将此应用程序移植到Docker / Kubernetes . I'm trying to see what features Kubernetes offers that could replace my app's dependency on nginx and Chef.
所以我的担忧:
-
Kube-Proxy(或任何其他Kubernetes工具)是否提供子域或其他负载均衡的URL,可以对任意数量的pod副本进行负载均衡 . 换句话说,如果我将新容器化的应用程序/图像发送到Kubernetes API,Kubernetes是否有办法使图像可用,例如10个pod复制品在
myapp.example.com
之后的所有负载均衡?如果没有,Kubernetes和网络软件(DNS / DHCP)之间的集成是什么? -
Kubernetes(例如perhas via
etc
?)是否提供任何类型的键值basec配置?将命令发送到Kubernetes API并给它标签如myapp:nonprod
或myapp:prod
并将Kubernetes "inject"正确的KV对放入正在运行的容器中会很不错 . 例如,可能在"nonprod"环境中,应用程序连接到名为mydb-nonprod.example.com
的MySQL数据库,但在prod中它连接到RDS集群 . 或者其他的东西 . -
Kubernetes是否提供可替代Consul / ZooKeeper的服务注册表功能?
1 回答
回答:
1)Kubernetes中的DNS子域:
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns
此外,每个服务负载均衡器都会获得一个静态IP地址,因此如果要定位该IP地址,还可以编写其他DNS名称 .
2)键/值对
在创建时,您可以注入任意键/值环境变量,然后在脚本/配置中使用它们 . 例如你可以连接到$
虽然对于您的具体示例,我们建议使用命名空间(http://kubernetes.io/v1.0/docs/admin/namespaces/README.html),您可以拥有"prod"命名空间和"dev"命名空间,并且服务的DNS名称在这些命名空间内解析(例如mysql.prod.cluster.internal和mysql.dev.cluster . 内部)
3)是的,这是DNS和服务对象提供的内容(http://kubernetes.io/v1.0/docs/user-guide/walkthrough/k8s201.html#services)