06.持久化存储

6.持久化存储

pv: persistent volume 全局的资源 pv,node
pvc: persistent volume claim 局部的资源(namespace)pod,rc,svc

6.1:安装nfs服务端(192.168.111.11)

yum install nfs-utils.x86_64 -y
mkdir /data
vim /etc/exports
/data  192.168.111.0/24(rw,async,no_root_squash,no_all_squash)
systemctl start rpcbind
systemctl start nfs

6.2:在node节点安装nfs客户端

yum install nfs-utils.x86_64 -y
showmount -e 192.168.111.11

6.3:创建pv和pvc

上传yaml配置文件,创建pv

vi mysql_pv.yaml
aapiVersion: v1
kind: PersistentVolume
metadata:name: tomcat-mysqllabels:type: nfs001
spec:capacity:storage: 10GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Recyclenfs:path: "/data/tomcat-mysql"server: 192.168.111.11readOnly: false

创建pvc

vi mysql_pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: tomcat-mysql
spec:accessModes:- ReadWriteManyresources:requests:storage: 1Gi

6.4:创建mysql-rc,pod模板里使用volume

#vim mysql-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:name: mysql
spec:replicas: 1selector:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: 192.168.111.11:5000/mysql:5.7ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: '123456'volumeMounts:     #容器里挂载的数据库目录- name: mysqlmountPath: /var/lib/mysqlvolumes:                #宿主机的挂载目录- name: mysqlpersistentVolumeClaim:claimName: tomcat-mysql

前提要在/data目下创建一个目录/tomcat-mysql,根据上面的rc进行创建,要不然无法进行挂载;

mkdir /data/tomcat-mysql/

6.5: 验证持久化

验证方法1:删除mysql的pod,数据库不丢

kubectl delete pod mysql-2wqlb

在这里插入图片描述

验证方法2:查看nfs服务端,是否有mysql的数据文件

6.6: 分布式存储glusterfs

主机名ip地址环境
glusterfs01192.168.111.14centos7.6,内存512M,增加两块硬盘10G,host解析
glusterfs02192.168.111.15centos7.6,内存512M,增加两块硬盘10G,host解析
glusterfs03192.168.111.16centos7.6,内存512M,增加两块硬盘10G,host解析
  • a: 什么是glusterfs
    Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。
  • b: 安装glusterfs
#所有节点:
yum install  centos-release-gluster -y
yum install  install glusterfs-server -y
systemctl start glusterd.service
systemctl enable glusterd.service
mkdir -p /gfs/test1
mkdir -p /gfs/test2

将所有主机添加得两块盘进行挂载
fdisk -l可以看到/sdc和sdb两块盘
在这里插入图片描述

将两块盘格式化

mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc

blkid查看两块盘得uuid
在这里插入图片描述

将uuid信息添加配置文件/etc/fstab
在这里插入图片描述

进行磁盘挂载mount -a
在这里插入图片描述

  • c: 添加存储资源池
#master节点:
gluster pool list
gluster peer probe glusterfs01
gluster peer probe glusterfs02
gluster pool list
#解释:
#pool:资源池
#peer:节点
#volume: 卷(被外界挂载的,只有卷处于start状态,才可以被挂载;分布式复制卷)
#brick: 存储单元(一个存储单元就是一块硬盘)

查看添加gluster节点
在这里插入图片描述

  • d: glusterfs卷管理
在gluster01节点上操作
创建分布式复制卷
gluster volume create quyunlong replica 2 glusterfs01:/gfs/test1 glusterfs01:/gfs/test2 glusterfs02:/gfs/test1 glusterfs02:/gfs/test2 force
#创建2个复制卷,至少2个,一般都是创建3个复制卷,就是当前状态写入数据的时候会写入两份;如果要是三台主机:则允许一台主机坏掉,数据还是完成;写入数据时会尽可能均匀分布;启动卷
gluster volume start quyunlong
查看卷
gluster volume info quyunlong 在gluster03节点上操作
挂载卷
mount -t glusterfs 192.168.111.14:/quyunlong /mnt

由于是复制卷,所以减少一般的空间,即20G
在这里插入图片描述

测试一下,是否真的会复制两份文件;随便在03上将etc下的文件复制到mnt路径下
在这里插入图片描述

在01的节点上查找文件,发现存在两个文件
在这里插入图片描述

将glusterfs03添加到glusterfs01的分布式复制卷中

gluster volume add-brick quyunlong glusterfs03:/gfs/test1 glusterfs03:/gfs/test2 force

在这里插入图片描述

在查看/gfs/test1目录不存在文件
在这里插入图片描述

在glusterfs01上重新调度一下即可

gluster volume rebalance quyunlong start

在这里插入图片描述

在查看glusterfs03上已经存在文件了
在这里插入图片描述

  • e: 分布式复制卷讲解
    在这里插入图片描述

  • f: 分布式复制卷扩容

