1. 为什么会出现这一套体系
想象一下各大公司都有着自己需要运行的服务器,应用程序,数据库系统等。这些应用随着时间的流逝,所需要的计算资源和存储资源越来越多,数据库需要存储设备来存储数据,应用程序需要更多的CPU来计算,总不能每次扩增都在自家机房里添置设备,所以,就有很多公司开始提供存储设备服务和容器(计算资源)服务。众多的厂商提供的api都有差异,我购买了这些服务后,还需要花时间来学习这些产品的维护方法(尤其体现在存储设备上),如果一家公司购买了不同厂商的存储服务,那光是掌握这几家的设备API都很费事。基于这样的需求下,产生了kubernetes(作为示例的容器管理平台) + CSI(container storage interface) + opensds 这样一套组合。
2. 什么是kubernetes
首先是kubernetes ,Kubernetes是一种容器编排系统,又称k8s,是google整理了15年来borg的运行经验构建的新的开源产品。主要用于管理云上的多个主机上的容器化应用,简单来说就是管理你买的容器(这个容器我理解为装载运行可执行应用程序的环境)。那我们为什么要用容器呢?简简单单买个服务器不好吗?a. 为什么我要用容器(container)
对于我的一个想要运行的应用程序,可能它不需要完整的操作系统平台(linux、windows等),也不需要很多的资源(一块4核cpu可以运行上千个这样的程序)。所以划分单个虚拟机来给我这个程序实在是太浪费了。容器在这样的条件下出现了,它只配置了运行需要的应用程序最基础的也是必须的环境和计算资源,一台家用pc的配置就可以搭建成千上万个容器。并且,我容器之间是完全隔离的,彼此都不知道对方的存在,有着自己的文件系统。而且容器中的程序出了问题,也能很好的状态回撤之类的。
b. 容器(container)的运行环境在哪?
容器有效的时候,是位于pod内的,一个pod可以有多个容器,pod之上还有docker,docker才真正是容器的运行环境。c. Kubernetes都干了啥
k8s主要提供1) 自动化管理云平台中的主机资源
2) 多个资源中心之间的任务分配,资源利用
3) 分布式系统支撑,提供更高的可靠性,自恢复性,可扩展性和在线扩容能力
用户直接使用k8s来管理容器资源,k8s提供稳定的运行环境给用户。
d. Kubernetes的主要资源
1) Master / Node 节点、 pod
Pod是挂载在节点上的,一个节点可以挂载多个pod,节点分为master节点和node节点,master是集群控制节点(具体参照集群的概念),负责整个集群的控制管理。除了master外就是node节点,node是k8s的工作节点,可以是物理机也可以是虚拟机。当一个node挂掉后,k8s会处理其上的工作,分配给另外的node之类的。Pod是一群容器的运行环境,可以看做是这群容器的逻辑主机。 POD可能包含一个或多个紧密相连的应用,这些应用可能是在同一物理主机或虚拟机上。
同一个Pod中的应用可以共享磁盘,通过localhost通信,Pod是用后即毁的,直到被终止或者删除。当一个Node死掉后,上面的Pod也会被删除。
2) Volume
一个容器总得有地方放可执行文件,volume 是pod中能够被多个容器共同访问的目录,当容器出了问题时,volume中的数据也不会丢失。但当pod出了问题时,volume中的数据便也跟着没了。3) Service
将容器中运行的服务暴露给外部网络。 Service提供了一个从Deployment与Pod到外部网络以及外部到内部容器的一个双工通道。4) Namespace
封装、划分基础设施5) Labels
标识各种资源
上面提到的资源分布如下
3. Opensds 是啥
Opensds是一个开源社区,具体可以自行搜索。容器我理解为主要是计算资源,但有计算就得有存储,不同厂商的存储设备驱动肯定不同,opensds相当于一个虚拟文件系统,对上面(用户)屏蔽了地下不同厂商的设备的差异,提供了一套属于opensds的API。
4. CSI (container storage interface)又是啥
最开始比较搞不懂这一点,因为CSI从名称上看也是提供了存储的接口,不是已经有opensds干这事了吗?原来,k8s也只是一套管理平台而已,与它同功能的也还有很多,CSI用于抹除这些平台间的差异性。然后再与opensds提供的API对接,这样,用户不需要再烦恼平台的更替,存储设备的驱动差异这种影响开发的琐事。
5. Kubernetes + CSI + opensds 宏观联系
(注:本文仅是作者个人见解,遗漏错误在所难免,请各位大佬批评指出)