当前位置:首页 > 数据库 > kubernetes上安装MongoDB-3.6.5集群副本集方式

kubernetes上安装MongoDB-3.6.5集群副本集方式

2022年09月17日 13:25:19数据库6

一、安装部署:

想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错):

1、生成docker镜像:

docker build -t 144.202.127.156/library/mongodb:3.4.10 .  

docker push 144.202.127.156/library/mongodb:3.4.10     注:记得把地址换成自己的镜像仓库

kubernetes上安装MongoDB-3.6.5集群副本集方式 _ JavaClub全栈架构师技术笔记
FROM  alpine:edge
MAINTAINER chengcuichao

RUN apk update && \
   echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
   apk add --no-cache mongodb numactl numactl-tools
Dockerfile

2、在kubernete上创建:

kubectl create -f mongodb.yml

在此注意几下几点:

  1)、将为外置存储的Secret和storageclass换成自己的。   注:我用的是ceph,其他的根据自己的更改,也可以不用持久化存储,就当测试用。

  2)、镜像换成自己的镜像地址。

  3)、启动参数--replSet换成自己的,不换也可以。

kubernetes上安装MongoDB-3.6.5集群副本集方式 _ JavaClub全栈架构师技术笔记
apiVersion: v1
kind: Namespace
metadata:
  name: basic-app
---
apiVersion: v1
kind: Secret
metadata:
  namespace: basic-app
  name: ceph-secret
type: "kubernetes.io/rbd"
data:
  key: QVFEYmVRTmJZQ1B4TFJBQUg0QS9Tb01NZjF6NHB3L0p1Y3ZUQnc9PQ==
---
apiVersion: v1
kind: Secret
metadata:
  namespace: basic-app
  name: mongo-key
type: Opaque
data:
  key: UERVU0hWVU9KT1ZQVUVYT0JXWU8=
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mongodb-config
  namespace: basic-app
data:
  mongodb: |
    systemLog:
      destination: file
      path: "/var/log/mongodb/mongodb.log"
      logAppend: true
    processManagement:
      fork: false
    net:
      port: 27017
      bindIp: 0.0.0.0
    security:
      keyFile: "/etc/conf.d/secret-key/key"
      authorization: enabled
    storage:
      dbPath: /var/lib/mongodb
    setParameter:
      enableLocalhostAuthBypass: true
      authenticationMechanisms: SCRAM-SHA-1
  mongos: |
    MONGOS_EXEC="/usr/bin/mongos"
    MONGOS_RUN="/var/run/mongodb"
    MONGOS_USER="mongodb"
    MONGOS_IP="127.0.0.1"
    MONGOS_PORT="27018"
    MONGOS_CONFIGDB=""
    MONGOS_OPTIONS=""
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb
  namespace: basic-app
  labels:
    name: mongo
spec:
  clusterIP: None
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    app: mongo-cluster
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongodb
  namespace: basic-app
spec:
  serviceName: mongodb
  replicas: 3
  template:
    metadata:
      labels:
        app: mongo-cluster
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: mongod
        image: 144.202.127.156/library/mongodb:3.6.5
        command: ["sh", "-c", "chmod 600 -R /etc/conf.d/secret-key;numactl --interleave=all mongod -f /etc/conf.d/mongodb --auth --replSet icsoc"]
        resources:
          limits:
            cpu: 2
            memory: 2G
          requests:
            cpu: 1
            memory: 1G
        volumeMounts:
        - name: mongodb-data
          mountPath: /var/lib/mongodb
        - name: mongo-config
          mountPath: /etc/conf.d
        - name: timezone-config
          mountPath: /etc/localtime
        - name: secret-key
          mountPath: /etc/conf.d/
        ports:
        - containerPort: 27017
        livenessProbe:
          tcpSocket:
            port: 27017
          initialDelaySeconds: 15
          periodSeconds: 20
      volumes:
      - name: mongo-config
        configMap:
          name: mongodb-config
      - name: timezone-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: secret-key
        secret:
          secretName: mongo-key
  volumeClaimTemplates:
  - metadata:
      name: mongodb-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "ceph-db"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi
mongodb.yml

3、初始化集群:

1、连进容器内:
kubectl exec -it mongodb-0 /bin/sh

2、执行初始化副本集:
mongo
rs.initiate({_id: "icsoc", version: 1, members: [
       { _id: 0, host : "mongodb-0.mongodb.basic-app.svc.cluster.local:27017" },
       { _id: 1, host : "mongodb-1.mongodb.basic-app.svc.cluster.local:27017" },
       { _id: 2, host : "mongodb-2.mongodb.basic-app.svc.cluster.local:27017" }
 ]});

2、创建管理用户:    具体可参考:https://docs.mongodb.com/manual/tutorial/enable-authentication/
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "P@ssw0rd",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
db.auth("myUserAdmin","P@ssw0rd")

3、之后就可以连进去创建用户,赋予角色权限使用。

 二、以下记录创建详细步骤:

1、在kubenetes安装mongodb集群大体思路为:

  1)、先在一个基础的镜像里安装mongodb,启动正常后无报错。

  2)、再理清楚mogodb副本集集群是怎么启动的。

  3)、之后编写在kubernetes创建资源的文件。

  4)、先创建看看那进行不下去,再一个个解决。

2、在alpine:edge基础上编写dockerfile:

编写好的Dockerfile如下:

kubernetes上安装MongoDB-3.6.5集群副本集方式 _ JavaClub全栈架构师技术笔记
FROM  alpine:edge
MAINTAINER chengcuichao

