1. 程式人生 > 其它 >helm 安裝 monodb 叢集

helm 安裝 monodb 叢集

目錄

資源清單

本文安裝 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