helm 安裝 monodb 叢集
阿新 • • 發佈:2022-05-26
目錄
1. 新增
2. 查詢
3. 拉取
4. 對本地
5. 安裝
6. 檢視部署的
7. 連線
資源清單
本文安裝
MongoDB
依賴K8S叢集
和helm
,本文不提供K8S叢集
和helm
安裝方式
使用此文件部署,需要自行解決 storageClass 問題 ( NFS, ceph, openebs等 )
軟體 | 版本 |
---|---|
chart | 12.1.11 |
mongodb | 5.0.8 |
kubernetes | v1.19.3 |
helm | v3.8.1 |
helm
安裝 MongoDB 3副本集
1. 新增 bitnami
的倉庫
$ helm repo add bitnami https://charts.bitnami.com/bitnami
2. 查詢 MongoDB
資源
$ helm repo update $ helm search repo mongodb NAME CHART VERSION APP VERSION DESCRIPTION bitnami/mongodb 12.1.11 5.0.8 MongoDB(R) is a relational open source NoSQL da... bitnami/mongodb-sharded 5.0.5 5.0.8 MongoDB(R) is an open source NoSQL database tha... bitnami/mean 6.1.2 4.6.2 DEPRECATED MEAN is a free and open-source JavaS...
3. 拉取 MongoDB chart
到本地
$ mkdir /root/mongodb && cd /root/mongodb # 拉取 chart 到本地 /root/mongodb 目錄 $ helm pull bitnami/mongodb --version 12.1.11 $ tar -xvf mongodb-12.1.11.tgz $ cp mongodb/values.yaml ./values-test.yaml # 檢視當前目錄層級 $ tree -L 2 . ├── mongodb │ ├── Chart.lock │ ├── charts │ ├── Chart.yaml │ ├── README.md │ ├── templates │ ├── values.schema.json │ └── values.yaml ├── mongodb-12.1.11.tgz └── values-test.yaml
4. 對本地 values-test.yaml
修改
- 檢視叢集
storageclasses
$ kubectl get storageclasses.storage.k8s.io
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
openebs-device openebs.io/local Delete WaitForFirstConsumer false 34d
openebs-hostpath openebs.io/local Delete WaitForFirstConsumer false 34d
openebs-jiva-default jiva.csi.openebs.io Delete Immediate true 33d
- 修改配置
$ cat values-test.yaml
## 配置檔案中定義 storageClass: "",會使用叢集配置的 openebs 提供的 storageClass,
## 使用此文件部署,需要自行解決 storageClass 問題 (ceph, nfs, 公有云提供的 nfs)
global:
# 定義 storageClass 使用的型別
storageClass: "openebs-jiva-default"
# 定義 mongodb 叢集為副本集模式
architecture: replicaset
# 啟動叢集認證功能,設定超級管理員賬戶密碼
auth:
enabled: true
rootUser: root
rootPassword: "root"
# 設定叢集數量,3個
replicaCount: 3
# 定義 pod 的 nodeSelector
nodeSelector: { "node": "middleware" }
# 啟用持久化儲存,使用 global.storageClass 自動建立 pvc
persistence:
enabled: true
size: 20Gi
5. 安裝 MongoDB 叢集
# 建立 test-middleware 名稱空間
$ kubectl create ns test-middleware
# 安裝 MongoDB 叢集
$ helm -n test-middleware install mongodb-cluster mongodb -f value-test.yaml
## helm -n NAMESAPCE install SERVER_NAME FILE_NAME -f CONFIG_FILE
-n 指定 kubernetes 叢集名稱空間
-f 指定使用的配置檔案,檔案中定義的配置可以覆蓋 mongodb/values.yaml 檔案中配置
NAME: mongodb-cluster
LAST DEPLOYED: Thu May 26 10:46:14 2022
NAMESPACE: test-middleware
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mongodb
CHART VERSION: 12.1.11
APP VERSION: 5.0.8
** Please be patient while the chart is being deployed **
MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:
mongodb-cluster-0.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017
mongodb-cluster-1.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017
mongodb-cluster-2.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017
To get the root password run:
export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace test-middleware mongodb-cluster -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
To connect to your database, create a MongoDB® client container:
kubectl run --namespace test-middleware mongodb-cluster-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:5.0.8-debian-10-r24 --command -- bash
Then, run the following command:
mongosh admin --host "mongodb-cluster-0.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-1.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-2.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
6. 檢視部署的 MongoDB
叢集
$ helm -n test-middleware list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mongodb-cluster test-middleware 1 2022-05-26 10:46:14.388002385 +0800 CST deployed mongodb-12.1.11 5.0.8
$ kubectl -n test-middleware get pods -l app.kubernetes.io/name=mongodb
NAME READY STATUS RESTARTS AGE
mongodb-cluster-0 1/1 Running 0 77m
mongodb-cluster-1 1/1 Running 0 77m
mongodb-cluster-2 1/1 Running 0 76m
mongodb-cluster-arbiter-0 1/1 Running 0 77m
- 檢視服務使用的
storageclass
# 檢視 pvc
$ kubectl -n test-middleware get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
datadir-mongodb-cluster-0 Bound pvc-d6a4c7d8-ede5-4545-8b8c-fd471025aea6 20Gi RWO nfs-dynamic-class 78m
datadir-mongodb-cluster-1 Bound pvc-0b9a6c9b-7a32-4aac-9684-21c633345537 20Gi RWO nfs-dynamic-class 77m
datadir-mongodb-cluster-2 Bound pvc-62614e7b-b20e-4ea7-973a-72213d868a6b 20Gi RWO nfs-dynamic-class 77m
# 檢視 pv
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-0b9a6c9b-7a32-4aac-9684-21c633345537 20Gi RWO Delete Bound test-middleware/datadir-mongodb-cluster-1 nfs-dynamic-class 78m
pvc-62614e7b-b20e-4ea7-973a-72213d868a6b 20Gi RWO Delete Bound test-middleware/datadir-mongodb-cluster-2 nfs-dynamic-class 78m
pvc-d6a4c7d8-ede5-4545-8b8c-fd471025aea6 20Gi RWO Delete Bound test-middleware/datadir-mongodb-cluster-0 nfs-dynamic-class 78m
7. 連線 MongoDB 叢集
驗證服務
mongosh admin --host "mongodb-cluster-0.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-1.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-2.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
# 獲取 Mongodb 叢集的密碼
$ kubectl get secret --namespace test-middleware mongodb-cluster -o jsonpath="{.data.mongodb-root-password}" | base64 --decode
root
# 啟動一個臨時容器
$ export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace test-middleware mongodb-cluster -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
$ kubectl run --namespace test-middleware mongodb-cluster-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:5.0.8-debian-10-r24 --command -- bash
## 登陸 Mongodb Cluster
$ mongosh admin --host "mongodb-cluster-0.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-1.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017,mongodb-cluster-2.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
rs0 [primary] admin> rs.conf()
{
_id: 'rs0',
version: 8,
term: 2,
members: [
{
_id: 0,
host: 'mongodb-cluster-0.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 5,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 1,
host: 'mongodb-cluster-arbiter-0.mongodb-cluster-arbiter-headless.test-middleware.svc.cluster.local:27017',
arbiterOnly: true,
buildIndexes: true,
hidden: false,
priority: 0,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 2,
host: 'mongodb-cluster-1.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 3,
host: 'mongodb-cluster-2.mongodb-cluster-headless.test-middleware.svc.cluster.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
}
],
protocolVersion: Long("1"),
writeConcernMajorityJournalDefault: true,
settings: {
chainingAllowed: true,
heartbeatIntervalMillis: 2000,
heartbeatTimeoutSecs: 10,
electionTimeoutMillis: 10000,
catchUpTimeoutMillis: -1,
catchUpTakeoverDelayMillis: 30000,
getLastErrorModes: {},
getLastErrorDefaults: { w: 1, wtimeout: 0 },
replicaSetId: ObjectId("628eea0fdd0ee8dc91a88441")
}
}
參考文件
https://artifacthub.io/packages/helm/bitnami/mongodb/12.1.11