開發人員設定:在 Minikube 建立多點連線

本文件會為您展示如何使用 Minikube 設定 WhatsApp Business API 用戶端的多點連線開發人員機器安裝程序。在您開始任何此類設定程序前,請查閱我們的必要條件清單

如要設定高可用性叢集,請跟從下列步驟:

  1. 為設定指令碼建立 biz 目錄
  2. 獲取 WhatsApp Business API 用戶端配置檔案
  3. 建立 MySQL 資料庫
  4. 建立 whatsapp-config 密錀
  5. 建立本機影音素材磁碟區
  6. 設定 $VERSION 環境變數
  7. 部署容器
  8. 尋找網頁應用程式容器端口
  9. 獲取驗證憑證
  10. 執行系統健康檢查
  11. 註冊 WhatsApp Business API 用戶端
  12. 執行第二次系統健康檢查

如要設定高可用性多點連線叢集,請跟從下列步驟:

  1. 設定 2 個分片
  2. 執行系統健康檢查
  3. 啟動第三個核心應用程式以維持高可用性
  4. 執行第二次系統健康檢查

完全設定好實例後,您可以選擇升級實例。如要解除安裝用戶端,請按照這些步驟操作。

準備工作

您將需要以下項目:

  • 使用 minikube 於本機設定的 Kubernetes 叢集
  • kubectl 指令行工具
  • 在開發環境中於本機設定的測試帳戶
    • 用於快速開發和測試新版本。

我們亦強烈建議您詳閱可用性和規模化指南,以進一步了解高可用性與多點連線。

高可用性叢集的設定

步驟 1:為設定指令碼建立 biz 目錄

在 WhatsApp Business API 用戶端的首選位置執行以下程式碼:

mkdir ~/biz; cd ~/biz;

步驟 2:獲取 WhatsApp Business API 用戶端配置檔案

WhatsApp-Business-API-Setup-Scripts GitHub 儲存庫安裝/kubernetes 目錄的所有配置檔案,複製至您在步驟 1建立的 ~/biz 目錄。

步驟 3:建立 MySQL 資料庫

使用下列程式碼,以建立擁有固定磁碟區的 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

步驟 4:建立 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

步驟 5:建立本機影音素材磁碟區

如要傳送或接收影音素材訊息,WhatsApp Business API 用戶端必須擁有網頁應用程式、主節點和核心應用程式部署共用的固定磁碟區。執行以下程式碼,為影音素材訊息建立 PersistentVolumePersistentVolumeClaim

kubectl apply -f volume.yaml

此指令將設定一個本機影音素材磁碟區,並掛載於 Kubernetes 叢集內的 /usr/local/wamedia(大小為 1GB),以及透過 PersistentVolumeClaim 向其要求獲取 1GB 的實體空間,以作開發和測試用途。

您可執行下列程式碼,以查看影音素材磁碟區的狀態和影音素材磁碟區聲明:

kubectl get pv media-volume

kubectl get pvc media-volume-claim

步驟 6:設定 $VERSION 環境變數

webapp.yamlmaster.yamlcoreapp.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

步驟 7:部署容器

執行下列指令,以部署網頁應用程式、主節點和核心應用程式容器:

網頁應用程式

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

步驟 8:尋找網頁應用程式容器端口

如果您不想使用指令行,則可以下載並配置 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 根網址。

步驟 9:獲取驗證憑證

登入 WhatsApp Business API 用戶端以獲取持有人驗證憑證,從而執行 API 呼叫。

步驟 10:執行系統健康檢查

您可在 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 顯示為 unregisteredgateway_status

步驟 11:註冊 WhatsApp Business API 用戶端

您可對 account 節點使用 API 呼叫,以註冊 WhatsApp Business API 用戶端。

步驟 12:執行第二次系統健康檢查

完成註冊後,在 WhatsApp Business API 用戶端對 health 節點使用 API 呼叫,以再次執行系統健康檢查,並確保其中一個核心應用程式容器的 gateway_statusconnected

所得的輸出結果應如下所示:

'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 伺服器並傳送訊息。如果您想同時使用多個核心應用程式傳送訊息,從而提升訊息輸送量,請跟從下方設定高可用性多點連線叢集部分中的步驟。

設定高可用性多點連線叢集

步驟 1:設定兩個分片

使用分片端點設定 2 個分片。您將會看到狀態為 201 Created 的 HTTP 回應。

步驟 2:執行系統健康檢查

您可在 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-l5qjjwhatsapp-coreapp-deployment-78c4d987b8-4cpz4)均可連接至 WhatsApp 伺服器,主要主節點(在此範例中為 whatsapp-master-deployment-8598d7bf6b-9r6lc)亦會連接至該 WhatsApp 伺服器。

步驟 3:啟動第三個核心應用程式以維持高可用性

截至目前為止,您在此範例中擁有 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

步驟 4:執行第二次系統健康檢查

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 個。

升級 WhatsApp Business API 用戶端

升級期間會出現停機情況。

我們強烈建議您在升級前備份目前的應用程式設定,以確保您之後可以快速恢復運作。請跟從備份和還原文件部分的指示操作。

我們建議您在最不繁忙的時段執行升級動作。

步驟 1:將 $VERSION 環境變數改為新版本

webapp.yamlmaster.yamlcoreapp.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

步驟 2:升級容器

升級網頁應用程式、主節點和核心應用程式容器,並監察推出狀態。

網頁應用程式

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

解除安裝 WhatsApp Business API 用戶端

步驟 1:刪除部署

使用下列程式碼刪除部署:

kubectl delete -f webapp.yaml
kubectl delete -f master.yaml
kubectl delete -f coreapp.yaml
kubectl delete -f mysql.yaml

步驟 2:刪除磁碟區

使用下列程式碼刪除磁碟區:

kubectl delete -f volume.yaml

步驟 3:刪除密鑰

使用下列程式碼刪除密鑰:

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 檔案中找到記錄。


此軟件使用根據 LGPLv2.1 授權的 FFmpeg 程式碼,您可在此處下載其原始碼。