kubernetes高可用集群简介

什么是Kubernetes

在早期传统部署时代,应用程序直接部署在物理机器上。对于一个刚起步的小型项目或者单体服务来说,这没什么大问题。
随着业务不断扩大,单体架构已经不能支撑业务体系,服务不断增加,对机器资源的需求也不停的增加。如果还是使用物理机资源,从采购到系统安装到网络布线等一系列操作相当繁琐,而且最主要的是对机器资源的分配不够友好。试想一下某个服务可能只需要2C2G的资源,结果因为请求猛增,对机器资源的需求也变了,而之前部署的这台机器可能不能满足运行所需求资源,就又要重新换物理机重新搭环境重等等,想想都觉得好麻烦。
这个时候,虚拟化(VM)营运而生,在虚拟化的基础上虚拟机成为了主角。原来一堆的CPU、内存和存储不好管理,现在全都在此基础上动态分配硬件资源,搭建各类配置的虚拟机,可以windows上装linux,可以在MacOS中装windows,可以Linux上装Android等。再多的服务都不怕,只要物理机资源充足,一个操作系统甚至可以简单到直接复制粘贴就出来了。在此基础上,各类云平台也逐渐出现在大家的视野中。
当觉得一切都已很美好的时候,慢慢的大家又发现不对劲了。系统资源问题是解决了,可是每次运行几十上百甚至上千个服务时发现每个服务依赖的系统配置可能都不一样,这么多的服务,要挨个挨个去配置,那不得搞死人。
没办法,人都是懒惰的,但懒惰使人进步,容器技术就此诞生。什么是容器呢,容器就是将一个应用程序和它所有的依赖项、库或者其他二进制文件,以及运行它所需的配置文件打包到一起。打包出来放到任何支持容器运行的环境中直接运行就可以了。当然,生产环境中会涉及多个容器。这些容器有可能跨多个服务器主机进行部署。容器安全性需要多层部署,因此可能会比较复杂。
这时就该Kubernetes出场了。Kubernetes 可以提供所需的编排和管理功能,以便针对这些工作负载大规模部署容器。借助 Kubernetes 编排功能,可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。(关于VM和容器,每一个都可以是一个钻研的课题,本文的重点是Kubernetes,所以不作深入)。
那么什么是Kubernetes,官网已经给了我们一个很好的说明:

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

Kubernetes的高可用

对于一个Kubernetes集群来说,什么是高可用呢。主要针对以下几个组件:
– etcd
– kube-apiserver
– kube-controller-manager 與 kube-scheduler
– kube-dns
其中kube-controller-manager 、kube-scheduler以及kube-dns的高可用相对比较简单,只需要运行多份实例即可。本文介绍的是搭建etcd和kube-apiserver的高可用。

etcd是kubernetes集群中唯一带状态的组件,也是高可用一个难点。etcd本身是分布式架构,这也是它被kubernetes选中的原因,没有单点故障。
在kubernetes集群中etcd的高可用基本有两种思路:
– 搭建独立的etcd集群,使用3台或者5台服务器只运行etcd,独立维护和升级。
– 在Kubernetes Master上用static pod的形式来运行etcd,并将多台Kubernetes Master上的etcd组成集群,这种模式运行下的etcd可管理性更强。

因为本系列介绍的是kubernetes集群,所以选择第二种方案。独立搭建etcd集群网上已有大量相关教程,有需要可以自行搜索一下。

apiserver是属于无状态组件,所以搭建高可用要简单些,无非就是将多台apiserver用一个统一外部入口暴露给所有节点。这和我们在设计业务系统的高可用方案是一样的。apiserver的高可用有三种思路:
– 使用外部负载均衡器,不管是使用公有云提供的负载均衡器服务或是在私有云中使用LVS或者HaProxy自建负载均衡器都可以归到这一类。负载均衡器是非常成熟的方案,如何保证负载均衡器的高可用,则是选择这一方案需要考虑的新问题。
– 在网络层做负载均衡。比如在Master节点上用BGP做ECMP,或者在Node节点上用iptables做NAT都可以实现。采用这一方案不需要额外的外部服务,但是对网络配置有一定的要求。
– 在Node节点上使用反向代理对多个Master做负载均衡。这一方案同样不需要依赖外部的组件,但是当Master节点有增减时,如何动态配置Node节点上的负载均衡器成为了另外一个需要解决的问题。

注:static pod的形式的etcd集群就不单独展开说了,在搭建apiserver的高可用过程中会一并向大家展示。

本系列文章就是带大家一步一步了解下apiserver这三种高可用如何实现的。

《手把手教你搭建kubernetes高可用集群-外部负载均衡器篇》
《手把手教你搭建kubernetes高可用集群-网络层做负载均衡篇》
《手把手教你搭建kubernetes高可用集群-Node节点反向代理篇》

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据