024.掌握Pod-部署MongoDB
一 前期准备
1.1 前置条件
- 集群部署:Kubernetes集群部署参考003——019。
- glusterfs-Kubernetes部署:参考《附010.Kubernetes永久存储之GlusterFS超融合部署》。
1.2 部署规划

二 创建StatefulSet
2.1 创建storageclass存储类型
1 [root@k8smaster01 ~]# vi heketi-secret.yaml #创建用于保存密码的secret
2 apiVersion: v1
3 kind: Secret
4 metadata:
5 name: heketi-secret
6 namespace: heketi
7 data:
8 # base64 encoded password. E.g.: echo -n "mypassword" | base64
9 key: YWRtaW4xMjM=
10 type: kubernetes.io/glusterfs
1 [root@k8smaster01 heketi]# kubectl create -f heketi-secret.yaml #创建heketi
2 [root@k8smaster01 heketi]# kubectl get secrets -n heketi
3 NAME TYPE DATA AGE
4 default-token-6n746 kubernetes.io/service-account-token 3 144m
5 heketi-config-secret Opaque 3 142m
6 heketi-secret kubernetes.io/glusterfs 1 3m1s
7 heketi-service-account-token-ljlkb kubernetes.io/service-account-token 3 143m
8 [root@k8smaster01 ~]# mkdir mongo
9 [root@k8smaster01 ~]# cd mongo
1 [root@k8smaster01 heketi]# vi storageclass-fast.yaml
2 apiVersion: storage.k8s.io/v1
3 kind: StorageClass
4 metadata:
5 name: fast
6 parameters:
7 resturl: "http://10.254.82.26:8080"
8 clusterid: "d96022e907f82045dcc426a752adc47c"
9 restauthenabled: "true"
10 restuser: "admin"
11 secretName: "heketi-secret"
12 secretNamespace: "default"
13 volumetype: "replicate:3"
14 provisioner: kubernetes.io/glusterfs
15 reclaimPolicy: Delete
1 [root@k8smaster01 heketi]# kubectl create -f storageclass-fast.yaml
2 [root@k8smaster01 heketi]# kubectl get storageclasses/fast