RUN apk update && \
   echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
   apk add --no-cache mongodb numactl

COPY run.sh  /root/
RUN chmod +x /root/run.sh

CMD /root/run.sh
Dockerfile

先在docker上启动,mongo连进去后报错:

Server has startup warnings: 
2018-07-15T12:25:52.064+0800 W CONTROL  [main] --diaglog is deprecated and will be removed in a future release
2018-07-15T12:25:52.183+0800 I STORAGE  [initandlisten] 
2018-07-15T12:25:52.183+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-07-15T12:25:52.183+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem    第一个报错
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.  第二个
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] 
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] 
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2018-07-15T12:26:02.364+0800 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]  第三个
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] 
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  第四个
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] 
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-07-15T12:26:02.365+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'  第五个

  1)、第一个报错是文件系统的问题,还没解决 。

  2)、第二个报错是要开启认证,在启动参数上加入--auth就可以。

  3)、第三个报错需要在mongod命令前面加上numactl --interleave=all,在docker容器里执行numactl --interleave=all mongod -f /etc/conf.d/mongodb 在直接用docker起的容器里执行会报错:

set_mempolicy: Operation not permitted
setting interleave mask: Operation not permitted

但在statefulset的yml文件加上command: ["sh", "-c", "numactl --interleave=all mongod -f /etc/conf.d/mongodb --bind_ip 0.0.0.0"],kubectl create -f mongodb.yml创建后不会报错。

  4)、第四个和第五个报错需要执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled,echo never > /sys/kernel/mm/transparent_hugepage/defrag,

但是在容器里执行会报错,就算用initContainers来为mongodb的容器创建运行环境,但是还会报:

/bin/sh: can't create /sys/kernel/mm/transparent_hugepage/enabled: Read-only file system
/bin/sh: can't create /sys/kernel/mm/transparent_hugepage/defrag: Read-only file system

为容器增加守护脚本,以daemonset方式运行:   参考:http://pauldone.blogspot.com/2017/06/mongodb-kubernetes-production-settings.html   https://github.com/kubernetes/contrib/tree/master/startup-script

kubernetes上安装MongoDB-3.6.5集群副本集方式 _ JavaClub全栈架构师技术笔记
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  namespace: basic-app
  name: hostvm-configurer
  labels:
    app: startup-script
spec:
  template:
    metadata:
      labels:
        app: startup-script
    spec:
      hostPID: true
      containers:
      - name: hostvm-configurer-container
#        image: gcr.io/google-containers/startup-script:v1
        image: 144.202.127.156/google_containers/startup-script:v1
        securityContext:
          privileged: true
        env:
        - name: STARTUP_SCRIPT
          value: |
            #! /bin/bash
            set -o errexit
            set -o pipefail
            set -o nounset

            # Disable hugepages
            echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
            echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
config-daemonset

 

 

 

官方文档:https://docs.mongodb.com/manual/replication/

专门在k8s上安装Mongodb:http://k8smongodb.net/

作者:灬魑魅魍魉灬
来源链接:https://www.cnblogs.com/chimeiwangliang/p/9315552.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42678.html

标签: MongoDB
分享给朋友:

“kubernetes上安装MongoDB-3.6.5集群副本集方式” 的相关文章

Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 2.1.3.R...

WebFlux 集成 Thymeleaf 、 Mongodb 实践,Spring Boot 2

WebFlux 集成 Thymeleaf 、 Mongodb 实践,Spring Boot 2

这是泥瓦匠的第105篇原创 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-5-thymeleaf-mong...

Spring Batch 读 10 万条记录,写到 MongoDB

实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB 。 具体实现 1、新建 Spring Boot 应用,依赖如下: <!-- Web 应用 -->...

springboot整合mongodb changestream

前言 changestream是monggodb的3.6版本之后出现的一种基于collection(数据库集合)的变更事件流,应用程序通过db.collection.watch()这样的命令可以获得被监听对象的实时变更 想必对mysql主从复...

yum安装MongoDB

yum安装MongoDB

1.配置MongoDB的yum源 创建yum源文件: #cd /etc/yum.repos.d  #vim mongodb-org-4.0.repo  使用阿里云的源 [...

Centos 使用yum安装MongoDB 4.0

Centos 使用yum安装MongoDB 4.0

1.配置MongoDB的yum源 创建yum源文件: #cd /etc/yum.repos.d  #vim mongodb-org-4.0.repo  添加以下内容:(我们这里使用阿里云的源) [mngodb-org] nam...

Navicat for MongoDB 破解

Navicat for MongoDB 破解

Navicat for MongoDB是一款功能强大,直观的,易于使用MongoDB管理和开发的终极解决方案。Navicat for MongoDB为您提供了一个高度可用的GUI,以简化您的日常数据库任务。我们精心设...

WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)

WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)

这是泥瓦匠的第105篇原创 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-5-thymeleaf-mong...

JAVA单例MongoDB工具类

我经常对MongoDB进行一些基础操作,将这些常用操作合并到一个工具类中,方便自己开发使用。 没用Spring Data、Morphia等框架是为了减少学习、维护成本,另外自己直接JDBC方式的话可以更灵活,为自己以后的积累留一个脚印。   JAVA驱动版本...

CentOS 8.2上安装部署MongoDB 4.4

CentOS 8.2上安装部署MongoDB 4.4

目录 什么是MongoDB?: 环境规格: CentOS 8中安装MongoDB Yum存储库: CentOS 8中为MongoDB设置资源限制: 在CentOS 8上安装MongoDB数据库: C...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。