MongoDB 在 Kubernetes 集群中的部署与使用指南

阅读时长 10 分钟读完

前言

近年来,Kubernetes 受到了越来越多云计算从业者的青睐。随着云原生时代的到来,越来越多的企业开始使用 Kubernetes 来管理他们的应用程序。Kubernetes 是一个容器编排平台,可以方便地将容器化应用程序部署到云上。而 MongoDB 作为一种流行且开源的 NoSQL 数据库,也非常适合在 Kubernetes 集群中进行部署和使用。

本文将介绍在 Kubernetes 集群中部署和使用 MongoDB 的详细过程,包括双活和单活架构的部署和使用。

MongoDB 在 Kubernetes 集群中的部署

基础设施要求

在开始部署 MongoDB 之前,需要明确你的 Kubernetes 环境是否满足以下要求:

  • Kubernetes v1.12 或更高版本
  • 一个工作节点(或称为 Minion)有至少 2 个 CPU 核心、8GB 内存、20GB 存储空间
  • 至少两个工作节点

双活架构的部署

创建 Kubernetes 部署描述文件

下面的 YAML 文件描述了一个在 Kubernetes 集群中创建双活 MongoDB 副本集的部署。

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ------------------
-----
  ---------
    ------------
      ---- -------
  --------- -
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
      - ----- -----
        ------ -----
        -----
          - ------------
          - --------- ---
        ------
        - -------------- -----
        -------------
        - ----- ------------------------
          ---------- --------
      --------
      - ----- ------------------------
        ---------
          ----- ---------
      -------------
        ----------------------- -----

关于文件中的一些值,我们有以下解释:

  • apiVersion:用于指定 YAML 文件使用的 Kubernetes API 版本。
  • kind:指定 YAML 文件中的部署资源种类。
  • metadata: 部署的元数据。
  • name: 部署名称。
  • selector: 用于标识与该 Deployment 相关联的 Pod。
  • matchLabels: 用于关联 Pod 的标签。
  • spec: 用于描述组成该 Deployment 的 Pod 数量、所需的存储容量、以及镜像等信息。
  • replicas: Deployment 所需的 Pod 数量。
  • template: Pod 的模板。
  • containers: 容器描述。
  • name: 容器名称。
  • image: 容器所需镜像名称。
  • args: 镜像执行时的参数。
  • ports: 暴露的端口。
  • containerPort: 容器监听的端口。
  • volumeMounts: 挂载提供的卷。
  • name: 提供的卷名称。
  • mountPath: 将容器虚拟出来的路径挂载到提供的路径下。
  • volumes: 提供的卷的列表。
  • name: 提供的卷名称。
  • hostPath: 挂载主机的路径。
  • path: 指定要挂载的数据的路径。
  • nodeSelector: 指定本次 Deployment 部署程序所要求的 worker node。

在 YAML 文件中,将 replicas 设置为 3 将创建 3 个 MongoDB Pod。这些 Pod 将运行 MongoDB 并负责数据的存储。args 选项被设置为小文件(--smallfiles)(MongoDB 省略了这个选项会启用 mmap)和复制集名称(--replSet)。

hostPath 卷是 Kubernetes 中的一种卷类型。它允许使用主机上的目录来提供存储,用于数据预加载。在 YAML 示例中,hostPath 卷将使用节点上的 /mnt/data 目录作为数据目录。

部署 MongoDB

使用 kubectl 工具执行以下命令来部署 MongoDB:

部署双活架构

一旦 Pod 开始运行,可以使用 kubectl exec 命令对每个 Pod 输入命令。在其中一个 Pod 中执行以下命令来启动具有三个节点的副本集:

执行上述命令后,MongoDB 应该自动配置副本集,并在一个 Pod 之间进行通信。

单活架构的部署

在某些情况下,部署双活副本集可能会耗费大量资源。因此,我们聚焦于部署一个单活实例,虽然它无法提供像双活实例那样的容错能力,但它提供了更好的性能和资源利用率。

创建 Kubernetes 部署描述文件

下面的 YAML 文件描述了一个在 Kubernetes 集群中创建单活 MongDB 实例的部署。

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- -------------------------
-----
  ---------
    ------------
      ---- -------
  --------- -
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
      - ----- -----
        ------ -----
        -----
          - ------------
          - -------------
          - ------
          - -------
        ------
        - -------------- -----
      --------
      - ----- ------------------------
        ---------
          ----- ---------
      -------------
        ----------------------- -----

参数说明同双活架构的描述文件。

部署 MongoDB

使用 kubectl 工具执行以下命令来部署 MongoDB:

部署单活架构

在 Pod 中执行以下命令来连接 MongoDB:

现在,您已经可以使用 MongoDB 来存储和检索数据。

MongoDB 在 Kubernetes 集群中的使用

创建 Mongo 客户端

使用 Node.js 创建一个 Mongo 客户端。此客户端将使用 Node.js MongoDB 驱动程序,该驱动程序通常称为 mongodb。以下是一个示例。

上述代码将创建一个名为 client 的新 MongoClient 对象,该对象将使用 MongoDB 的默认端口 27017 连接到本地 MongoDB 实例。这时,您可以将 client 对象传递给应用程序其它部分,以便后续使用。

连接到 MongoDB

MongoDB 驱动程序使用 connect() 方法来连接到 MongoDB 服务器。以下是一个示例:

该示例中,调用 connect() 方法,它返回一个 Promise。在 Promise 执行完成后,我们打印 Connected successfully to server

插入数据

在 MongoDB 中,可以使用 insertOne() 方法将单个文档插入集合中。以下是一个示例:

-- -------------------- ---- -------
----- --------------- - ------------ --------- -
  ----- ---------- - ---------------------------
  ---------------------- - - - -- ------------- ------- -
    ----------------- ------
    --------------- -----------------
    --------------- -------------------
    --------------------- - -------- ---- --- -------------
    -----------------
  ---
-

在该示例中,我们定义了一个 insertDocuments() 方法,该方法将使用 collection 对象将文档插入集合中。

请注意,当 Mongo 客户端使用 insertOne() 方法向集合中插入文档时,它将返回一个带有以下两个属性的对象,表示插入操作的结果:

  • result.n 插入的数量。
  • ops 包含插入的文档。

查询数据

在 MongoDB 中,可以使用 find() 方法来查询集合中的文档。如果找到匹配的文档,则将返回一个游标。以下是一个查询单个文档的示例:

-- -------------------- ---- -------
----- ------------- - ------------ --------- -
  ----- ---------- - ---------------------------
  ----------------- -- - ------------------------ ----- -
    ----------------- ------
    ------------------ --- --------- ----------
    ------------------
    ---------------
  ---
-

删除数据

使用 deleteOne() 方法可以删除单个匹配文档。以下是一个示例:

总结

本文介绍了 MongoDB 在 Kubernetes 集群中部署和使用的过程。我们覆盖了双活和单活架构的部署。我们还提供了一个示例代码,演示如何使用 MongoDB 驱动程序来连接和操作 MongoDB 数据库。在完成本文的阅读之后,您应该可以在 Kubernetes 集群中部署和使用 MongoDB 数据库。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6502680c95b1f8cacdfb3155

纠错
反馈