文档章节

Kubernetes集群上运行MongoDB实践(Ubuntu 18.04LTS)

openthings
 openthings
发布于 03/01 09:09
字数 1402
阅读 112
收藏 0

MongoDB可以支持裸机运行、容器运行和Kubernetes集群运行等多种方式,其中Kubernetes上可以采用yaml部署容器、Helm Chart部署和Operator等方式,运行的动态伸缩能力有所不同。我在Kubernetes上部署MongoDB采用helm chart,还是有一些问题(非授权模式部分功能无法使用),Operator还在开发之中。部署完成后,可以使用mongo shell或者mongodb compass(如下图)来进行管理。

1、裸机部署mongodb

安装 MongoDB 服务,参考:

首先,添加apt源的key:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

添加 apt source,如下:

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

安装mongdb软件,执行:

sudo apt-get update
sudo apt-get install -y mongodb-org

sudo apt install mongodb-org-tools mongodb-org-shell mongodb-server-core

设置版本保持(为固定的版本),执行:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

安装完毕。

2、启动MongoDB服务

2.1 启动服务进程

直接启动为命令行任务,执行:

mongod --port 27017 --dbpath /home/supermap/gvzr00/mongodb/mongodbx --bind_ip 10.1.1.203

作为服务,启动 mongod,执行:

sudo service mongod start

2.2 确认 MongoDB 启动成功

检查 mongod 集成成功启动,检查log 文件,位于 /var/log/mongodb/mongod.log ,是否出现:

[initandlisten] waiting for connections on port 27017

27017是独立模式下的缺省 mongod 服务端口。

你可以看到一些非致命的 mongod 警告输出信息,在初始的评估MongoDB阶段,可以安全地忽略掉这些警告信息。

2.3 停止 MongoDB服务

停止 mongod 服务,使用命令:

sudo service mongod stop

2.4 重新启动MongoDB

执行下面的命令:

sudo service mongod restart

2.5 使用MongoDB

启动 mongo shell 在与 mongod同一个主机上,运行 mongo shell,不带任何命令行参数连接到 mongod服务,缺省主机为localhost,端口27017:

mongo

使用mongo shell的更多连接参数, 如使用不同的主机和端口,参阅 The mongo Shell

MongoDB 提供了 Getting Started Guides,参阅 Getting Started 获取不同的版本信息。

3、Docker部署MongoDB

只需要一个命令即可启动MongoDB服务,具体操作和使用方法与裸机方式基本相同。如下:

$ docker run -d --name mongo --restart=always -p 27017:27017 mongo:4.1

通过compose来运行,示例 stack.yml 部署 mongo如下:

# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

4、Helm Chart部署MongoDB

使用Helm Chart可以快速部署MongoDB到Kubernetes集群中。但是,由于Helm Chart开发和MongoDB版本变化的原因,一些部署参数需要根据实际情况调整才能正常运行起来。

helm install --namespace mongodb --name mongodb ./mongo-helm

4.1 固定节点

作为服务,需要固定的IP主地址或者通过Ingress作为访问入口进行服务的重定向。作为最为简单的入门,我将其部署到固定节点,通过修改helm chart的values.yaml文件,然后更新helm部署即可。添加如下的信息:

nodeSelector: 
  kubernetes.io/hostname: podc02

4.2 存储使用

可以使用本地存储(需要固定运行的节点)或者网络存储(我这里用GlusterFS)。当然,也可以使用NSF/Ceph/iSCSI等存储系统(我没有测试过)。

  • Hostpath存储

创建本地存储卷,如下:

PV-物理卷创建yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongodb
  namespace: mongodb
spec:
  capacity:
    storage: 80Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: /home/supermap/mongodb/mongodb

PVC-卷声明创建yaml::

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mongodb
  namespace: mongodb
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 80Gi
  • GlusterFS

创建相应的卷即可,如下:

endpoint创建yaml:

apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-gvzr00
  namespace: mongodb
subsets:
- addresses:
  - ip: 10.1.1.193
  - ip: 10.1.1.234
  - ip: 10.1.1.205
  - ip: 10.1.1.112
  ports:
  - port: 10000
    protocol: TCP

pv-物理卷创建yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongodb
  namespace: mongodb
spec:
  capacity:
    storage: 800Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs-gvzr00"
    path: "gvzr00/mongodb/mongodb"
    readOnly: false

pvc-卷请求创建yaml:

 kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mongodb
  namespace: mongodb
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 800Gi

4.3 权限控制

在裸机部署下,可以按照官方文档的方式使用。

  • 缺省情况下,不需要账号密码即可访问。
  • 然后创建账号数据库,再将mongod添加 -auth参数启动,即可启用认证访问模式。

但在Kubernetes部署中,缺省部署未使用授权模式。出现的一些问题包括:

  • 但是db.tables等命令提示需要授权才能使用。
  • 对admin数据库调用createUser时也提示需要授权才能使用。
  • 因为无法创建账户数据库,因此无法启用授权模式。
  • 需要进一步调整helm chart的参数,待续。

5、Operator部署

Operator是Kubernetes的一种应用管理自定义资源。

通过Kubernetes的操作器(Operator),可以管理mongdb集群多个实例的动态运行情况。获取关于mongodb operator的信息,参考:

或者,访问最新的 https://www.operatorhub.io/ 获取版本,使用参考:

目前,该Operator还在开发之中,仅用于评估。

6、更多参考

© 著作权归作者所有

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
使用Docker和Kubernetes将MongoDB作为微服务运行

原文:Running MongoDB as a Microservice with Docker and Kubernetes 作者:Andrew Morgan 译者:徐雷 MongoDB是NoSQL排名第一的数据库,Docker是最流行的容器引擎,Kubernetes是谷歌开源的...

徐雷frank
03/16
0
0
MongoDB 4.2 正式发布,引入分布式事务

MongoDB 4.2 正式发布了,MongoDB Server 4.2 提高了现代事务和分析数据平台的技术水平。 4.2 的主要重点包括: 分布式事务将 MongoDB 的多文档 ACID 从副本集扩展到共享集群,能够为更广泛的...

afterer
08/16
11.4K
13
使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署

对于本教程,您将拥有一个Docker化Spring-Boot实例程序,该应用程序与MongoDB通信以获取GET/POST API请求,并部署在Kubernetes集群中。 前提条件 Minikube Kubectl Docker Maven Docker是一个...

Docker
01/11
0
0
入门系列之Kubernetes部署

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由林岑影 发表于云+社区专栏 容器实例服务(Container Instance Service , CIS)可以帮您在云上快捷、灵活的部署容器,让您专...

腾讯云加社区
2018/07/13
0
0
如何在 Ubuntu 上安装 MongoDB

本教程介绍了在 Ubuntu 和基于 Ubuntu 的 Linux 发行版上安装 MongoDB 的两种方法。 MongoDB 是一个越来越流行的自由开源的 NoSQL 数据库,它将数据存储在类似 JSON 的灵活文档集中,这与 SQ...

作者: Sergiu
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
168
4
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部