Kubernetes是一个开源的用于管理云平台中多个主机上的容器的应用。Kubernetes的目标是让进行了容器化的应用简单并且高效。本节将以minikube为例,演示Pulsar在Kubernetes上的安装与使用。
minikube是一个可以让你在本地运行Kubernetes集群并进行开发和测试的工具。minikube不允许以root用户的身份来启动运行,在安装它之前应创建一个新用户,并确保将该用户添加到docker组。在非root用户的身份下通过如下命令安装minikube到Linux系统,并在minikube上启动一个Kubernetes集群。
在安装完Kubernetes集群之后,还需要安装kubectl客户端工具。该工具负责与Kubernetes集群进行管理方面的交互。通过如下命令安装完成kubectl后,可以通过“kubectl cluster-info”命令查看集群状态。
Helm是基于Kubernetes的应用包管理工具,它可以简化在Kubernetes中部署应用的复杂程度。Helm Chart是描述相关Kubernetes资源的一个文件集合。使用Helm Chart可以快速在Kubernetes中进行Pulsar服务部署。Helm可通过如下命令进行快速安装与验证。
Pulsar官方已经提供了Pulsar Chart的仓库,通过如下命令可进行Pulsar Helm Chart的安装,安装完成后可在命名空间“pulsar”下查看到Bookie、Broker、Zookeeper等中的Pods与services状态。这个时候代表Pulsar在Kubernetes上已初步安装完成。
在安装Helm Chart前,可以运行prepare_helm_release.sh脚本来创建相应的命名空间和JWT密钥。
社区提供了一系列的配置示例,例如下述代码就是一个演示用的values-minikube.yaml配置示例。该示例可以在Kubernetes中启动一个非持久化的完整Pulsar实例。在该实例中会各自创建Bookie、Broker、Zookeeper节点。该实例下BookKeeper中使用的持久化路径会通过Kubernetes的emptyDir持久卷进行挂载,emptyDir类型的卷在Pod分配时被创建,在Pod被移除时该目录下的数据也会被清理,因此在Pulsar视角下数据是并发完成持久化的。
Helm Chart在values.yaml中预设了一些集群配置,用户可以根据自己的需求对其进行二次配置。接下来我们将介绍Helm Chart中使用的关键配置。
在独立部署Pulsar集群时,需要对元数据进行初始化,在Kubernetes流程中可以通过pulsar-init job来完成此操作。只需要在values.yaml中将initialize设为true即可启动pulsar_init job。pulsar_init job会根据集群配置,在等待Zookeeper集群就位后,自动执行initialize-cluster-metadata命令。
在Kubernetes中的Pulsar实例中,将Pulsar集群功能拆分为以下几个组成部分:Zookeeper、BookKeeper、autorecovery、Broker、Functions、Proxy、pulsar_manager、monitoring。其中Zookeeper、BookKeeper、Broker、Functions、Proxy对应着Pulsar中几个类型的服务。
autorecovery是BookKeeper提供的自动恢复服务,该服务会自动检测BookKeeper集群中的Bookie节点何时变得不可用,并重新复制存储在该Bookie节点上的所有Ledger。在分布式部署中,BookKeeper服务端默认会跟随集群启动该服务,但在Kubernetes服务中会尝试在单独的Pod中独立启动该服务。
pulsar_manager是社区提供的集群管理工具,可帮助管理员更好地管理集群。Pulsar的镜像里集成了该服务,我们会在9.3.2节中对其进行系统介绍。
Kubernetes中的Pulsar实例的monitoring服务由两部分组成——Prometheus和Grafana。Prometheus是云原生时代的监控组件,Grafana是一个开源的用于监控数据分析和可视化的套件,两者相结合可以构建出强大的云原生监控方案。所有上述功能都可以在values文件中进行开关。
上述多个Pulsar集群的组成部分之间会通过podAntiAffinity进行亲和性配置。当前有两种亲和性配置——强性调度配置和软性调度配置。前者表示Pod要调度的节点必须满足一定规则,否则不会被调度并一直处于Pending状态;后者表示优先调度满足规则的节点,这类节点不能满足规则才会调度其他节点。Pulsar默认采用软性调度配置。
toolset容器中内置了一系列管理工具。通过下面的命令进入该容器后,可以和本地安装的Pulsar一样进行集群管理。
在Broker服务启动之后,可以通过Pulsar Proxy提供的服务端口对信息进行生产和消费。运行如下命令结果为:Pulsar的Web服务端口和Proxy服务端口分别被映射到32305和31816端口上,可直接通过映射后的域名和端口对信息进行生产与消费。