MongoDB Kubernetes Operator 的擴縮容流程是聲明式的,核心是修改你的 MongoDB 自定義資源 (CR) 文件並重新應用,Operator 會自動協調,使集羣狀態與你的聲明匹配。
🔧 水平與垂直擴縮容原理對比
下表對比了兩種擴縮容方式在 MongoDB 中的具體實現,幫助你快速區分:
|
特性
|
水平擴縮容 (Horizontal) |
垂直擴縮容 (Vertical) |
|
核心目標 |
增減節點/分片數量,以提升容量、冗餘或處理能力。 |
調整單個Pod的資源規格(CPU/內存),以提升或降低單節點性能。 |
|
操作對象 |
副本集的 |
Pod 模板中的 |
|
Operator動作 |
創建/刪除 StatefulSet 的 Pod,並自動將新成員加入副本集或分片集羣。
|
更新 Pod 模板,觸發 StatefulSet 對 Pod 進行滾動重啓。 |
|
服務影響 |
副本集:新成員異步同步數據,通常影響小;縮容時,Operator 會確保數據安全。 分片集羣:數據重平衡可能產生負載。 |
有狀態Pod滾動重啓:每個 Pod 重啓時會有秒級服務中斷,需應用具備重連機制。 |
|
主要耗時 |
分鐘級,主要耗時在 Pod 調度啓動、數據同步或分片數據遷移。 |
分鐘到十分鐘級,取決於 Pod 數量、重啓策略和健康檢查。 |
|
數據與存儲 |
有狀態 Pod 關聯 PVC(持久化卷聲明),縮容時通常保留 PVC(取決於回收策略),以備重新擴容時使用。 |
資源變動通常不直接影響 PVC 中已有的數據。 |
🧩 不同架構的擴縮容參數
你需要根據部署類型,在 CR 文件中修改不同的字段:
- 副本集 (ReplicaSet):
- 水平擴縮容:修改
spec.members字段。 - 垂直擴縮容:修改
spec.podSpec.podTemplate.spec.containers.resources字段。
- 分片集羣 (ShardedCluster):
- 水平擴縮容:可以分別調整以下組件數量:
spec.shardCount:分片數量。spec.mongodsPerShard:每個分片的副本集成員數。spec.mongosCount:查詢路由 (mongos) 的數量。spec.configServerCount:配置服務器的成員數。
📋 詳細操作流程
第一步:變更前準備
- 備份配置與數據:備份你的
MongoDBCR 文件。執行關鍵數據備份(可通過Ops Manager配置或mongodump命令)。 - 檢查集羣狀態:確保集羣當前健康,所有 Pod (
kubectl get pods) 和副本集狀態正常。 - 資源規劃(垂直擴容時):確保 Kubernetes 節點有足夠的 CPU/內存容納新的資源請求,避免 Pod 無法調度。
- 選擇時機:在業務低峯期操作,尤其對於涉及 Pod 滾動重啓的垂直擴縮容。
第二步:執行擴縮容操作
- 編輯自定義資源(CR)文件:修改對應字段。例如,將副本集成員從3個擴展到4個:
# 原配置
apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-replica-set
spec:
members: 3 # 修改此值
version: "8.0.0"
type: ReplicaSet
# ... 其他配置
- 應用新配置:使用
kubectl apply使變更生效。
kubectl apply -f your-mongodb-cr.yaml
第三步:監控與驗證
- 觀察協調過程:
# 觀察Pod變化
kubectl get pods -w -l app=mongodb-replicaset
# 查看Operator日誌(瞭解協調細節)
kubectl logs -f deployment/mongodb-kubernetes-operator -n <operator-namespace>
- 驗證集羣狀態:
- 所有新 Pod 應進入
Running狀態。 - 通過連接到任一
mongod實例,使用rs.status()命令檢查副本集成員數量和狀態是否正常。 - 對於分片集羣,通過
mongos連接,使用sh.status()檢查分片信息。
⚠️ 關鍵注意事項與風險控制
- 部署類型不可轉換:Operator 不支持直接將一個獨立實例轉換為副本集,或將副本集轉換為分片集羣。這需要創建新部署並遷移數據。
- 垂直擴縮容與滾動重啓:這會導致 Pod 逐個重啓。對於生產環境,務必確保:
- 應用具備自動重連和重試機制。
- 結合使用
PodDisruptionBudget來保證最小可用副本數。
- 分片集羣的負載與容量:增加
shardCount會觸發集羣內的數據塊遷移和重平衡,可能短期內增加集羣負載。規劃時應預留容量。 - Operator 版本與兼容性:確保你使用的 MongoDB Operator 版本與你指定的 MongoDB Server
spec.version兼容。從搜索結果看,請注意區分新舊 Operator 版本。 - 底層基礎設施依賴:雖然 Operator 簡化了管理,但 MongoDB 的性能和可靠性仍依賴於底層 Kubernetes 集羣的存儲、網絡和計算資源的正確配置與穩定性。
希望這份針對 MongoDB 的詳細流程能幫助你安全地進行擴縮容操作。如果你能提供你正在使用的 MongoDB CR 示例片段 或 具體想調整的組件(例如是調整副本集成員數,還是想為 mongod 容器增加 CPU),我可以為你提供更具體的配置建議。