K8S几乎成为Cloud Native的代名词,一般软件工程师应该不会陌生。但其定位往往也只是处于PaaS层。虽然通过cluster API,也可以创建K8S cluster所需要IaaS层资源(比如VM),但仍摆脱不了K8S处于PaaS层的定位。但是vSphere with Kubernetes的出现,就彻底突破了普通软件工程师对K8S认知的局限性。
如果对Cluster API不了解,可以参考我去年写的一篇关于Cluster API的文章:
如果对Cloud & K8S整体缺乏了解,建议阅读零君的另一篇文章:
<<Cloud & K8S>>
vSphere简介
鉴于有的人可能不太了解vSphere,所以先简要介绍一下。vSphere是VMware推出的虚拟化计算平台,它主要包括ESXi主机和vCenter Server。
ESXi是物理服务器之上的hypervisor,一般我们直接称这样的服务器为ESXi主机。在ESXi主机上,可以创建许多不同的VM。
vCenter Server是ESXi主机的管理平台。
什么是vSphere with Kubernetes
在vSphere 7之前,早就已经有cluster的概念。一个cluster里面可以包含多个ESXi主机。传统的cluster支持HA、vMotion、DRS等特性。
HA是高可用性;vMotion是指将一个VM在运行时动态地迁移到另外一台ESXi主机,并且不中断服务。DRS是Distributed Resource Scheduler,主要用于自动的管理VM的调度。
在vSphere 7中,vSphere with Kubernetes则是将传统的vSphere cluster转变成一个K8S cluster,用cloud native的方式来管理底层的硬件资源。将K8S成功地注入到了IaaS层。这就是为什么零君在本文开头提到“彻底突破了普通软件工程师对K8S认知的局限性”。
该K8S cluster直接工作于hypervisor层,被称为Supervisor Cluster。
Supervisor Cluster架构
这里直接借用官网的一张图:
有几个核心的概念应该交代一下。
Spherelet
它是移植到ESXi主机上的kubelet,在每一个ESXi主机上都会运行一个Spherelet实例。
K8S Control Plane VM
它是ESXi主机上创建的VM,总共会创建三个,它们组成了K8S cluster的控制平面。与k8S master node类似,每个K8S Control Plane VM上运行着api server、controller manager、kubernetes scheduler、etcd等服务。这里值得一提的是,vSphere DRS集成到了kubernetes Scheduler中,可以动态决定将vSphere Pod调度到哪台ESXi主机上。
vSphere Pod
它等价于普通的Kubernetes Pod。但不同的是,vSphere Pod是一个VM,运行的是基于Photon OS的Linux kernel。由于vSphere Pod与VM具有相同层次的资源隔离性,所以具有更高的安全性以及性能。另外值得注意的是,vSphere Pod是直接运行在ESXi主机上。
每个vSphere Pod中可以运行一个或多个Container。因为vSphere Pod兼容OCI (Open Container Initiative)标准,所以vSphere Pod中可以运行任何兼容OCI的container。
这里小结一下,如果需要很强的安全或资源隔离性,或者需要将Pod直接部署在ESXi主机上,则可以考虑vSphere Pod。否则就应该考虑TKGS。
TKGS是指Tanzu Kubernetes Grid Service,下文会有介绍
Supervisor Namespace
主要是用来设置资源隔离,可以为每一个namespace设置CPU、memory、storage以及K8S对象数量的上限。
TKGS
TKGS是Tanzu Kubernetes Grid Service的缩写。其实它就是开源K8S的企业发行版,主要是面向private cloud市场。其架构图如下,这张图也是来自于VMware官网,
对于这张图,关键是要注意两点:
1、TKGS本身是运行在Supervisor Cluster上的一个service;
2、TKGS是通过Cluster API的方式来创建K8S cluster,是通过Cluster API Provider来创建IaaS资源(比如VM)。
如果对Cluster API有所了解,看到图中的Cluster Resource、Machine Resource,就会很自然地想到Cluster API。
所以这里不难看出,由TKGS创建的K8S cluster与底层的Supervisor Cluster构成了两层的hierarchy结构的K8S cluster。底层 Supervisor Cluster的一个Pod(vSphere Pod)其实是一个VM;而上层K8S cluster中的一个Pod,是运行在由Cluster API Provider创建的VM中的,而这个VM就是由底层的Supervisor Cluster创建的。这里一定要弄清楚Cluster API与Supervisor Cluster之间的区别和联系。
总结
本文简要介绍了vSphere平台如何用cloud native的方式来管理底层的IaaS资源,以及如何结合TKGS来创建用户级别的K8S cluster。一般人都知道K8S很流行,但不知道K8S是如此流行,它不仅是PaaS层的事实上的标准,更是已经渗透到了IaaS层。K8S真是无处不在啊!
本文只是做一个概要的介绍,主要有两点原因:1、大多数人可能不太了解vSphere平台,涉及过多的细节意义不大;2、我最近也没有太多的精力将文章写的很详细。
--END--
参考资料
https://docs.vmware.com/en/VMware-vSphere/index.html
https://blogs.vmware.com/vsphere/2020/05/vsphere-7-with-kubernetes-network-service-part-1-the-supervisor-cluster.html