廖勇 發表於 2022-5-26 13:48:00

helm 安装 MongoDB 集群

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>资源清单</li><li><code>helm</code> 安装 <code>MongoDB 3副本集</code><ul><li>1. 添加 <code>bitnami</code> 的仓库</li><li>2. 查询 <code>MongoDB</code> 资源</li><li>3. 拉取 <code>MongoDB chart</code> 到本地</li><li>4. 对本地 <code>values-test.yaml</code> 修改</li><li>5. 安装 <code>MongoDB 集群</code></li><li>6.查看部署的 <code>MongoDB</code> 集群</li><li>7. 连接 <code>MongoDB 集群</code> 验证服务</li></ul></li><li>参考文档</li></ul></div><p></p>
<h2 id="资源清单">资源清单</h2>
<blockquote>
<p>本文安装 <code>MongoDB</code> 依赖 <code>K8S集群</code> 和 <code>helm</code> ,本文不提供 <code>K8S集群</code> 和 <code>helm</code> 安装方式</p>
</blockquote>
<blockquote>
<p>使用此文档部署,需要自行解决 storageClass 问题 ( NFS, ceph, openebs等 )</p>
</blockquote>
<table>
<thead>
<tr>
<th>软件</th>
<th>版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>chart</td>
<td>12.1.11</td>
</tr>
<tr>
<td>mongodb</td>
<td>5.0.8</td>
</tr>
<tr>
<td>kubernetes</td>
<td>v1.19.3</td>
</tr>
<tr>
<td>helm</td>
<td>v3.8.1</td>
</tr>
</tbody>
</table>
<h2 id="helm-安装-mongodb-3副本集"><code>helm</code> 安装 <code>MongoDB 3副本集</code></h2>
<h3 id="1-添加-bitnami-的仓库">1. 添加 <code>bitnami</code> 的仓库</h3>
<pre><code class="language-shell">$ helm repo add bitnami https://charts.bitnami.com/bitnami
</code></pre>
<h3 id="2-查询-mongodb-资源">2. 查询 <code>MongoDB</code> 资源</h3>
<pre><code class="language-shell">$ 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...
</code></pre>
<h3 id="3-拉取-mongodb-chart-到本地">3. 拉取 <code>MongoDB chart</code> 到本地</h3>
<pre><code class="language-shell">$ mkdir /root/mongodb &amp;&amp; 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
│&nbsp;&nbsp; ├── Chart.lock
│&nbsp;&nbsp; ├── charts
│&nbsp;&nbsp; ├── Chart.yaml
│&nbsp;&nbsp; ├── README.md
│&nbsp;&nbsp; ├── templates
│&nbsp;&nbsp; ├── values.schema.json
│&nbsp;&nbsp; └── values.yaml
├── mongodb-12.1.11.tgz
└── values-test.yaml
</code></pre>
<h3 id="4-对本地-values-testyaml-修改">4. 对本地 <code>values-test.yaml</code> 修改</h3>
<ul>
<li>查看集群 <code>storageclasses</code></li>
</ul>
<pre><code class="language-shell">$ 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
</code></pre>
<ul>
<li>修改配置</li>
</ul>
<pre><code class="language-shell">$ 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
</code></pre>
<h3 id="5-安装-mongodb-集群">5. 安装 <code>MongoDB 集群</code></h3>
<pre><code class="language-shell"># 创建 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&amp;reg; 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&amp;reg; 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
</code></pre>
<h3 id="6--查看部署的-mongodb-集群">6.查看部署的 <code>MongoDB</code> 集群</h3>
<pre><code class="language-shell">$ 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
</code></pre>
<ul>
<li>查看服务使用的 <code>storageclass</code></li>
</ul>
<pre><code class="language-shell"># 查看 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
</code></pre>
<h3 id="7-连接-mongodb-集群-验证服务">7. 连接 <code>MongoDB 集群</code> 验证服务</h3>
<pre><code>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 admin&gt; 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")
}
}
</code></pre>
<h2 id="参考文档">参考文档</h2>
<pre><code>https://artifacthub.io/packages/helm/bitnami/mongodb/12.1.11
</code></pre><br><br>
来源:https://www.cnblogs.com/evescn/p/16313215.html
頁: [1]
查看完整版本: helm 安装 MongoDB 集群