Pulsar部署到Kubernetes

使用 Helm 將 Apache Pulsar 快速地安裝及運行在 Kubernetes 上,內容包括以下幾個部分:

  • 使用 Helm 將 Apache Pulsar 安裝在 Kubernetes 上
  • 啓動與停止 Apache Pulsar
  • 使用 pulsar-admin 創建主題
  • 使用 Pulsar 客戶端生產與消費消息
  • 通過 Prometheus 和 Grafana 來監控 Apache Pulsar 的狀態

如需將 Pulsar 集羣部署於生產用途,請參閱 如何配置與安裝 Pulsar Helm chart

前提條件

  • Kubernetes server 1.14.0+
  • kubectl 1.14.0+
  • Helm 3.0+

 

Tip

對於接下來的步驟,步驟 2 與步驟 3 適用於 開發者,步驟 4 和 步驟 5 適用於 管理員

 

步驟 0:準備一個 Kubernetes 集羣

在安裝 Pulsar Helm chart 之前,你必須創建一個 Kubernetes 集羣。 你可以按照 指示 來準備一個Kubernetes集羣。

We use Minikube in this quick start guide. 要準備一個 Kubernetes 集羣,請遵循以下步驟:

  1. 在 Minikube 上創建一個 Kubernetes 集羣。

    minikube start --memory=8192 --cpus=4 --kubernetes-version=<k8s-version>
    

    <k8s-version> 可以是 Minikube 安裝程序支持的任意 Kubernetes 版本 比如 v1.16.1

  2. 設置 kubectl 來使用 Minikube。

    kubectl config use-context minikube
    
  3. 若要在 Minikube 上使用與本地 Kubernetes 集羣的 Kubernetes Dashboard,輸入以下的命令:

    minikube dashboard
    

    這條命令會自動用你的瀏覽器打開一個網頁。

 

步驟 1:安裝 Pulsar Helm chart

  1. 添加 Pulsar Helm 倉庫。

    helm repo add apache https://pulsar.apache.org/charts
    
    helm repo update
    
  2. 克隆 Pulsar Helm chart 的倉庫。

    git clone https://github.com/apache/pulsar-helm-chart
    cd pulsar-helm-chart
    
  3. 運行腳本 prepare_helm_release.sh 來創建安裝 Apache Pulsar Helm chart 所需的 secrets。 用戶名 pulsar 與密碼 pulsar 可用於登錄 Grafana dashboard 與 Pulsar Manager。

    ./scripts/pulsar/prepare_helm_release.sh \
        -n pulsar \
        -k pulsar-mini \
        -c
    
  4. 使用 Pulsar Helm chart 來將一個 Pulsar 集羣安裝至 Kubernetes。

    NOTE
    You need to specify --set initialize=true when installing Pulsar the first time. This command installs and starts Apache Pulsar.

        helm install \
            --values examples/values-minikube.yaml \
            --set initialize=true \
            --namespace pulsar \
            pulsar-mini apache/pulsar
    
  5. 檢查所有 pod 的狀態。

    kubectl get pods -n pulsar
    

    如果所有 pod 都成功啓動,你會看到 STATUS 變爲 RunningCompleted

    輸出

    NAME                                         READY   STATUS      RESTARTS   AGE
    pulsar-mini-bookie-0                         1/1     Running     0          9m27s
    pulsar-mini-bookie-init-5gphs                0/1     Completed   0          9m27s
    pulsar-mini-broker-0                         1/1     Running     0          9m27s
    pulsar-mini-grafana-6b7bcc64c7-4tkxd         1/1     Running     0          9m27s
    pulsar-mini-prometheus-5fcf5dd84c-w8mgz      1/1     Running     0          9m27s
    pulsar-mini-proxy-0                          1/1     Running     0          9m27s
    pulsar-mini-pulsar-init-t7cqt                0/1     Completed   0          9m27s
    pulsar-mini-pulsar-manager-9bcbb4d9f-htpcs   1/1     Running     0          9m27s
    pulsar-mini-toolset-0                        1/1     Running     0          9m27s
    pulsar-mini-zookeeper-0                      1/1     Running     0          9m27s
    
  6. 檢查命名空間 pulsar 下所有服務的狀態。

    kubectl get services -n pulsar
    

    輸出

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
    pulsar-mini-bookie           ClusterIP      None             <none>        3181/TCP,8000/TCP             11m
    pulsar-mini-broker           ClusterIP      None             <none>        8080/TCP,6650/TCP             11m
    pulsar-mini-grafana          LoadBalancer   10.106.141.246   <pending>     3000:31905/TCP                11m
    pulsar-mini-prometheus       ClusterIP      None             <none>        9090/TCP                      11m
    pulsar-mini-proxy            LoadBalancer   10.97.240.109    <pending>     80:32305/TCP,6650:31816/TCP   11m
    pulsar-mini-pulsar-manager   LoadBalancer   10.103.192.175   <pending>     9527:30190/TCP                11m
    pulsar-mini-toolset          ClusterIP      None             <none>        <none>                        11m
    pulsar-mini-zookeeper        ClusterIP      None             <none>        2888/TCP,3888/TCP,2181/TCP    11m
    

 