2.2 授权ServiceAccount
1 [root@uk8s-m-01 mongo]# vi defaultaccout.yaml
2 ---
3 apiVersion: rbac.authorization.k8s.io/v1beta1
4 kind: ClusterRoleBinding
5 metadata:
6 name: DDefault-Cluster-Admin
7 subjects:
8 - kind: ServiceAccount
9 # Reference to upper's `metadata.name`
10 name: default
11 # Reference to upper's `metadata.namespace`
12 namespace: default
13 roleRef:
14 kind: ClusterRole
15 name: cluster-admin
16 apiGroup: rbac.authorization.k8s.io
17
18 [root@uk8s-m-01 mongo]# kubectl apply -f defaultaccout.yaml
2.3 创建headless Service
1 [root@k8smaster01 mongo]# vi mongo-headless-service.yaml
2.4 创建StatefulSet
1 [root@k8smaster01 mongo]# vi statefulset-mongo.yaml
2 ---
3 apiVersion: v1
4 kind: Service
5 metadata:
6 name: mongo
7 labels:
8 name: mongo
9 spec:
10 ports:
11 - port: 27017
12 targetPort: 27017
13 clusterIP: None
14 selector:
15 role: mongo
16 --- #以上为headless-service
17 apiVersion: apps/v1beta1
18 kind: StatefulSet
19 metadata:
20 name: mongo
21 spec:
22 serviceName: "mongo"
23 replicas: 3
24 template:
25 metadata:
26 labels:
27 role: mongo
28 environment: test
29 spec:
30 terminationGracePeriodSeconds: 10
31 containers:
32 - name: mongo
33 image: mongo:3.4 #新版可能不支持smallfiles参数,因此指定为3.4版本
34 command:
35 - mongod
36 - "--replSet"
37 - rs0
38 - "--bind_ip"
39 - 0.0.0.0
40 - "--smallfiles" #使用较小的默认文件
41 - "--noprealloc" #禁用数据文件预分配
42 ports:
43 - containerPort: 27017
44 volumeMounts:
45 - name: mongo-persistent-storage
46 mountPath: /data/db
47 - name: mongo-sidecar
48 image: cvallance/mongo-k8s-sidecar
49 env:
50 - name: MONGO_SIDECAR_POD_LABELS
51 value: "role=mongo,environment=test"
52 - name: KUBERNETES_MONGO_SERVICE_NAME
53 value: "mongo"
54 volumeClaimTemplates:
55 - metadata:
56 name: mongo-persistent-storage
57 annotations:
58 volume.beta.kubernetes.io/storage-class: "fast"
59 spec:
60 accessModes: [ "ReadWriteOnce" ]
61 resources:
62 requests:
63 storage: 2Gi
- 该StatefulSet定义了两个容器:mingo和mongo-sidecar。mongo是主服务程序,mongo-sidecar是将多个mongo实例进行集群设置的工具。同时mongo-sidecar中设置了如下环境变量:
- MONGO_SIDECAR_POD_LABELS:设置为mongo容器的标签,用于sidecar查询它所要管理的MongoDB集群实例。
- KUBERNETES_MONGO_SERVICE_NAME:它的值为mongo,表示sidecar将使用mongo这个服务名来完成MongoDB集群的设置。
- replicas=3表示MongoDB集群由3个mongo实例组成。
- volumeClaimTemplates是StatefulSet最重要的存储设置。在annotations段设置volume.beta.kubernetes.io/storage-class="fast"表示使用名为fast的StorageClass自动为每个mongo Pod实例分配后端存储。
- resources.requests.storage=2Gi表示为每个mongo实例都分配2GiB的磁盘空间。
1 [root@k8smaster01 mongo]# kubectl create -f statefulset-mongo.yaml #创建mongo
1 [root@VPN ~]# docker pull cvallance/mongo-k8s-sidecar:latest
2 [root@VPN ~]# docker pull mongo:3.4.4
3 [root@VPN ~]# docker save -o mongo-k8s-sidecar.tar cvallance/mongo-k8s-sidecar:latest
4 [root@VPN ~]# docker save -o mongo_3_4_4.tar mongo:3.4.4
5 [root@k8snode01 ~]# docker load -i mongo-k8s-sidecar.tar
6 [root@k8snode01 ~]# docker load -i mongo.tar
7 [root@k8snode01 ~]# docker images
1 kubectl delete -f statefulset-mongo.yaml
2 kubectl delete -f mongo-headless-service.yaml
3 kubectl delete pvc -l role=mongo
三 确认验证
3.1 查看资源
1 [root@k8smaster01 mongo]# kubectl get pod -l role=mongo #查看集群pod
2 NAME READY STATUS RESTARTS AGE
3 mongo-0 2/2 Running 0 9m44s
4 mongo-1 2/2 Running 0 7m51s
5 mongo-2 2/2 Running 0 6m1s
1 [root@k8smaster01 mongo]# kubectl get pvc
1 [root@k8smaster01 mongo]# kubectl get pods mongo-0 -o yaml | grep -A 3 volumes #查看挂载

3.2 查看mongo集群
1 [root@k8smaster01 mongo]# kubectl exec -ti mongo-0 -- mongo
2 ……
3 rs0:PRIMARY> rs.status()
四 集群常见管理
4.1 MongoDB扩容
1 [root@k8smaster01 ~]# kubectl scale statefulset mongo --replicas=4 #扩容为4个
2 [root@k8smaster01 ~]# kubectl get pod -l role=mongo
3 NAME READY STATUS RESTARTS AGE
4 mongo-0 2/2 Running 0 105m
5 mongo-1 2/2 Running 0 103m
6 mongo-2 2/2 Running 0 101m
7 mongo-3 2/2 Running 0 50m
4.2 查看集群成员
1 [root@k8smaster01 mongo]# kubectl exec -ti mongo-0 -- mongo
2 ……
3 rs0:PRIMARY> rs.status()
4 ……