扩容前查看容量:
df   -h
扩容命令:
gluster volume add-brick quyunlong glusterfs03:/gfs/test1 glusterfs03:/gfs/test2 force
扩容后查看容量:
df   -h

6.7 k8s 对接glusterfs存储

注意:1.所有节点都要做host解析 2.node节点需要安装gluster客户端

  • a:创建endpoint

vi glusterfs-Endpoints.yaml

aapiVersion: v1
kind: Endpoints
metadata:name: glusterfs     #ep和svc是通过名字关联namespace: default
subsets:
- addresses:- ip: 192.168.111.14- ip: 192.168.111.15- ip: 192.168.111.16ports:- port: 49152protocol: TCP
  • b: 创建service
    vi glusterfs-svc.yaml
aapiVersion: v1
kind: Service
metadata:name: glusterfs    #ep和svc是通过名字关联namespace: default
spec:ports:- port: 49152protocol: TCPtargetPort: 49152  #目标端口,客户端节点的端口sessionAffinity: Nonetype: ClusterIP

查看状态,创建成功,并且已经关联
在这里插入图片描述

  • c: 创建gluster类型pv,就是卷进行挂载
    vi gluster_pv.yaml
aapiVersion: v1
kind: PersistentVolume
metadata:name: glusterlabels:type: glusterfs
spec:capacity:storage: 50GiaccessModes:- ReadWriteManyglusterfs:endpoints: "glusterfs"path: "quyunlong"readOnly: false

在这里插入图片描述

  • d: 创建pvc
注意:如果要是不知道怎么去编辑yml配置文件则可以使用命令去查看帮助写
kubectl explain pvc.spec.selector.matchLabels
explain:表示解释
pvc:表示对应的什么文件,如:pv、pvc、rs、rc、pod等等

vim gluster_pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: gluster
spec:selector:matchLabels:type: glusterfsaccessModes:- ReadWriteManyresources:requests:storage: 10Gi

匹配上的pv和pvc
在这里插入图片描述

  • e:在pod中使用gluster
    创建mysql-rc.yml

vim mysql-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:name: mysql
spec:replicas: 1selector:app: mysqltemplate:metadata:labels:app: mysqlspec:volumes:    #宿主机的挂载目录,设置了gluster- name: mysqlpersistentVolumeClaim:claimName: glustercontainers:- name: mysqlimage: 192.168.111.11:5000/mysql:5.7volumeMounts:  #容器的挂载目录- name: mysqlmountPath: /var/lib/mysqlports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: '123456'

创建mysql_svc.yml
vim mysql-svc.yml

apiVersion: v1
kind: Service
metadata:name: mysql
spec:ports:- port: 3306targetPort: 3306selector:app: mysql
创建tomcat_rc.yml文件
vim tomcat-rc.yml  
apiVersion: v1
kind: ReplicationController
metadata:name: myweb
spec:replicas: 1selector:app: mywebtemplate:metadata:labels:app: mywebspec:containers:- name: mywebimage: 192.168.111.11:5000/tomcat-app:v2ports:- containerPort: 8080env:- name: MYSQL_SERVICE_HOSTvalue: 'mysql'- name: MYSQL_SERVICE_PORTvalue: '3306'

创建tomcat_svc.yml文件
vim tomcat-svc.yml

apiVersion: v1
kind: Service
metadata:name: myweb
spec:type: NodePortports:- port: 8080nodePort: 30008selector:app: myweb

查看状态创建成功
在这里插入图片描述

浏览器访问正常http://192.168.111.13:30008/
在这里插入图片描述

查看glusterfs03数据库存储文件已经存在挂载目录/mnt
在这里插入图片描述

查看其他glusterfs02节点已经是存储了两份数据
在这里插入图片描述

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

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

相关文章

MyBatis 的在使用上的注意事项及其辨析

1. MyBatis 的在使用上的注意事项及其辨析 文章目录 1. MyBatis 的在使用上的注意事项及其辨析2. 准备工作3. #{ } 与 ${ } 的区别和使用3.1 什么情况下必须使用 ${ }3.1.1 拼接表名3.1.2 批量删除3.1.3 模糊查询3.1.3.1 使用 ${ }的方式3.1.3.2 使用 #{ } 的方式 4. typeAlias…

风景的短视频一分钟:成都科成博通文化传媒公司

风景的短视频一分钟:时光凝固的画卷 在快节奏的现代生活中,我们常常被繁忙和琐碎所困扰,渴望在喧嚣中找到一丝宁静与美好。而风景的短视频,正是这样一份能够让我们在短时间内沉浸于自然之美的奇妙礼物。成都科成博通文化传媒公司…

牛客BM85 验证IP地址【中等 字符串 Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880 https://www.lintcode.com/problem/1222/description 思路 直接模拟,注意IPv4,ipv6的条件Java代码 import java.util.*;public class Solution {/*** 验证IP地址…

