使用 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 集羣,請遵循以下步驟:
-
在 Minikube 上創建一個 Kubernetes 集羣。
minikube start --memory=8192 --cpus=4 --kubernetes-version=<k8s-version>
<k8s-version>
可以是 Minikube 安裝程序支持的任意 Kubernetes 版本 比如v1.16.1
。 -
設置
kubectl
來使用 Minikube。kubectl config use-context minikube
-
若要在 Minikube 上使用與本地 Kubernetes 集羣的 Kubernetes Dashboard,輸入以下的命令:
minikube dashboard
這條命令會自動用你的瀏覽器打開一個網頁。
步驟 1:安裝 Pulsar Helm chart
-
添加 Pulsar Helm 倉庫。
helm repo add apache https://pulsar.apache.org/charts
helm repo update
-
克隆 Pulsar Helm chart 的倉庫。
git clone https://github.com/apache/pulsar-helm-chart cd pulsar-helm-chart
-
運行腳本
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
-
使用 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
-
檢查所有 pod 的狀態。
kubectl get pods -n pulsar
如果所有 pod 都成功啓動,你會看到
STATUS
變爲Running
或Completed
。輸出
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
-
檢查命名空間
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
來創建資源,包括租戶、命名空間和主題。
-
進入
toolset
容器。kubectl exec -it -n pulsar pulsar-mini-toolset-0 -- /bin/bash
-
在
toolset
容器裏,創建一個名爲apache
的租戶。bin/pulsar-admin tenants create apache
然後你可以列出所有租戶,來查看租戶是否創建成功。
bin/pulsar-admin tenants list
你應該能看到類似如下的輸出: 租戶
apache
已經被成功地創建了。"apache" "public" "pulsar"
-
在
toolset
容器裏,在租戶apache
下創建一個名爲pulsar
的命名空間。bin/pulsar-admin namespaces create apache/pulsar
然後你可以列出租戶
apache
的所有命名空間,來查看命名空間是否創建成功。bin/pulsar-admin namespaces list apache
你應該能看到類似如下的輸出: 命名空間
apache/pulsar
已經被成功地創建了。"apache/pulsar"
-
在
toolset
容器裏,在命名空間apache/pulsar
下創建一個包含4
個分區的主題test-topic
。bin/pulsar-admin topics create-partitioned-topic apache/pulsar/test-topic -p 4
-
在
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/
然後你可以繼續如下步驟:
-
從 下載頁面 下載 Apache Pulsar tarball。
-
基於你的下載文件解壓 tarball。
tar -xf <file-name>.tar.gz
-
暴露
PULSAR_HOME
。(1) 輸入已解壓的下載文件的目錄。
(2) 將
PULSAR_HOME
暴露爲環境變量。```bash export PULSAR_HOME=$(pwd) ```
-
配置 Pulsar 客戶端。
在
${PULSAR_HOME}/conf/client.conf
文件中,用你從上面步驟中獲得的服務 URL 來替換掉webServiceUrl
與brokerServiceUrl
。 -
創建訂閱以消耗來自
apache/pulsar/test-tope
的消息。bin/pulsar-client consume -s sub apache/pulsar/test-topic -n 0
-
打開一個新的終端。 在新終端中,創建一個生產者並向
test-topic
主題發送10條消息。bin/pulsar-client produce apache/pulsar/test-topic -m "---------hello apache pulsar-------" -n 10
-
驗證結果。
-
對於生產者而言
輸出
消息已被成功生產。
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。
-
默認情況下,
Pulsar Manager
作爲一個獨立的LoadBalancer
暴露給外界。 你可以使用以下命令打開 Pulsar Manager 界面:minikube service -n pulsar pulsar-mini-pulsar-manager
-
Pulsar Manager UI 將會在你的瀏覽器中打開。 你可以使用用戶名
pulsar
和密碼pulsar
來登錄進 Pulsar Manager。 -
在 Pulsar Manager UI 中,你可以創建一個環境。
- 點擊左上角的
New Environment
按鈕。 - 在彈窗中的
Environment Name
一欄裏入pulsar-mini
。 - 在彈窗中的
Service URL
一欄裏輸入http://pulsar-mini-broker:8080
。 - 點擊彈窗中的
Confirm
按鈕。
- 點擊左上角的
-
成功創建環境後,你將被重定向到新環境的
租戶
頁面。 然後你可以使用 Pulsar Manager 來創建租戶
、命名空間
和主題
。
步驟 5:使用 Prometheus 和 Grafana 來監控集羣
Grafana 是一個開源的可視化工具,用於將時間序列數據直觀地可視化爲儀表板。
-
默認情況下, Grafana 作爲一個獨立的
LoadBalancer
暴露給外界。 你可以使用以下命令打開 Grafana 界面:minikube service pulsar-mini-grafana -n pulsar
-
Grafana UI 會在你的瀏覽器中打開。 你可以使用用戶名
pulsar
和密碼pulsar
來登錄進 Grafana儀表板。 -
你可以查看 Pulsar 集羣的不同組件的儀表板。