K8s: Helm搭建mongodb集群(1)

mongodb 集群搭建

  • mongdb 部署前 需要创建 pvc, pv 和 sc,如果在云上会自动创建
  • helm 应用中心: https://artifacthub.io

1 )Helm 安装 mongodb

A. 无本地存储配置,重启数据消失

  • 在 https://artifacthub.io/packages/helm/bitnami/mongodb?modal=install 这个界面弹出的窗口中
    • $ helm repo add bitnami https://charts.bitnami.com/bitnami
      • 这样就添加了这个源,通过 $ helm repo ls
    • $ helm install my-mongodb bitnami/mongodb --version 13.8.1
  • 上面的 helm install 命令是官网提供的最简单的,在安装的时候可以配置一些参数
    • 如:$ helm install my-mongo bitnami/mongodb --version 13.8.1 --set persistence.enabled=false,auth.rootPassword="123456_mongodb"
    • 文档:https://artifacthub.io/packages/helm/bitnami/mongodb#mongodb-parameters
    • 不同的参数,使用 , 分隔
  • 注意,低版本的 helm 的安装命令可能安装会报错,请使用 helm-v3.11.1 以上版本
  • 执行 install 命令后,会输出以下命令
    NAME: my-mongo
    LAST DEPLOYED: Wed May  1 15:32:14 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    CHART NAME: mongodb
    CHART VERSION: 13.8.1
    APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb.default.svc.cluster.localTo get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORDTo connect to your database from outside the cluster execute the following commands:kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 &mongosh --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
    
  • 上面提示中,让我们把密码设置成当前节点的环境变量
    • export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)
      • 执行上面一行写入环境变量
      • 其中这里 kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d
      • 可以看到密码是上面设置的: 123456_mongodb
    • $ printenv | grep MON 这样也可以看到环境变量中设置的密码
      MONGODB_ROOT_PASSWORD=123456_mongodb
      
  • 通过上面给的这个命令
    • $ kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image bitnami/mongodb:6.0.4-debian-11-r10 --command -- bash
      If you don't see a command prompt, try pressing enter.
      I have no name!@my-mongo-mongodb-client:/$
      
    • 这里,可以开启一个mongodb的客户端
    • 注意,这里的镜像 docker.io/bitnami/mongodb:6.0.4-debian-11-r10 需要提前pull下
    • 这个 docker.io 可能会有网络问题,参考 $ docker pull bitnami/mongodb:6.0.4-debian-11-r10
  • 通过上面的命令来进入数据库,注意这里, -p 后面基本没用,还得重新输入密码,因为安全性问题被高版本禁了
    • $ mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
    • 输入密码,这时候就已经连接进入 mongodb 数据库了,可以进行操作了
    • 注意,这个pod如果一段时间不操作,会自动退出
  • $ kubectl get all | grep my-mongo 从这里可以看出,它是一个 deployment 而不是 StatefulSets
    • 因此,它不会存储任何状态,退出后,数据就丢了
  • 从外部访问它,上面也提示了命令,进行转发
    • $ kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 --address 0.0.0.0
      Forwarding from 0.0.0.0:27017 -> 27017
      
    • 注意,如果是云上转发,安全组需要配置入站规则
    • 这时候,外部即可访问,通过node节点的ip加端口加用户名和密码
    • 当然此作为简单示例,没有接入 Ingress 网络
  • 查看 deployment $ kubectl get deployment
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    my-mongo-mongodb   1/1     1            1           3h55m
    
  • 重新部署 $ kubectl rollout restart deployment my-mongo-mongodb
    deployment.apps/my-mongo-mongodb restarted
    
  • 并且重新 port-forward 转发 $ kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 --address 0.0.0.0
  • 发现数据丢失了 …
  • 查看密码 $ kubectl get secret | grep my-mongo-mongodb
    my-mongo-mongodb                 Opaque                                1      4h9m
    my-mongo-mongodb-token-89wcr     kubernetes.io/service-account-token   3      4h9m
    
  • $ kubectl get secret my-mongo-mongodb -o yaml
    apiVersion: v1
    data:mongodb-root-password: MTIzNDU2X21vbmdvZGI=
    kind: Secret
    metadata:annotations:meta.helm.sh/release-name: my-mongometa.helm.sh/release-namespace: defaultcreationTimestamp: "2024-05-01T07:32:16Z"labels:app.kubernetes.io/component: mongodbapp.kubernetes.io/instance: my-mongoapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: mongodbhelm.sh/chart: mongodb-13.8.1name: my-mongo-mongodbnamespace: defaultresourceVersion: "307736"uid: b0ef31fe-60cc-46a3-8bc6-510692b96d8d
    type: Opaque
    
    • 可以看到,密码被base64加密了
  • 现在需要重新安装有存储的,把之前的卸载了
    • $ kubectl uninstall my-mongo
    • 这样会同步删除其他相关的附带配置, 使用 delete 是删不干净的
  • 无本地存储配置,重启数据消失