步驟 2:使用 pulsar-admin 來創建 Pulsar 租戶/命名空間/主題

pulsar-admin 是 Pulsar 的 CLI(命令行客戶端) 工具。 這一步中,你可以使用 pulsar-admin 來創建資源,包括租戶、命名空間和主題。

  1. 進入 toolset 容器。

    kubectl exec -it -n pulsar pulsar-mini-toolset-0 -- /bin/bash
    
  2. toolset 容器裏,創建一個名爲 apache 的租戶。

    bin/pulsar-admin tenants create apache
    

    然後你可以列出所有租戶,來查看租戶是否創建成功。

    bin/pulsar-admin tenants list
    

    你應該能看到類似如下的輸出: 租戶 apache 已經被成功地創建了。

    "apache"
    "public"
    "pulsar"
    
  3. toolset 容器裏,在租戶 apache 下創建一個名爲 pulsar 的命名空間。

    bin/pulsar-admin namespaces create apache/pulsar
    

    然後你可以列出租戶 apache 的所有命名空間,來查看命名空間是否創建成功。

    bin/pulsar-admin namespaces list apache
    

    你應該能看到類似如下的輸出: 命名空間 apache/pulsar 已經被成功地創建了。

    "apache/pulsar"
    
  4. toolset 容器裏,在命名空間 apache/pulsar 下創建一個包含 4 個分區的主題 test-topic

    bin/pulsar-admin topics create-partitioned-topic apache/pulsar/test-topic -p 4
    
  5. toolset 容器裏,列出命名空間 apache/pulsar 中的所有分區主題。

    bin/pulsar-admin topics list-partitioned-topics apache/pulsar
    

    然後你可以看見命名空間 apache/pulsar 下的所有分區主題。

    "persistent://apache/pulsar/test-topic"
    

 

步驟 3:使用 Pulsar 客戶端生產和消費消息

你可以使用 Pulsar 客戶端來創建生產者與消費者並用於生產和消費消息。

默認地,Pulsar Helm chart 會通過 Kubernetes LoadBalancer 將 Pulsar 集羣暴露出來。 在 Minikube 中,你可以使用如下命令來檢查代理服務。

kubectl get services -n pulsar | grep pulsar-mini-proxy

你將看到類似如下的輸出:

pulsar-mini-proxy            LoadBalancer   10.97.240.109    <pending>     80:32305/TCP,6650:31816/TCP   28m

這個輸出顯示了 Pulsar 集羣的二進制端口 和 HTTP 端口都映射到了哪個 node 端口上。 80: 後面的端口是 HTTP 端口,而 6650: 後面的端口是二進制端口。

然後你就可以找到 IP 地址並通過運行以下命令來對外暴露你的 Minikube 服務器。

minikube service pulsar-mini-proxy -n pulsar

輸出

