Kubernetes 分区与租户可以有多种对应的设计,上面所说的一个分区一个租户的设计是一种典型的设计,也可以将租户分为大客户与普通客户,每个大客户都有一个单独的资源分区,而普通客户可以以N个为一组,共享同一个分区的资源。
PaaS 平台的领域模型设计
我们知道,微服务架构下的一个应用通常是由多个微服务所组成的,而我们的Kubernetes通常会部署多个独立的应用,因此,如果用 Kubernetes建模微服务应用,则我们需要在 PaaS平台的领域模型中设计出 Application这个领域对象,一个Application包括多个微服务,并且最终在发布(部署)时会生成对应的Pod、Deployment 及 Service对象,如下图所示。
如下所示是有更多细节的领域模型图,Kubernetes中的 Node、Namespace分别被建模为K8sNode与TanentNS,分区则被建模为ResPartition对象,每个分区都可以包括1到N个TanentNS,即一个或多个租户(Tanent〉使用。每个租户都包括一些用户账号(User),用来定义和维护本租户的应用(Application)。为了分离权限,可以使用用户组(User Group)的方式,同时可以增加标准的基于角色的权限模型。
上图中的Service领域对象并不是Kubernetes Service,而是包括了Kubernetes Service及相关RC/Deployment的一个“复合结构”。在Service领域对象中只包括了必要的全部属性,在部署应用时会生成对应的Kubernetes Service和RC/Deployment实例。下图给出了Service的定义界面(原型)。
我们在界面上完成对一个Application的定义后,就可以发布应用了。在发布应用的过程中,先要选择某个分区,然后程序调用Kubernetes的 API接口,创建此 Application相关的所有Kubernetes资源对象,然后查询Pod的状态即可判断是否发布成功及失败的具体原因。下面给出了Application从定义到发布的关键模块的设计示意图。