4.3 故障自动恢复
1 [root@k8smaster01 ~]# kubectl get pvc
2 [root@k8smaster01 ~]# kubectl delete pod mongo-0
3 [root@k8smaster01 mongo]# kubectl exec -ti mongo-0 -- mongo
4 ……
5 rs0:PRIMARY> rs.status()
6 ……
024.掌握Pod-部署MongoDB的更多相关文章
- 为首次部署MongoDB做好准备:容量计划和监控
如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...
- Mongodb 笔记09 备份、部署MongoDB
备份 1. 只有在有信心能在紧急情况下完成迅速部署的情况下,备份才是有用的.所以,无论选择了哪种备份技术,一定要对备份及恢复备份的操作进行练习,知道了然于心. 2. 通常情况下,应对副本集的非主节点( ...
- (转)为首次部署MongoDB做好准备:容量计划和监控
如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...
- (转) 线上环境部署MongoDB的官方建议
本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...
- Docker应用五:使用Dockerfile部署MongoDB
在Docker容器中部署MongoDB 不做铺垫,直接开撸: 一.软件准备: docker(已安装) MongoDB-3.2.0.tgz 二.准备配置文件mongo.conf port=27017 d ...
- 部署MongoDB复制集(副本集)
环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 10.140.0.5 (主节点) 10.1 ...
- 在Docker中安装和部署MongoDB集群
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Docker中安装mongodb 采用的mongodb镜像:https://registry.hub.doc ...
- Ubuntu下安装部署MongoDB以及设置允许远程连接
最近因为项目原因需要在阿里云服务器上部署MongoDB,操作系统为Ubuntu,网上查阅了一些资料,特此记录一下步骤. 1.运行apt-get install mongodb命令安装MongoDB服务 ...
- (转)部署MongoDB时需要注意的调参
部署MongoDB的生产服务器,给出如下相关建议: 使用虚拟化环境: 系统配置 1)推荐RAID配置 RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列 ...
随机推荐
- div设置contenteditable 的小技巧
div设置contenteditable="true",即可编辑,除从网页粘贴过来内容的格式 <div contenteditable="true" id ...
- 百万年薪python之路 -- 并发编程之 多线程 三
1. 阻塞,非阻塞,同步,异步 进程运行的三个状态: 运行,就绪,阻塞. 从执行的角度: 阻塞: 进程运行时,遇到IO了,进程挂起,CPU被切走. 非阻塞: 进程没有遇到IO 当进程遇到IO, ...
- Beetlex服务框架之Webapi版本访问控制
在应用服务中API更新是很普遍的事情,为了服务良好地运作很多时候需要新旧版本同时兼容:为了应对这一系列的需求FastHttpApi在新版中强化了Url重写机制来支持API访问版本控制,由原来固定的重写 ...
- JavaWeb 如何防止表单重复提交 - 使用Token,令牌
JavaWeb 如何防止表单重复提交 - 使用Token,令牌 说到重复提交 ,应该想到两种场景:1. 在下单,或者支付 这种情况 那么不允许 刷新,不允许后退再点击提交(后退之后提交会失败,修改了 ...
- Hadoop 在 windows 7 64位的配置(一)|非cygwin
参照原文 http://blog.csdn.net/supperman_009/article/details/39991809 环境: Hadoop-2.4.1 Windows 7 64位 jd ...
- C#控件的简单应用
listview 创建columns: ImageList imgList = new ImageList(); imgList.ImageSize = , ); FaceListview.Small ...
- fenby C语言P24
#include <stdio.h> int main(){ char cArr[]={'I','L','O','V','E','C'}; char sArr[]="ilovec ...
- 第二篇 Flask的Response三剑客及两个小儿子
一.Response三剑客 (一)Flask中的HTTPResponse @app.route("/") #app中的route装饰器 def index(): #视图函数 ret ...
- 找不到 cucumber.api.cli.Main 的报错解决方案
最近玩IDEA,发现导入的项目有问题,报了一个“找不到或者不存在cucumber.api.cli.Main”的错误. 后来发现是新版的IDEA在导入时没有提示,以至于我没有配置项目对应的Tomcat服 ...
- 微软的分布式应用框架 Dapr Helloworld
Dapr HelloWorld Dapr Distributed Application Runtime. An event-driven, portable runtime for building ...