|-----------|-------------------|-------------|-------------------------|
| NAMESPACE |       NAME        | TARGET PORT |           URL           |
|-----------|-------------------|-------------|-------------------------|
| pulsar    | pulsar-mini-proxy | http/80     | http://172.17.0.4:32305 |
|           |                   | pulsar/6650 | http://172.17.0.4:31816 |
|-----------|-------------------|-------------|-------------------------|
🏃 pulsar-mini-proxy 服務的起始通道。
|-----------|-------------------|-------------|------------------------|
| NAMESPACE |       NAME        | TARGET PORT |          URL           |
|-----------|-------------------|-------------|------------------------|
| pulsar    | pulsar-mini-proxy |             | http://127.0.0.1:61853 |
|           |                   |             | http://127.0.0.1:61854 |
|-----------|-------------------|-------------|------------------------|

此時,你可以獲得連接到你的 Pulsar 客戶端的服務 URL。 下面是一些 URL 示例:

webServiceUrl=http://127.0.0.1:61853/
brokerServiceUrl=pulsar://127.0.0.1:61854/

然後你可以繼續如下步驟:

  1. 下載頁面 下載 Apache Pulsar tarball。

  2. 基於你的下載文件解壓 tarball。

    tar -xf <file-name>.tar.gz
    
  3. 暴露 PULSAR_HOME

    (1) 輸入已解壓的下載文件的目錄。

    (2) 將 PULSAR_HOME 暴露爲環境變量。

     ```bash
     export PULSAR_HOME=$(pwd)
     ```
    
  4. 配置 Pulsar 客戶端。

    ${PULSAR_HOME}/conf/client.conf 文件中,用你從上面步驟中獲得的服務 URL 來替換掉 webServiceUrlbrokerServiceUrl

  5. 創建訂閱以消耗來自 apache/pulsar/test-tope 的消息。

    bin/pulsar-client consume -s sub apache/pulsar/test-topic  -n 0
    
  6. 打開一個新的終端。 在新終端中,創建一個生產者並向 test-topic 主題發送10條消息。

    bin/pulsar-client produce apache/pulsar/test-topic  -m "---------hello apache pulsar-------" -n 10
    
  7. 驗證結果。

    • 對於生產者而言

      輸出

      消息已被成功生產。

      18:15:15.489 [main] INFO  org.apache.pulsar.client.cli.PulsarClientTool - 10 messages successfully produced
      
    • 對於消費者而言

      輸出

      同時,你可以收到如下的消息。

      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      ----- got message -----
      ---------hello apache pulsar-------
      

 

步驟 4:使用 Pulsar Manager 來管理集羣

Pulsar Manager 是一個基於網絡 GUI 的管理工具,用於管理和監測Pulsar。

  1. 默認情況下, Pulsar Manager 作爲一個獨立的 LoadBalancer 暴露給外界。 你可以使用以下命令打開 Pulsar Manager 界面:

    minikube service -n pulsar pulsar-mini-pulsar-manager 
    
  2. Pulsar Manager UI 將會在你的瀏覽器中打開。 你可以使用用戶名 pulsar 和密碼 pulsar 來登錄進 Pulsar Manager。

  3. 在 Pulsar Manager UI 中,你可以創建一個環境。

    • 點擊左上角的 New Environment 按鈕。
    • 在彈窗中的 Environment Name 一欄裏入 pulsar-mini
    • 在彈窗中的 Service URL 一欄裏輸入 http://pulsar-mini-broker:8080
    • 點擊彈窗中的 Confirm 按鈕。
  4. 成功創建環境後,你將被重定向到新環境的 租戶 頁面。 然後你可以使用 Pulsar Manager 來創建 租戶命名空間主題

步驟 5:使用 Prometheus 和 Grafana 來監控集羣

Grafana 是一個開源的可視化工具,用於將時間序列數據直觀地可視化爲儀表板。

  1. 默認情況下, Grafana 作爲一個獨立的 LoadBalancer 暴露給外界。 你可以使用以下命令打開 Grafana 界面:

    minikube service pulsar-mini-grafana -n pulsar
    
  2. Grafana UI 會在你的瀏覽器中打開。 你可以使用用戶名 pulsar 和密碼 pulsar 來登錄進 Grafana儀表板。

  3. 你可以查看 Pulsar 集羣的不同組件的儀表板。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章