B.搭建 mongodb 有本地存储,重启数据保留

  • 在安装的时候和上述有区别, 直接安装是不会成功的,需要配置 PVC
  • persistence.size 默认是8Gi, 如果在云上可能是10的倍数
  • $ helm install my-mongo bitnami/mongodb --version 13.8.1 --set persistence.size=10Gi,auth.rootPassword="123456_mongodb"
    • 这时候会自动创建 pvc
      NAME: my-mongo
      LAST DEPLOYED: Thu May  2 08:59:53 2024
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: mongodb
      CHART VERSION: 13.8.1
      APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb.default.svc.cluster.localTo get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORDTo connect to your database from outside the cluster execute the following commands:kubectl port-forward --namespace default svc/my-mongo-mongodb 27017:27017 &mongosh --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD
      
    • 注意,这里如果在云上,会自动创建 pvc, pv, storage class, 以及云硬盘, 在本地的话,需要自己处理
    • 参考: https://blog.csdn.net/Tyro_java/article/details/138157501
  • $ kubectl get pvc 验证获取 pvc
  • 上面提示的命令,都执行以下,进行开启终端和进行连接
  • 以及参考上面无存储的进行转发处理,在外部进行客户端的连接, 以及重启后验证数据是否丢失
    • 如果在云上,端口这块,要配置安全组规则
  • 注意,uninstall 执行的时候,存储也会丢失,注意提前备份
  • 更多的配置,参考文档

2 )Helm 搭建mongodb集群

  • $ helm install my-mongo bitnami/mongodb --version 13.8.1 --set architecture="replicaset",persistence.size=10Gi,auth.rootPassword="123456_mongodb"
    • 注意, 这里添加了 architecture="replicaset", 默认值是 standalone
    • 这样就可以设置成主从数据库了
      NAME: my-mongo
      LAST DEPLOYED: Thu May  2 13:46:04 2024
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: mongodb
      CHART VERSION: 13.8.1
      APP VERSION: 6.0.4** Please be patient while the chart is being deployed **MongoDB® can be accessed on the following DNS name(s) and ports from within your cluster:my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017To get the root password run:export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mongo-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 -d)To connect to your database, create a MongoDB® client container:kubectl run --namespace default my-mongo-mongodb-client --rm --tty -i --restart='Never' --env="MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD" --image docker.io/bitnami/mongodb:6.0.4-debian-11-r10 --command -- bashThen, run the following command:mongosh admin --host "my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017,my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
      
  • $ kubectl get all
    NAME                             READY   STATUS    RESTARTS   AGE
    pod/my-mongo-mongodb-0           1/1     Running   0          2m18s
    pod/my-mongo-mongodb-arbiter-0   1/1     Running   0          2m18sNAME                                        TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)     AGE
    service/kubernetes                          ClusterIP   10.1.0.1     <none>        443/TCP     6d2h
    service/my-mongo-mongodb-arbiter-headless   ClusterIP   None         <none>        27017/TCP   2m18s
    service/my-mongo-mongodb-headless           ClusterIP   None         <none>        27017/TCP   2m18sNAME                                        READY   AGE
    statefulset.apps/my-mongo-mongodb           2/2     2m18s
    statefulset.apps/my-mongo-mongodb-arbiter   1/1     2m18s
    
    • 可以看到是 statefulset 而非 deployment
    • 这里 Arbiter永远是Arbiter,Arbiter 节点只参与投票,不能被选为 Primary,并且不从 Primary 同步数据
    • 而Primary可能退下来成为Secondary,而Secondary可能在选举期间成为Primary
  • 过一会儿 $ kubectl get po -o wide
    NAME                         READY   STATUS    RESTARTS      AGE     IP            NODE        NOMINATED NODE   READINESS GATES
    my-mongo-mongodb-0           1/1     Running   0             7m15s   10.244.1.90   node1.k8s   <none>           <none>
    my-mongo-mongodb-1           1/1     Running   0             7m05s   10.244.1.91   node1.k8s   <none>           <none>
    my-mongo-mongodb-arbiter-0   1/1     Running   0             7m15s   10.244.1.89   node1.k8s   <none>           <none>
    
    • 可以看到,现在已经有2个节点,以及一个选举节点
  • 按照上面提示给出的命令进行配置环境变量,以及客户端不再赘述
  • 要连接这个集群上面也给出了命令提示
    mongosh admin --host "my-mongo-mongodb-0.my-mongo-mongodb-headless.default.svc.cluster.local:27017,my-mongo-mongodb-1.my-mongo-mongodb-headless.default.svc.cluster.local:27017" --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD
    
    • 这里是主从的集群,有2个库,my-mongo-mongodb-0 和 my-mongo-mongodb-1
    • 如果一台挂掉,另一台还会继续提供服务
    • 如果想要连接一台,就把其中的一台给去掉
    • 选择其中之一进行连接,你就会知道,连接的是主节点还是从节点
    • 如果在从节点执行查询前,还需要设置查询的权限, 执行 $ rs.secondaryOk()
    • 关于扩容和缩容
      • 扩容 $ kubectl scale statefulset <statefulset-name> --replicas=<new-replica-count> -n <namespace>
      • 缩容 $ kubectl scale statefulset <statefulset-name> --replicas=<new-replica-count> -n <namespace>
      • 如果扩容缩容操作在云上,可以直接调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在postman上提交文件格式的数据

