如何通过自动化Kubernetes集群管理容器
许多开发者已经求助于Docker容器来实现云端和本地的新应用迭代时的一致性,而且很多应用都要依赖多个Docker容器的编排。而围绕着容器集的启动以及为了让它们能够协作而连带的相关设置和配置又引发了一系列新的挑战。
为了弥补这一差距,软件产业一直在向容器管理系统Kubernetes靠拢,它承担了生态体系的职能,实现对容器集的自动化部署。在旧金山举行的KubeCon会议上,专家们讨论了其中一些基于Kubernetes的集群自动化部署的最佳实践和工具。
Univa工程总监Cameron Brunner说创建Kubernetes有很多很好的工具,但对一致的集群自动化部署却没有好的路径。“我们喜欢把硬件当作家畜来看待,” Brunner说:“这个我们在app上面一直都是这么听说的。但把你的硬件当作宠物会导致令人不快的内部管理问题。”
Univa内部大约有5个集群在跑Kubernetes,每一个都包括多个节点。有一条可靠的工具链有助于快速生成符合一致性的Kubernetes集群,快到能够在数分钟内开发和启动。
Brunner说组织需要应对一下问题才能生成一个一致可靠的Kubernetes集群:
- 从什么样的基础操作系统开始?
- 该操作系统是怎么部署和配置的?
- Kubernetes打算怎样安装和配置?
幸运的是,环境中有许多工具支持这一过程,Brunner说。像Atomic和CoreOS这样的不变操作系统已经变得相当稳定。预引导执行环境(PXE boot)未来启动技术可以简化部署。Cloud-Init是一个很好的启动时配置工具。
建立一致性
Brunner建议要一直通过网络启动你的硬件。这可以在机器出问题或需要升级时快速进行服务开通的再次准备。PXE启动有助于简化这一过程。理想情况下,好的做法是有一个工具去动态生成PXE,而这个东西不是跟PXE一起的。
安装不变的操作系统也是一个好的做法。这可以在数据中心做出一致的软件集和一致的环境。Brunner说:“这降低了总体的管理复杂性,理解集群中发生的事情更容易。”
在本地托管容器镜像也是好想法。Brunner建议要有一个本地库。另一个好做法是用Cloud-Init管理配置。这样把所有东西放在一个地方会更简单,同时还能有一个不变的OS。这可以用Systemd来集成,完成证书登记、密钥提取等辅助操作,从而建立一条系统启动操作的流水化的工作流。
AWS自动化Kubernetes
旧金山的程序员Jimmy Cuadra说,在AWS上面以一致的方式部署Kubernetes集群是个挑战。他说,“操作生产集群这个东西我不敢信任,哪怕我尊重Kubernetes团队的艰苦工作。对于我们这些需要管理自己集群的人来说,我们需要更健壮的东西。”
Cuadra说,对于在托管应用上面运行来说,Google Container Engine是个好的选择。但在AWS上面进行集群的自动化部署需要更健壮的办法。该问题部分在于与集群的声明式配置工具相关的大多数信息已经过时或包含有失效链接。Cuadra希望能够利用声明式配置文件,在Git上登记生成集群。
Cuadra建议用Hashicorp的Terraform。它允许组织使用声明式配置语言去买搜狐资源以及云基础设施的状态,从而匹配Git库里面的东西。
控制配置复杂性
部署Kubernetes集群方面有很多服务开通问题,这些不是Terraform容易解决的。需要有特别的配置设置来描述容器间相互对话的不同。还要有其他的设置来指定如何对Kubernetes API进行鉴权,给团队不同的人提供分布式访问证书。保持多个Kubernetes实现的状态的工作流也需要管理。
为了填补这一差距,Cuadra开发了一个名为KAWS的开源工具,它可以更容易地指定基础设施为代码,且内置一个域名系统。它还生成Kubernetes访问证书,并可以安全地把它分发出去。KAWS是用Rust编程语言开发的。