本主題將說明如何水平和垂直擴充 Cassandra,以及如何縮減 Cassandra。
水平擴充 Cassandra
如要水平擴充 Cassandra
- 擴充 Cassandra 前,請視需要確認
apigee-data節點集區有額外容量。另請參閱「設定專屬節點集區」。 - 在覆寫檔案中設定
cassandra.replicaCount設定屬性的值。如要瞭解這項屬性,請參閱設定屬性參考資料。另請參閱「管理執行階段層元件」。 - 請套用變更,例如:
$APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml
垂直調度 Cassandra 資源
本節說明如何垂直調度 Cassandra Pod 的資源,以因應更高的 CPU 和記憶體需求。
總覽
對於 Apigee Hybrid 實際工作環境部署作業,建議您至少建立兩個獨立的節點集區:一個用於有狀態服務 (Cassandra),另一個用於無狀態 (執行階段) 服務。例如,請參閱 GKE 實際工作環境叢集需求。
對於具備狀態的 Cassandra 節點集區,建議先從 8 個 CPU 核心和 30 GB 的記憶體開始。節點集區佈建完成後,即無法變更這些設定。 另請參閱「為實際工作環境設定 Cassandra」。
如要擴充 Cassandra Pod,以因應更高的 CPU 和記憶體需求,請按照本主題所述步驟操作。
調度 Cassandra pod 的資源
如要增加 Cassandra 使用的有狀態節點集區的 CPU 和記憶體,請按照下列步驟操作:
- 按照 Kubernetes 平台的說明,在叢集中新增節點集區。支援的平台列於安裝操作說明。
- 確認新節點集區已準備就緒:
kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE
範例指令:
kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new
輸出範例:
NAME STATUS ROLES AGE VERSION gke-apigee-data-new-441387c2-2h5n Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-6941 Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-nhgc Ready <none> 4m29s v1.14.10-gke.17
- 更新覆寫檔案,將新的節點集區用於 Cassandra,並將 Pod 資源更新為您想使用的 CPU 數量和記憶體大小。舉例來說,如果是 GKE 叢集,請使用類似下列的設定。
如果您使用其他 Kubernetes 平台,請視情況調整
apigeeData.key值:nodeSelector: requiredForScheduling: true apigeeData: key: "NODE_POOL_LABEL_NAME" value: "NODE_POOL_LABEL_VALUE" cassandra: resources: requests: cpu: NODE_POOL_CPU_NUMBER memory: NODE_POOL_MEMORY_SIZE例如:
nodeSelector: requiredForScheduling: true apigeeData: key: "cloud.google.com/gke-nodepool" value: "apigee-data-new" cassandra: resources: requests: cpu: 14 memory: 16Gi - 將覆寫檔案套用至叢集:
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
完成這些步驟後,Cassandra Pod 就會開始轉移至新的節點集區。
縮減 Cassandra 規模
Apigee Hybrid 會使用一組 Cassandra 節點做為 StatefulSet。Cassandra 會在執行階段層為特定 Apigee 實體提供永久儲存空間。如要進一步瞭解 Cassandra,請參閱「關於執行階段平面」。
Cassandra 是耗用大量資源的服務,不應部署在含有任何其他混合式服務的 Pod 上。視負載而定,您可能需要縮減叢集中的環狀 Cassandra 節點數量。
縮減 Cassandra 環的一般程序如下:
- 停用一個 Cassandra 節點。
- 更新
overrides.yaml中的cassandra.replicaCount屬性。 - 套用設定更新。
- 針對要移除的每個節點重複執行這些步驟。
- 視叢集設定而定,刪除永久磁碟區要求或磁碟區。
注意事項
- 請一次對一個節點執行這項工作,再繼續下一個節點。
- 如果除了要停用的節點以外,還有其他節點健康狀態不佳,請勿繼續操作。Kubernetes 將無法縮減叢集中的 Pod 數量。
- 請務必以三節點為單位縮減或擴增。
必要條件
縮減環中 Cassandra 節點數量前,請先驗證叢集是否正常運作,以及所有節點是否已啟動並執行,如下例所示:
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 16m apigee-cassandra-default-4 1/1 Running 0 14m apigee-cassandra-default-5 1/1 Running 0 13m
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 690.17 KiB 256 48.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 700.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 144.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 767.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 193.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 132.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
停用 Cassandra 節點
-
使用 nodetool 指令,從叢集中停用 Cassandra 節點。
kubectl -n yourNamespace exec -it nodeName nodetool decommission
舉例來說,這個指令會停用
apigee-cassandra-5,也就是名稱中數字值最大的節點:kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
- 等待停用程序完成,並確認叢集現在少了一個節點。例如:
kubectl -n yourNamespace exec -it nodeName nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.1.11 777.11 KiB 256 58.9% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 143.23 KiB 256 58.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
- 在
overrides.yaml檔案中更新或新增cassandra.replicaCount屬性。舉例來說,如果目前的節點數為 6,請將其變更為 5:cassandra: replicaCount: 5 # (n-1 5 in this example)
- 將設定變更套用至叢集:
./apigeectl apply --datastore namespace/apigee unchanged secret/ssl-cassandra unchanged storageclass.storage.k8s.io/apigee-gcepd unchanged service/apigee-cassandra unchanged statefulset.apps/apigee-cassandra configured
- 確認所有其餘 Cassandra 節點正在執行:
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 3h apigee-cassandra-default-1 1/1 Running 0 3h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 25m apigee-cassandra-default-4 1/1 Running 0 24m
- 針對要停用的每個節點,重複執行步驟 1 到 5。
- 節點停用完成後,請確認
cassandra.replicaCount值等於nodetool status指令傳回的節點數量。舉例來說,如果將 Cassandra 縮減為三個節點:
kubectl -n yourNamespace exec -it apigee-cassandra-default-0 nodetool status Datacenter: us-east1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.16.2.6 710.37 KiB 256 59.0% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 720.97 KiB 256 61.3% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 UN 10.16.5.13 209.23 KiB 256 62.2% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1
- 縮減 Cassandra 叢集後,請務必刪除 PVC (PersistentVolumeClaim),確保下次擴增事件不會使用相同的 PersistentVolume 和先前建立的資料。
取得 PVC 的名稱:
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-5 Bound pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
在本例中,下列 PVC 對應於三個已淘汰的節點:
cassandra-data-apigee-cassandra-5cassandra-data-apigee-cassandra-4cassandra-data-apigee-cassandra-3
-
刪除 PVC:
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5 persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-4 persistentvolumeclaim "cassandra-data-apigee-cassandra-4" deletedkubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-3 persistentvolumeclaim "cassandra-data-apigee-cassandra-3" deleted -
確認 PVC 已刪除:
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
- 如果您使用 Anthos 安裝,請按照相同順序,從 Anthos Kubernetes 叢集刪除永久磁碟區。
取得永久磁碟區的名稱:
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-4 apigee-gcepd 5h pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-5 apigee-gcepd 5h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-3 apigee-gcepd 5h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h
在本範例中,下列磁碟區對應於三個已停用的節點:
- 5:
pvc-354afa95-81a3-11e9-8862-42010a8e014a - 4:
pvc-0675a0ff-81a3-11e9-8862-42010a8e014a - 3:
pvc-d29ba265-81a2-11e9-8862-42010a8e014a
- 5:
-
刪除永久磁碟區:
kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a
kubectl -n yourNamespace delete pv pvc-0675a0ff-81a3-11e9-8862-42010a8e014akubectl -n yourNamespace delete pv pvc-d29ba265-81a2-11e9-8862-42010a8e014a -
確認永久磁碟區已刪除:
kubectl get pv -n youNamespace NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-1 apigee-gcepd 7h pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-2 apigee-gcepd 7h pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO Delete Bound apigee/cassandra-data-apigee-cassandra-default-0 apigee-gcepd 7h