我们知道Kubernetes是基于容器技术的微服务架构平台,每个微服务的二进制文件都被打包成标准的Docker镜像,因此应用的全生命周期管理过程的第一步,就是从源码到Docker镜像的打包,而这个过程很容易实现自动化,我们既可以通过编程方式实现,也可以通过成熟的第三方开源项目实现,这里推荐使用Jenkins。下图是Jenkins实现镜像打包流程的示意图,考虑到Jenkins的强大和用户群广泛,很多PaaS平台都集成了Jenkins 以实现应用的全生命周期管理功能。
PaaS 平台的基础中间件
一个完备的PaaS平台必须集成和提供一些常见的中间件,以方便应用开发和托管运行。首先,第1类重要的基础中间件是 ZooKeeper,ZooKeeper非常容易被部署到Kubernetes集群中,在Kubernetes 的 GitHub上有一个YAML参考文件。ZooKeeper除了给应用使用,也可以作为PaaS平台面向应用提供的“集中配置服务”的基础组成部分,如下图所示。
此外,考虑到很多开源分布式系统都采用了ZooKeeper来管理集群,所以我们也可以部署一个标准命名的ZooKeeper Service,以供这些集群共享使用。
第2类重要的中间件就是缓存中间件了,比如我们之前提到的Redis 及 Memcache,它们也很容易被部署到Kubernetes集群中,作为基础服务提供给第三方应用使用。在Kubernetes的入门案例中有一个GuestBook例子,演示了在PHP页面中访问Redis主从集群的方法,即使是复杂的Codis集群,也可以被成功部署到Kubernetes集群中。此外,RedHat 的J2EE内存缓存中间件Infinispan也有Kubernetes集群部署的案例。
第3类重要的中间件是消息队列中间件,不管是经典的ActiveMQ、RabbitMQ还是新一代的Kafka,这些消息中间件也很容易被部署到Kubernetes集群中提供服务。下图是一个3节点的RabbitMQ集群在Kubernetes平台上的建模示意图。为了组成RabbitMQ集群,我们定义了3个Pod,每个Pod都对应一个Kubernetes Service,从而映射到3个RabbitMQ Server 实例,此外,我们定义了一个单独的Service,名为 ku8-rabbit-mq-server,此 Service对外提供服务,并且对应到上述3个Pod 上,于是每个Pod都有两个标签。
第4类重要的中间件是分布式存储中间件,目前在Kubernetes集群上可以使用Ceph集群提供的块存储服务及GlusterFS提供的分布式文件存储服务,其中 GlusterFS被RedHat的OpenShift平台建议为文件存储的标配存储系统,下面是这种方案的示意图。