Kubernetes1.3新特性:集群联盟----在全球快速部署和管理应用
Kubernetes作为生成级别的容器编排管理工具,从发布到现在已经一年多的时间了。作为从Kubernetes诞生就可开始参与的人来说,为今天kubernetes的成功而激动。在过去的几个月里,我们一直在为Kubernetes创造的一个新功能而兴奋,这个新功能就是“集群联盟”。
Kubernetes v1.3在2016年7月份发布了,里面介绍了对“集群联盟”的支持。这个功能使企业能够快速有效的、低成本的部署和管理跨公有云和数据中心的应用。这个功能会按照地理位置创建一个复制机制,将多个kubernetes集群进行复制,即使遇到某个区域连接中断或某个数据中心故障,也会保持最关键的服务运行。让我们来看看“集群联盟”控制平面架构,并使用一些用例来分析。
集群联盟:管理多个kubernetes集群的集群
为了追求高可用性和更高的性能,要将应用部署到多个数据中心或多个公有云中。通过引入“集群联盟”控制平面,Kubernetes v1.3迈出了第一步,使自己成为了一个多区域业务编排框架。
“集群联盟”在架构上同kubernetes集群很相似。有一个“集群联盟”的API server提供一个标准的Kubernetes API,并且通过etcd来存储状态。然而,一个通常的Kubernetes只是管理节点计算,而“集群联盟”管理所有的kubernetes集群。
从图中可以看出来,kubernetes通过一组node来协调工作负载,而“集群联盟”通过一组Kubernetes集群协调工作负载。
联合服务
Kubernetes有一个标准的插件:kube-dns,这个插件可以在集群内部提供DNS服务,通过DNS可以通过名字来访问kubernetes服务。Kubernetes服务是由一组kubernetesPOD组成的,这些POD是一些已经容器化了的应用,这些POD前面使用到了负载均衡器。假如我们有一个kubernetes集群,这个集群里面有一个服务叫做mysql,这个服务是由一组mysql POD组成的。在这个kubernetes集群中,其他应用可以通过DNS来访问这个mysql服务。
例如:
mysql://user:pass@mysql:3306
对于kubernetes v1.3来说,新的federation/v1beta1 API将扩展基于DNS服务发现的功能。“集群联盟”利用DNS,让POD可以跨集群、透明的解析服务。
从图中可以看出来,这种架构可以兼容其他公共路由器,还可以兼容一些私有广域网,这些私有广域网通过各种联合集群的外部服务接口互联互通。
当前支持联盟DNS功能的有AWS的Route53、Google Cloud DNS。需要注意的是,这个联盟DNS提供接口是“插件式”的,可以针对不同的环境进行扩展。
展望未来:通过kubernetes提供的“集群联盟”功能,在全球范围内部署应用
在kubernetes v1.3中,“集群联盟”是一个新特性,当前处于beta阶段,这意味着这个功能目前可以用来做测试,还不能在生产环境中使用。我们现在正在kubernetes社区中稳定和扩展“集群联盟”这个功能,在以后的发布版本中,希望企业可以使用到这个功能,实现在全球范围内部署应用。
可以预见到,kubernetes的“集群联盟”功能就会很快发布了。
全局调度
“集群联盟”的控制平面能够把POD指定给其他Kubernetes集群。在即将发布的版本中,“集群联盟”调度器将决定如何在不同kubernetes集群中分配工作负载。为了追求高可用性和更高的性能,将应用部署到全球多个数据中心或多个公有云中,“集群联盟”成为了实现方式。
通过全局调度,我们可以:
• 跨kubernetes集群均匀的调度任务负载
• 将一个最便宜的kubernetes集群的工作负载进行最大化,如果超出了这个kubernetes集群的承受能力,那么将额外的工作负载路由到一个更昂贵的kubernetes集群中
• 根据应用地理区域需求,调度工作负载到不同的kubernetes集群中,对于不同的终端用户,提供更高的带宽和更低的延迟。
从区域故障或者数据中心故障中自动恢复
Kubernetes本身可以自动处理集群中单节点故障的问题,而“集群联盟”的核心动机之一是自动从一个kubernetes集群的故障中进行恢复。
“集群联盟”控制平面可以跨集群冗余部署,当某个集群所在区域出现故障时,并不影响整个服务。该联盟的控制平面还可以检测集群是否为不可用状态,如果发现某个集群为不可用状态时,可以将失败的任务重新分配给“集群联盟”中其他可用状态的集群上。
避免厂商锁定
通过使用特定公有云的功能和服务,才可以协调复杂云应用的资源和负载。这样导致大量应用被锁定到一个特定的云服务提供商。
Kubernetes是一个开源的编排框架,提供一套统一的接口,通过这套统一接口可以实现应用的弹性部署,而不用依赖于特定的云服务提供商。通过“集群联盟”有助于实现这一目标,通过一套统一的接口,可以根据价格,服务水平或个人偏好的变化,在不同云服务提供商之间动态迁移工作负载。
通过“集群联盟”这样的功能,企业将能够有效地将他们的应用部署在全球各地,同时通过动态优化部署来节省运营成本。这是为了实现Google’s Infrastructure for Everyone Else(GIFEE)必不可少的一步。