跳到主要内容

创建 Pulsar 集群

概述

KubeBlocks 可以通过良好的抽象快速集成新引擎,并支持 Pulsar 集群的创建和删除、集群组件的垂直扩缩容和水平扩缩容、存储扩容、重启和配置更改等。

本系列文档重点展示 KubeBlocks 对 Pulsar 日常运维能力的支持,包括集群创建、删除、重启等基本生命周期操作,以及水平扩容、垂直扩容、存储扩容、配置变更等高阶操作。

环境推荐

关于各组件的规格(如内存、CPU 和存储容量等),请参考 Pulsar 官方文档

组件所需副本数
zookeeper测试环境 1 个,生产环境 3 个
bookies测试环境至少 3 个,生产环境至少 4 个
broker至少 1 个,生产环境建议 3 个
recovery (可选)至少 1 个;如果 bookie 未启用 autoRecovery 功能,则至少需要 3 个
proxy (可选)至少 1 个;生产环境需要 3 个

开始之前

  • 如果您想通过 kbcli 创建和管理集群,请先安装 kbcli

  • 安装 KubeBlocks

  • 确保 Pulsar 引擎已启用。如果引擎未启用,可参考相关文档,启用该引擎

  • 查看可用于创建集群的数据库类型和版本。

    kubectl get clusterdefinition pulsar
    >
    NAME TOPOLOGIES SERVICEREFS STATUS AGE
    pulsar pulsar-basic-cluster,pulsar-enhanced-cluster Available 16m

    查看可用版本。

    kubectl get clusterversions -l clusterdefinition.kubeblocks.io/name=pulsar
    >
    NAME CLUSTER-DEFINITION STATUS AGE
    pulsar-2.11.2 pulsar Available 16m
    pulsar-3.0.2 pulsar Available 16m
  • 为了保持隔离,本文档中创建一个名为 demo 的独立命名空间。

    kubectl create namespace demo
    >
    namespace/demo created

创建 Pulsar 集群

  1. 创建基础模式的 Pulsar 集群。如需创建其他集群模式,您可查看 GitHub 仓库中的示例

    cat <<EOF | kubectl apply -f -
    apiVersion: apps.kubeblocks.io/v1
    kind: Cluster
    metadata:
    name: mycluster
    namespace: demo
    spec:
    terminationPolicy: Delete
    clusterDef: pulsar
    topology: pulsar-basic-cluster
    services:
    - name: broker-bootstrap
    serviceName: broker-bootstrap
    componentSelector: broker
    spec:
    type: ClusterIP
    ports:
    - name: pulsar
    port: 6650
    targetPort: 6650
    - name: http
    port: 80
    targetPort: 8080
    - name: kafka-client
    port: 9092
    targetPort: 9092
    - name: zookeeper
    serviceName: zookeeper
    componentSelector: zookeeper
    spec:
    type: ClusterIP
    ports:
    - name: client
    port: 2181
    targetPort: 2181
    componentSpecs:
    - name: broker
    serviceVersion: 3.0.2
    replicas: 1
    env:
    - name: KB_PULSAR_BROKER_NODEPORT
    value: "false"
    resources:
    limits:
    cpu: "1"
    memory: "512Mi"
    requests:
    cpu: "200m"
    memory: "512Mi"
    - name: bookies
    serviceVersion: 3.0.2
    replicas: 4
    resources:
    limits:
    cpu: "1"
    memory: "512Mi"
    requests:
    cpu: "200m"
    memory: "512Mi"
    volumeClaimTemplates:
    - name: ledgers
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 8Gi
    - name: journal
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 8Gi
    - name: zookeeper
    serviceVersion: 3.0.2
    replicas: 1
    resources:
    limits:
    cpu: "1"
    memory: "512Mi"
    requests:
    cpu: "100m"
    memory: "512Mi"
    volumeClaimTemplates:
    - name: data
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
    storage: 8Gi
    EOF
    字段定义
    spec.terminationPolicy集群终止策略,有效值为 DoNotTerminateDeleteWipeOut。具体定义可参考 终止策略
    spec.clusterDef指定了创建集群时要使用的 ClusterDefinition 的名称。注意请勿更新此字段。创建 Pulsar 集群时,该值必须为 pulsar
    spec.topology指定了在创建集群时要使用的 ClusterTopology 的名称。
    spec.services定义了集群暴露的额外服务列表。
    spec.componentSpecs集群 component 列表,定义了集群 components。该字段支持自定义配置集群中每个 component。
    spec.componentSpecs.serviceVersion定义了 component 部署的服务版本。有效值为 [2.11.2,3.0.2]。
    spec.componentSpecs.disableExporter定义了是否在 component 无头服务(headless service)上标注指标 exporter 信息,是否开启监控 exporter。有效值为 [true, false]。
    spec.componentSpecs.replicas定义了 component 中 replicas 的数量。
    spec.componentSpecs.resources定义了 component 的资源要求。
    spec.componentSpecs.volumeClaimTemplatesPersistentVolumeClaim 模板列表,定义 component 的存储需求。
    spec.componentSpecs.volumeClaimTemplates.name引用了在 componentDefinition.spec.runtime.containers[*].volumeMounts 中定义的 volumeMount 名称。
    spec.componentSpecs.volumeClaimTemplates.spec.storageClassName定义了 StorageClass 的名称。如果未指定,系统将默认使用带有 storageclass.kubernetes.io/is-default-class=true 注释的 StorageClass。
    spec.componentSpecs.volumeClaimTemplates.spec.resources.storage可按需配置存储容量。

    您可参考 API 文档,查看更多 API 字段及说明。

  2. 验证已创建的集群。

    kubectl get cluster mycluster -n demo

    当状态显示为 Running 时,表示集群已成功创建。