如何在postman上提交文件格式的数据 今天在写一个文件上传的功能接口时&#xff0c;想用postman进行提交&#xff0c;花了些时间才找到在postman提交文件格式的数据。记录一下吧&#xff01; 1.打开postman&#xff0c;选择POST提交方式&#xff0c;然后在Params那一行的Head…

数据分析--客户价值分析RFM(K-means聚类/轮廓系数)

原数据 import os import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import metrics ### 数据抽取&#xff0c;读⼊数据 df pd.read_csv("customers1997.csv") #相对路径读取数据 print(df.info()) pr…

WPF之自定义绘图

1&#xff0c;创建自定义控件类 class CustomDrawnElement:FrameworkElement{public static readonly DependencyProperty BackgroundColorProperty;static CustomDrawnElement(){FrameworkPropertyMetadata meta new FrameworkPropertyMetadata(Colors.SkyBlue);meta.Affects…

Python-------实现人生重开模拟器

人生重开模拟器 代码展示:实现思路序言一、设置初始属性1.游戏标题2.属性初始化 二、设置角色性别三、设置角色出生点四、针对每一年的岁数&#xff0c;自动生成人生经历总结 代码展示: # 人生重开模拟器 import random import sys import timeprint(------------------------…

服务器IP选择

可以去https://ip.ping0.cc/查看IP的具体情况 1.IP位置--如果是国内用&#xff0c;国外服务器的话建议选择日本&#xff0c;香港这些比较好&#xff0c;因为它们离这里近&#xff0c;一般延时低&#xff08;在没有绕一圈的情况下&#xff09;。 不过GPT的话屏蔽了香港IP 2. 企…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么&#xff1f;直观解释Transformer | 深度学习第5章 0:00 - 预测&#xff0c;采样&#xff0c;重复&#xff1a;预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层&#xff1a;…

【论文浅尝】Large Language Models for Generative Information Extraction: A Survey

本文对生成式IE的LLM进行了全面的探索。使用两种分类法对现有的代表性方法进行分类: (1)众多IE子任务的分类法&#xff0c;旨在对可以使用llm单独或统一提取的不同类型的信息进行分类; (2)学习范式分类法&#xff0c;对利用llm生成IE的各种新方法进行分类。 Preliminaries o…

