Appearance
MongoDB Helm 部署
使用 Bitnami Helm Chart 在 Kubernetes 上部署 MongoDB,支援 Standalone 與 ReplicaSet 兩種架構,搭配 Azure Internal LoadBalancer 提供內網存取。
概述
在 Kubernetes 中部署 MongoDB,Bitnami 提供的 Helm Chart 是最廣泛使用的方案之一。它封裝了 MongoDB 的部署複雜度,透過 values.yaml 即可宣告式地配置架構模式、認證、持久化儲存與網路暴露方式。
本文記錄使用 Bitnami MongoDB Chart(版本 16.5.33)的兩種部署架構:適合開發測試的 Standalone 模式,以及適合生產環境的 ReplicaSet 模式。兩者均搭配 Azure Internal LoadBalancer 提供內網固定 IP 存取。
核心內容
Helm 基本操作
部署 MongoDB 的標準流程是:新增 Bitnami Helm Repository、更新索引、然後以自訂的 values.yaml 安裝:
bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install replica-mongodb bitnami/mongodb \
--namespace mongodb \
-f replica-values.yamlStandalone 架構
Standalone 是最簡單的單節點部署模式,適合開發、測試或資料量不大的場景。
核心設定要點:
- 架構設為
standalone,停用 Arbiter - 持久化使用
managed-csiStorageClass,配置 8Gi 磁碟空間 - Service 類型為 LoadBalancer,透過 Azure 註解綁定內部固定 IP
- 資源請求 Memory 1Gi / CPU 250m
存取方式: 內網客戶端透過 LoadBalancer 分配的固定 IP 直接連線 MongoDB,連線字串格式為 mongodb://<user>:<password>@<LB-IP>:27017。
ReplicaSet 架構
ReplicaSet 模式部署 3 個副本(1 Primary + 2 Secondary),提供高可用性與讀取擴展能力,適合生產環境。
核心設定要點:
- 架構設為
replicaset,副本數 3,停用 Arbiter - 持久化配置 10Gi 磁碟空間(較 Standalone 更大)
- 必須啟用
externalAccess並使用autoDiscovery,讓每個副本自動產生獨立的 LoadBalancer Service - 需建立 ServiceAccount 並啟用 RBAC,以便 Chart 能自動發現各副本的外部 IP
為何需要 External Access: 這是 ReplicaSet 部署的一個重要陷阱。MongoDB 客戶端在連線 ReplicaSet 時,會嘗試連線到 Primary 回報的所有成員位址。若未啟用 externalAccess,成員之間僅有叢集內部 DNS 名稱,外部客戶端無法解析這些名稱,導致連線失敗。啟用 externalAccess + autoDiscovery 後,每個副本都會獲得獨立的 LoadBalancer IP,客戶端便能正確連線到所有成員。
兩種架構比較
| 面向 | Standalone | ReplicaSet |
|---|---|---|
| 節點數 | 1 | 3 |
| 高可用 | 否 | 是(自動故障轉移) |
| 磁碟空間 | 8Gi | 10Gi(每節點) |
| External Access | 單一 LoadBalancer | 每節點獨立 LoadBalancer |
| RBAC 需求 | 無 | 需要(autoDiscovery) |
| 適用場景 | 開發 / 測試 | 生產環境 |
測試連線
部署完成後,可建立一個臨時的 Client Pod 進行連線測試:
bash
kubectl run --namespace mongodb replica-mongodb-client \
--restart='Never' \
--env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" \
--image docker.io/bitnami/mongodb:8.0.12-debian-12-r0 \
--command -- tail -f /dev/null進入 Pod 後使用 mongosh 連線至 MongoDB 進行驗證。
關鍵要點
- Bitnami Helm Chart 大幅簡化 MongoDB 在 Kubernetes 上的部署與管理
- ReplicaSet 模式必須啟用 externalAccess + autoDiscovery,否則外部客戶端無法正確連線所有成員
- 兩種架構均使用 Azure Internal LoadBalancer 提供內網固定 IP 存取
- 持久化儲存使用
managed-csiStorageClass,確保資料不隨 Pod 刪除而遺失 - 生產環境建議使用 ReplicaSet 以獲得高可用性與自動故障轉移能力
實際應用
MongoDB 在 Kubernetes 上的部署常見於微服務架構中,作為應用程式的文件型資料庫。Standalone 模式適合快速搭建開發環境,ReplicaSet 模式則為生產服務提供資料冗餘與高可用保障。搭配 Prometheus Exporter 部署模式 可進一步監控資料庫的運行狀態。
部署設定參考
以下為實際部署時使用的完整設定,供日後查詢與複製使用。
Helm 操作指令
bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install replica-mongodb bitnami/mongodb \
--namespace mongodb \
-f replica-values.yamlStandalone — values.yaml
yaml
auth:
enabled: true
rootUser: superuser
rootPassword: SI5YI1DLSk8m9S
architecture: standalone
persistence:
enabled: true
storageClass: "managed-csi"
size: 8Gi
arbiter:
enabled: false
resources:
requests:
memory: 1Gi
cpu: 250m
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-load-balancer-ipv4: "10.244.196.16"| 項目 | 值 |
|---|---|
| 架構 | standalone |
| root 帳號 | superuser |
| root 密碼 | SI5YI1DLSk8m9S |
| 儲存類別 | managed-csi |
| 磁碟大小 | 8Gi |
| Service 類型 | LoadBalancer(Azure 內部) |
| 指定內部 IP | 10.244.196.16 |
ReplicaSet — values.yaml
yaml
architecture: replicaset
replicaCount: 3
arbiter:
enabled: false
auth:
enabled: true
rootUser: admin
rootPassword: ur50wGUazXCrjZ
externalAccess:
enabled: true
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
autoDiscovery:
enabled: true
serviceAccount:
create: true
automountServiceAccountToken: true
rbac:
create: true
resources:
requests:
memory: "1Gi"
cpu: "250m"
persistence:
enabled: true
size: 10Gi| 項目 | 值 |
|---|---|
| 架構 | replicaset |
| 副本數 | 3 |
| Arbiter | 停用 |
| root 帳號 | admin |
| root 密碼 | ur50wGUazXCrjZ |
| 磁碟大小 | 10Gi |
| External Access | 啟用(LoadBalancer + autoDiscovery) |
測試用 Client Pod
bash
kubectl run --namespace mongodb replica-mongodb-client \
--restart='Never' \
--env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" \
--image docker.io/bitnami/mongodb:8.0.12-debian-12-r0 \
--command -- tail -f /dev/null相關概念
- Prometheus Exporter 部署模式 — 可部署 MongoDB Exporter 監控資料庫指標
- Squid Proxy(Kubernetes 部署) — 同樣使用 Azure Internal LoadBalancer 的 Kubernetes 服務
- MariaDB Helm 部署(Kubernetes) — 同為 Bitnami Helm Chart 部署的資料庫,可對照 Standalone / 高可用架構的選擇
- PgBouncer 連線池(Kubernetes 部署) — 同為資料庫基礎設施的 K8s 部署方案