kubernetes上安装MongoDB-3.6.5集群副本集方式
一、安装部署:
想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错):
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 注:记得把地址换成自己的镜像仓库
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换成自己的,不换也可以。
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=""
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如下:
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
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/
kubernetes上安装MongoDB-3.6.5集群副本集方式的更多相关文章
- Mongodb分布式集群副本集+分片
目录 简介 1. 副本集 1.1 MongoDB选举的原理 1.2 复制过程 2. 分片技术 2.1 角色 2.2 分片的片键 2.3 片键分类 环境介绍 1.获取软件包 2.创建路由.配置.分片等的 ...
- 搭建高可用mongodb集群—— 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB& ...
- window配置mongodb集群(副本集)
参数解释: dbpath:数据存放目录 logpath:日志存放路径 pidfilepath:进程文件,有利于关闭服务 logappend:以追加的方式记录日志(boolean值) replSet:副 ...
- MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...
- MongoDB 3.4 分片集群副本集 认证
连接到router所在的MongoDB Shell 我本机端口设置在50000上 mongo --port 接下来的流程和普通数据库添加用户权限一样 db.createUser({user:&quo ...
- MongoDB集群——副本集
1. 副本集的结构及原理 副本集包括三种节点:主节点.从节点.仲裁节点.主节点负责处理客户端请求,读.写数据, 记录在其上所有操作的oplog: 从节点定期轮询主节点获取这些操作,然后对自己的数据副本 ...
- Ubuntu上安装MongoDB(译)
add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/ ...
- Linux上安装MongoDB
使用本教程使用.rpm 软件包在红帽企业Linux或CentOS Linux版本6和7上安装MongoDB Community Edition . 平台支持 本安装指南仅支持64位系统.详细信息请参见 ...
- Kubernetes上安装Metrics-Server
操作场景 metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部 ...
随机推荐
- js post
在进行html5页面的设计时,希望用户加载完成页面后,进行交互时只改变其中的某些元素的内容,这样更像本地APP的呈现效果,但是HTML中的post.get如果使用submit进行提交的话会直接使用返回 ...
- MathType怎么编辑双箭头
很多的数学相关工作者在写文章或论文的时候常常会用到数学公式编辑器.MathType就是一款深受大家欢迎的公式编辑器.很多的用户在使用过程中会用到双箭头符号来表示推理过程,但是怎么编辑又不知道,下面本教 ...
- selenium基础框架的封装(Python版)这篇帖子在百度关键词搜索的第一位了,有图为证,开心!
百度搜索结果页地址:https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=se ...
- Laravel5.1 搭建博客 --编译前端文件
上篇文章写了Gulp编译前端文件,这篇记录下在搭建博客中使用Gulp 1 引入bootstrap和js 1.1 首先先在项目本地安装Bower sudo npm install bower 1.2 创 ...
- Nuget包制作最佳解决方案
https://www.cnblogs.com/drea/p/8418717.html 最近研究ABP框架,下载其全套源码,想“据为己有”,这样添加功能或者修改源码的话就非常方便了,否则搭建项目直接用 ...
- 怎样使用DWZ?
首先说明,这篇文章不是解说DWZ内部实现原理的,也不打算分析它的源代码,这里仅仅是演示一下,怎样将DWZ框架整合到项目中去. 刚刚过去的项目中,前台UI使用的是DWZ.因为之前项目的开发环境都已经搭建 ...
- JQuery------实现鼠标点击和滑动不同效果
如图: 代码: html <ul class="price-brand-right"> @foreach (Brand item in ViewBag.Brand) { ...
- linux安装yaf(ubuntu教程)
$PHP_BIN/phpize 这个是什么 其实这个是一个扩展 apt-get install php5-dev 这样电脑会帮你自己配置了,很简单的下面我们就下载扩展包了http://pecl.php ...
- go练习1-翻转字符串
//翻转字符串 func T1_1() { str := "你好helloworld!" fmt.Println("翻转前", str) var ret str ...
- spring-boot集成swagger
1.引入swagger需要的java类库 <dependency> <groupId>io.springfox</groupId> <artifactId&g ...