在阿里云上部署生产级别Kubernetes集群

阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群。 本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级别Kubernetes集群的方法。 文中所采取的技术方案具有一定的主观性,供各位读者参考。在实践中可以根据具体使用场景进行优化。 目标 当我们刚接触Kubernetes进行测试集群的搭建时,往往会选择一篇已有的教程,照着教程完成集群搭建。我们很少去质疑教程作者每一步操作的合理性, 只想快点把集群搭建起来,早点开始实际的上手体验。 与测试集群不同,对于生产级别的部署,我们会有更加严格的要求,更加强调合理的规划以及每个步骤的合理性以及可管理性。以下是我们设定的目标: 没有单点故障。任何一台服务器离线不会影响到整个集群的正常运转 充分利用阿里云原生提供的SLB,云盘等工具,支持Volume挂载,LoadBalancer类型的Service等Kubernetes基础功能。 获得完整的Kubernetes使用体验。 在不牺牲安全性和稳定性的前提下,尽可能降低日常运维所需要的投入,将可以由程序完成的重复性工作自动化 支持随着业务规模扩展的动态集群规模扩展 因为篇幅的原因,以下内容将不作为本文的目标,留待日后再做分享: 集群运行成本控制 监控、日志等运维系统的搭建 安全防护以及权限设计 现状 目前Kubernetes主要支持的云平台还是海外的几大主流平台,但是对比阿里云提供的基础设施,我们已经具有了基本相同的底层环境。 阿里云提供的VPC,云盘,SLB,NAS等组件,都为搭建生成级别Kubernetes集群提供了很好的支持。充分利用这些组件, 我们应该可以搭建出完整可用的Kubernetes集群。但是仔细研究Kubernetes的代码我们会发现,阿里云的CloudProvider暂时没有被合并到上游当中, 所以我们需要设计方案来解决Kubernetes暂时还没有原生阿里云支持的问题。 Kubernetes生态圈发展迅速,目前已经有了像kops这种集群自动创建工具帮助运维工程师创建集群。但是目前已有的集群创建工具均只支持国外的云平台, 使得国内云平台的用户只能采取手动搭建的办法。像kubeadm这种半自动工具还可以使用,也算是减轻了不少负担。从目前状况来看, 运维的负担依然很严重,为我们实现生产级别部署所追求的自动化、规模化的目标带来了不小的障碍。 由于网络原因造成的镜像拉取困难也给我们创建Kubernetes集群制造了不小的麻烦,好在阿里云一直在致力于解决这个问题,为用户提供了镜像拉取加速服务以及重要镜像的Mirror。 另一个问题是操作系统镜像的问题,在后面分析操作系统的时候再详细展开。 架构 基于消除单点故障以及降低复杂度的考虑,我们设计了由5台服务器,分两个服务器组构成的Kubernetes集群的控制节点,并视业务需求情况由N台服务器, 分多个服务器组,构成集群的运行节点。如下图所示: 在设计这一架构时,我们考虑了以下几点: 整个集群的主要构成元素为服务器组。一组服务器具有相同的硬件配置,服务相同的功能,在软件配置上也基本相同。这样为服务器的自动化管理打下了很好的基础。 由3台服务器组成的etcd集群,在其中任何一台服务器离线时,均可以正常工作。为整个Kubernetes集群的数据持久化保存提供了稳定可靠的基础 2台同时运行着Kubernetes核心组件kube-apiserver,kube-controller-manager,kube-scheduler的服务器,为整个集群的控制平面提供了高可用性。 多个运行节点服务器组,有着不同的CPU,内存,磁盘配置。让我们可以灵活的根据业务对运行环境的要求来选择不同的服务器组。 集群搭建 在有了架构蓝图后,接下来让我们来实际搭建这个集群。 操作系统选型 搭建集群首先会面临的问题是,选什么配置的服务器,用什么操作系统。服务器硬件配置相对好解决,控制节点在业务量不大的时候选择入门级别的配置再随着业务增长不断提升即可, 运行节点应当根据业务需要来选择,可能要做一些尝试才能定下来最适合的硬件配置。比较困难的选择是操作系统的选型。 只要是使用较新的Kernel的Linux主机,均可以用来运行Kubernetes集群,但是发行版的选择却需要从多个方面来考虑。在这里我们选择了CoreOS作为最基础的操作系统。 做出这一选择是基于以下这些因素: CoreOS是专门为运行容器设计的操作系统,非常适合用来运行Kubernetes集群 CoreOS去除了包管理,使用镜像升级的方式,大大简化了运维的复杂度 CoreOS可以使用cloud-init,方便的对服务器进行初始化 阿里云提供了CoreOS的支持 CoreOS的详细介绍,大家可以参考官方的文档,在这里就不展开了。需要指出的是阿里云提供的CoreOS镜像版本较低,需要先进行升级才能正常使用,增加了不少麻烦。 希望以后阿里云能够提供最新版本的CoreOS镜像,改善这一问题。 CoreOS版本升级 由于网络的原因,CoreOS在国内不能正常进行升级。我们需要在国内搭建升级服务器。CoreRoller是一个可选项。具体的搭建可以参考相关文档,在这里就略过了。 在顺利搭建好升级服务器之后,可以修改/etc/coreos/update.conf,添加SERVER=https://YOUR_SERVER/v1/update/这一条配置,然后使用以下指令来升级服务器: sudo systemctl restart update-engine update_engine_client -update 我们搭建了自己的升级服务器,如果有需要的朋友可以联系我们获得服务器地址。后面所有启动的CoreOS服务器,我们均假设管理员已经提前完成了版本升级的工作, 在流程中不再重复。如果阿里云开始提供最新的CoreOS镜像,那这一步可以省略掉。