本文件會為您展示如何使用 Minikube 設定 WhatsApp Business API 用戶端的多點連線開發人員機器安裝程序。在您開始任何此類設定程序前,請查閱我們的必要條件清單。
如要設定高可用性叢集,請跟從下列步驟:
biz
目錄whatsapp-config
密錀$VERSION
環境變數如要設定高可用性多點連線叢集,請跟從下列步驟:
biz
目錄在 WhatsApp Business API 用戶端的首選位置執行以下程式碼:
mkdir ~/biz; cd ~/biz;
將 WhatsApp-Business-API-Setup-Scripts GitHub 儲存庫安裝/kubernetes 目錄的所有配置檔案,複製至您在步驟 1建立的 ~/biz
目錄。
使用下列程式碼,以建立擁有固定磁碟區的 MySQL 資料庫:
kubectl apply -f mysql.yaml
所得的輸出結果應如下所示:
persistentvolume/mysql-volume created persistentvolumeclaim/mysql-volume-claim created service/mysql-service created deployment.extensions/mysql-deployment created
您可使用下列程式碼,以確認 MySQL 正在運作:
kubectl get pods
所得的輸出結果應如下所示:
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 53m
whatsapp-config
密鑰執行以下指令,透過 db.env
檔案建立 whatsapp-config
密鑰:
kubectl create secret generic whatsapp-config --from-env-file=db.env
所得的輸出結果應如下所示:
secret/whatsapp-config created
您可使用下列程式碼,以查看密鑰是否已成功建立:
kubectl get secrets
所得的輸出結果應如下所示:
NAME TYPE DATA AGE whatsapp-config Opaque 5 52s
您可使用下列程式碼,以查看密鑰的詳細資料:
kubectl describe secrets/whatsapp-config
所得的輸出結果應如下所示:
Name: whatsapp-config Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== wa-db-password: 8 bytes wa-db-port: 4 bytes wa-db-username: 4 bytes wa-db-engine: 5 bytes wa-db-hostname: 13 bytes
如要傳送或接收影音素材訊息,WhatsApp Business API 用戶端必須擁有網頁應用程式、主節點和核心應用程式部署共用的固定磁碟區。執行以下程式碼,為影音素材訊息建立 PersistentVolume
及 PersistentVolumeClaim
:
kubectl apply -f volume.yaml
此指令將設定一個本機影音素材磁碟區,並掛載於 Kubernetes 叢集內的 /usr/local/wamedia
(大小為 1GB),以及透過 PersistentVolumeClaim
向其要求獲取 1GB 的實體空間,以作開發和測試用途。
您可執行下列程式碼,以查看影音素材磁碟區的狀態和影音素材磁碟區聲明:
kubectl get pv media-volume kubectl get pvc media-volume-claim
$VERSION
環境變數在 webapp.yaml
、master.yaml
和 coreapp.yaml
檔案中的 containers
部分將 $VERSION
環境變數改為最新的 WhatsApp Business API 用戶端版本(如 2.23.4
)。
webapp.yaml
containers: - name: whatsapp-web image: docker.whatsapp.biz/web:v2.23.4
master.yaml
containers: - name: whatsapp-master image: docker.whatsapp.biz/coreapp:v2.23.4
coreapp.yaml
containers: - name: whatsapp-coreapp image: docker.whatsapp.biz/coreapp:v2.23.4
執行下列指令,以部署網頁應用程式、主節點和核心應用程式容器:
網頁應用程式
kubectl apply -f webapp.yaml
所得的輸出結果應如下所示:
horizontalpodautoscaler.autoscaling/whatsapp-web-autoscaler created service/whatsapp-web-service created deployment.apps/whatsapp-web-deployment created
主節點
kubectl apply -f master.yaml
所得的輸出結果應如下所示:
horizontalpodautoscaler.autoscaling/whatsapp-master-autoscaler created service/whatsapp-master-service created deployment.apps/whatsapp-master-deployment created
核心應用程式
kubectl apply -f coreapp.yaml
所得的輸出結果應如下所示:
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler created service/whatsapp-coreapp-service created deployment.apps/whatsapp-coreapp-deployment created
您可執行下列程式碼,以查看主節點/核心應用程式/網頁應用程式 pod 是否正在運作:
kubectl get pods
所得的輸出結果應如下所示:
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 53m whatsapp-coreapp-deployment-78c4d987b8-4cpz4 1/1 Running 0 2s whatsapp-coreapp-deployment-78c4d987b8-l5qjj 1/1 Running 0 2s whatsapp-master-deployment-8598d7bf6b-56fvn 1/1 Running 7 15m whatsapp-master-deployment-8598d7bf6b-9r6lc 1/1 Running 7 16m whatsapp-web-deployment-cd4c5785c-9vn6l 1/1 Running 0 16m whatsapp-web-deployment-cd4c5785c-mn7kf 1/1 Running 0 16m
預設配置將建立 2 個主節點 pod、2 個核心應用程式 pod 和 2 個網頁應用程式 pod。每個 pod 需要使用 128MB 記憶體和 0.15 個 CPU。如果您想使用不同的資源設定,請在相應 YAML 檔案中更改 spec.template.spec.containers.resources
。
如果您不想使用指令行,則可以下載並配置 Postman 焦點系列,以便與 WhatsApp Business API 互動。
使用 Minikube 執行 Kubernetes 叢集時,您需要執行下列程式碼,以查看 Kubernetes 叢集 IP:
minikube ip
使用下列程式碼,以查看網頁應用程式容器在哪個端口運作:
kubectl get services/whatsapp-web-service
所得的輸出結果應如下所示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE whatsapp-web-service NodePort 10.101.114.46 <none> 443:32477/TCP 25m
在這個範例中,網頁應用程式容器內的 443
端口會對應到 Kubernetes 叢集的 32477
端口。
使用 Postman 焦點系列時,您需要將 https://your-minikube-cluster-ip:your-webapp-service-targetport
(如 https://10.101.114.46:32477)用作 API 根網址。
登入 WhatsApp Business API 用戶端以獲取持有人驗證憑證,從而執行 API 呼叫。
您可在 WhatsApp Business API 用戶端對 health
節點使用 API 呼叫,以執行系統健康檢查,從而確認所有 pod 正常運作。
所得的輸出結果應如下所示:
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'unregistered', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
由於 WhatsApp Business API 用戶端尚未註冊,因此回應會將主要主節點容器的 gateway_status
顯示為 unregistered
的 gateway_status
。
您可對 account
節點使用 API 呼叫,以註冊 WhatsApp Business API 用戶端。
完成註冊後,在 WhatsApp Business API 用戶端對 health
節點使用 API 呼叫,以再次執行系統健康檢查,並確保其中一個核心應用程式容器的 gateway_status
為 connected
。
所得的輸出結果應如下所示:
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'disconnected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'disconnected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
備註:在高可用性模式下,只有一個核心應用程式(此範例中為 whatsapp-coreapp-deployment-78c4d987b8-4cpz4
)可以連接至 Whatsapp 伺服器;而所有其他 pod(包括主要主節點)的 gateway_status
狀態將為 disconnected
。如果 whatsapp-coreapp-deployment-78c4d987b8-4cpz4
停止運作,whatsapp-coreapp-deployment-78c4d987b8-l5qjj
便會取代它,並連接至 Whatsapp 伺服器以維持高可用性。
現在,您已成功設定處於高可用性模式的 WhatsApp Business API 用戶端。在這種模式下,任何時候都只有一個核心應用程式能夠連接至 WhatsApp 伺服器並傳送訊息。如果您想同時使用多個核心應用程式傳送訊息,從而提升訊息輸送量,請跟從下方設定高可用性多點連線叢集部分中的步驟。
使用分片端點設定 2 個分片。您將會看到狀態為 201 Created
的 HTTP 回應。
您可在 WhatsApp Business API 用戶端對 health
節點使用 API 呼叫,以執行系統健康檢查,從而確認所有 pod 正常運作。
所得的輸出結果應如下所示:
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'connected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
備註:在擁有 2 個分片的多點連線模式下,2 個核心應用程式(在此範例中為 whatsapp-coreapp-deployment-78c4d987b8-l5qjj
和 whatsapp-coreapp-deployment-78c4d987b8-4cpz4
)均可連接至 WhatsApp 伺服器,主要主節點(在此範例中為 whatsapp-master-deployment-8598d7bf6b-9r6lc
)亦會連接至該 WhatsApp 伺服器。
截至目前為止,您在此範例中擁有 2 個核心應用程式容器,而這兩個容器將共同分擔訊息負載。不過,如果其中一個核心應用程式容器停止運作,一半的訊息傳送動作將會失敗。為了在此全新多點連線設定中維持高可用性,您可以啟用第三個核心應用程式,以應付其中 1 個核心應用程式發生故障的情況。這種故障情況與多點連線簡介流程圖所示的情況類似。
如要啟用第三個核心應用程式容器,請在 coreapp.yaml
檔案中將 replicas
的數字改為 3
:
spec: replicas: 3
然後,執行下列程式碼,以重新部署核心應用程式:
kubectl apply -f coreapp.yaml
所得的輸出結果應如下所示:
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler unchanged service/whatsapp-coreapp-service unchanged deployment.apps/whatsapp-coreapp-deployment configured
對 health
節點使用 API 呼叫,再次執行系統健康檢查,以確認所有 pod 正常運作。
所得的輸出結果應如下所示:
'health': { '172.17.0.10:whatsapp-coreapp-deployment-78c4d987b8-hwqp6': { 'gateway_status': 'disconnected', 'role': 'coreapp' }, '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'connected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
新的 whatsapp-coreapp-deployment-78c4d987b8-hwqp6
容器現已用作備用容器,但目前未有連接至 WhatsApp 伺服器。如果 whatsapp-coreapp-deployment-78c4d987b8-l5qjj
或 whatsapp-coreapp-deployment-78c4d987b8-4cpz4 停止運作,
whatsapp-coreapp-deployment-78c4d987b8-hwqp6` 將會連接至 WhatsApp 伺服器,以將分片總數維持在 2 個。
$VERSION
環境變數改為新版本在 webapp.yaml
、master.yaml
和 coreapp.yaml
檔案的 containers
部分,將 $VERSION
環境變數更新為您要升級的目標版本(如 2.23.5
)。
webapp.yaml
containers: - name: whatsapp-web image: docker.whatsapp.biz/web:v2.23.5
master.yaml
containers: - name: whatsapp-master image: docker.whatsapp.biz/coreapp:v2.23.5
coreapp.yaml
containers: - name: whatsapp-coreapp image: docker.whatsapp.biz/coreapp:v2.23.5
升級網頁應用程式、主節點和核心應用程式容器,並監察推出狀態。
網頁應用程式
kubectl apply -f webapp.yaml
所得的輸出結果應如下所示:
kubectl rollout status deployments/whatsapp-web-deployment
主節點
kubectl apply -f master.yaml
所得的輸出結果應如下所示:
kubectl rollout status deployments/whatsapp-master-deployment
核心應用程式
kubectl apply -f coreapp.yaml
所得的輸出結果應如下所示:
kubectl rollout status deployments/whatsapp-coreapp-deployment
使用下列程式碼刪除部署:
kubectl delete -f webapp.yaml kubectl delete -f master.yaml kubectl delete -f coreapp.yaml kubectl delete -f mysql.yaml
使用下列程式碼刪除磁碟區:
kubectl delete -f volume.yaml
使用下列程式碼刪除密鑰:
kubectl delete secrets/whatsapp-config
如要查看所有 pod 是否正在運作,請按照下列步驟操作:
kubectl get pods
所得的輸出結果應如下所示:
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 1h whatsapp-coreapp-deployment-78c4d987b8-4cpz4 1/1 Running 2 1h whatsapp-coreapp-deployment-78c4d987b8-hwqp6 1/1 Running 0 24m whatsapp-coreapp-deployment-78c4d987b8-l5qjj 1/1 Running 2 1h whatsapp-master-deployment-8598d7bf6b-56fvn 1/1 Running 9 1h whatsapp-master-deployment-8598d7bf6b-9r6lc 1/1 Running 8 1h whatsapp-web-deployment-cd4c5785c-f99n4 1/1 Running 0 50m whatsapp-web-deployment-cd4c5785c-s5phx 1/1 Running 0 50m
如有任何 pod 尚未準備就緒(即在 READY
直欄中顯示 0/1
),您可使用 pod 名稱執行 kubectl logs
指令,以獲取該特定 pod 的記錄。
範例:
kubectl logs whatsapp-coreapp-deployment-78c4d987b8-4cpz4 > whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
然後,您可以在當前目錄的 whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
檔案中找到記錄。
如要收集特定部署服務的記錄(如網頁應用程式),請執行包含服務名稱的 kubectl logs
指令。
範例:
kubectl logs deployments/whatsapp-web-deployment > whatsapp-web-deployment.txt
然後,您可以在當前目錄的 whatsapp-web-deployment.txt
檔案中找到記錄。