msmpi 高性能计算实现文件读取输入

【高性能计算】完美解决Windows下安装mpi环境并应用到VSCode中报错问题的方法_c:\program files (x86)\microsoft sdks\mpi\include/-CSDN博客 环境配置 然后跑这个代码测试即可 // 命令行参数&#xff1a; //mpiexec -n 9 "C:\Users\ASUS\Desktop\testMPI\MPIv2.exe&qu…

【氮化镓】GaN器件可靠性及市场前景概述

文章是关于氮化镓&#xff08;GaN&#xff09;场效应晶体管&#xff08;FET&#xff09;技术在空间应用中的可靠性、辐射效应和市场前景的概述。文章由Airbus Defence & Space的多位专家撰写&#xff0c;涵盖了GaN FET技术的多个关键方面&#xff0c;包括技术概述、可靠性问…

Find My无人机|苹果Find My技术与无人机结合,智能防丢,全球定位

无人机是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机&#xff0c;或者由车载计算机完全地或间歇地自主地操作。无人机按应用领域&#xff0c;可分为军用与民用。军用方面&#xff0c;无人机分为侦察机和靶机。民用方面&#xff0c;无人机行业应用&#xff0c;是无…

opencv基础篇 ——(十二)轮廓提取与绘制

opencv基础篇 ——&#xff08;十二&#xff09;轮廓提取与绘制 findContours轮廓提取 void void findContours( InputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset Point());功能介绍 cv::findContours 是 OpenC…

【python】商业数据聚类-回归数据分析可视化(源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

ios CI/CD 持续集成 组件化专题四-(手动发布私有库-组件化搭建)

一 、创建私有索引库 1.1 、第一步 首先检查本地是否存在需要的私有索引库 pod repo list 例如&#xff1a;dp_base_ios_spec 在本地不存在该私有索引库 1.2 、第二步 在git下下创建一个新的库&#xff0c;这个库用来保存私有库的podspec文件&#xff0c;取名叫xxxSpec用以…

以更多架构核心专利,推进 SDS 产业创新创造

今天是第 24 个世界知识产权日&#xff0c;今年世界知识产权日活动的主题是&#xff1a;“知识产权和可持续发展目标&#xff1a;立足创新创造&#xff0c;构建共同未来。” 这也正是 XSKY 在软件定义存储领域的目标之一。以“数据常青”为使命的 XSKY&#xff0c;始终立足于软…

【MySQL | 第十篇】重新认识MySQL索引匹配过程

文章目录 10.重新认识MySQL索引匹配过程10.1匹配规则10.2举例&#xff1a;联合索引遇到范围查询&#xff08;>、<、between、like&#xff09;10.2.1例子一&#xff1a;>10.2.2例子二&#xff1a;>10.2.3例子三&#xff1a;between10.2.4例子四&#xff1a;like 10…

Unity SteamVR入门

概述 VR项目现在在当前已经是非常热门的技术&#xff0c;可以给玩家身临其境的感觉&#xff0c;接下来让我们学习这部分的内容吧&#xff01; SteamVR Input SteamVR绑定流程&#xff0c;在Windows窗口的点击SteamVR-input&#xff0c;图1&#xff0c;在这里可以选择你需要绑定…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作&#xff0c;今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作&#xff0c;有助于更换理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

探索AIGC技术:创新、挑战与责任

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 #如何看待AIGC技术&#xff1f; 目录 AIGC简单介绍 创新 责任 未来展望和挑战 AIGC简单介绍 A…

【Linux系统】守护进程

一.进程组&#xff0c;会话 PGID&#xff1a;进程组id&#xff0c;一条命令启动的所有进程及其子进程属于同一个进程组。一条指令中最先创建的进程就是组长&#xff0c;组id就是组长的PID。./启动的SID&#xff1a;会话id&#xff0c;每次登录Linux&#xff0c;操作系统给登录的…

vue2(4)之scoped解决样式冲突/组件通信/非父子通信/ref和$refs/异步更新/.sync/事件总线/provide和inject

vue2 一、学习目标1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09;2.组件通信3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09;4.进阶语法 二、scoped解决样式冲突**1.默认情况**&#xff1a;2.代码演示3.scoped原理4.总结 三、data必须是一个函数…