关于IDEA创建Maven一直爆红无法下载的问题

你能看到这我就知道你肯定已经试过了网上的很多方法了,我之前也是,试过了很多一直无法正常下载,我也是找人给 线下看了看解决了,我总结一下从头到尾排除问题,试到最后要是还解决不了你直接私信我,我给你看看…

路由策略实验1

先把地址全部配通 对R1 对R2 对R4 对R3 对R5 对R6 对R7 然后起路由协议 对R1 对R2 对R3 对R4 对R5 对R6 对R7

C++17之std::void_t

目录 1.std::void_t 的原理 2.std::void_t 的应用 2.1.判断成员存在性 2.1.1.判断嵌套类型定义 2.1.2 判断成员是否存在 2.2 判断表达式是否合法 2.2.1 判断是否支持前置运算符 2.2.3 判断两个类型是否可做加法运算 3.std::void_t 与 std::enable_if 1.std::void_t 的…

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎

猫头虎分享已解决Bug || **Eslint插件安装问题Unable to resolve eslint-plugin-猫头虎 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的…

将 py 文件编译成 pyd 文件

文章目录 一、简介1.1、Python中的文件类型:.py .pyc .pyd1.2、基本原理1.2.1、函数详解:Extension() —— 用于定义扩展模块(C/C 扩展)的类1.2.2、函数详解:setup() —— 用于配置和构建包的函数 二、构建过程2.0、…

百度文心一言API批量多线程写文章软件-key免费无限写

百度文心大模型的两款主力模型ENIRE Speed、ENIRE Lite全面免费,即刻生效。 百度文心大模型的两款主力模型 这意味着,大模型已进入免费时代! 据了解,这两款大模型发布于今年 3 月,支持 8K 和 128k 上下文长度。 ER…

Java集合面试题(概述,list,Map)

一个常见的"fail-safe"集合例子是CopyOnWriteArrayList。这个集合在每次修改时都会复制当前的数组,修改操作在新数组上进行,而遍历操作则在旧数组上进行。这样,即使在遍历过程中进行了修改,也不会影响遍历的进行。 插入…

车载诊断内容汇总(培训+视频)

车载诊断内容汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事&#xff0c…

pyopengl 立方体 正投影,透视投影

目录 顶点和线的方式 划线的方式实现: 顶点和线的方式 import numpy as np from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton from OpenGL.GL import * from OpenGL.GLU import * import sys…

Java大文件上传、分片上传、多文件上传、断点续传、上传文件minio、分片上传minio等解决方案

一、上传说明 文件上传花样百出,根据不同场景使用不同方案进行实现尤为必要。通常开发过程中,文件较小,直接将文件转化为字节流上传到服务器,但是文件较大时,用普通的方法上传,显然效果不是很好&#xff0c…

【Unity脚本】修改游戏对象的活动状态

【知识链】Unity -> Unity脚本 -> 游戏对象 -> 活动状态【摘要】本文介绍了如何通过编辑器和脚本来访问游戏对象的活动状态,并给出具体的场景示例。 文章目录 第一章 引言第二章 在编辑器中设置活动状态2.1. 在编辑器中设置活动状态2.1.1. 停用游戏对象2.…

文件IO(三)

文件IO(三) 左移右移Linux的man 手册文件IO打开文件操作文件关闭文件 caps lock开灯关灯读取按键文件IO操作目录文件打开目录文件操作目录文件 库动态库和静态库的优缺点创建静态库创建动态库 按下右ctrl键 亮灭灯 左移右移 Linux的man 手册 文件IO 打开…

FJSP:常春藤算法(Ivy algorithm,LVYA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP:常春藤算法(Ivy algorithm,LVYA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP:常春藤算法(Ivy algorithm,…

图形学初识--多边形剪裁算法

文章目录 前言正文为什么需要多边形剪裁算法?前置知识二维直线直线方程:距离本质:点和直线距离关系: 三维平面平面方程距离本质:点和直线距离关系: Suntherland hodgman算法基本介绍基本思想二维举例问题描…

最小时间差

首先可以想到,可以计算出任意两个时间之间的差值,然后比较出最小的,不过这种蛮力方法时间复杂度是O(n^2)。而先将时间列表排序,再计算相邻两个时间的差值,就只需要计算n个差值,而排序阶段时间复杂度通常为O…

C语言实现贪吃蛇小游戏(控制台)

本篇主要内容是使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇。 一、准备工作 我们要实现的基本功能有: 地图绘制蛇吃食物的功能(上、下、左、右方向键控制蛇的动作)蛇撞墙死亡蛇撞自身死亡计算得分蛇身加速、减速暂停游戏 …

9-Django项目--验证码操作

目录 templates/login/login.html utils/code.py views/login.py 验证码 生成验证码 code.py 应用验证码 views.py login.html templates/login/login.html {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset&q…