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-mysql
  labels:
    type: nfs001
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: "/data/tomcat-mysql"
    server: 192.168.111.11
    readOnly: false

创建pvc

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

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

#vim mysql-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: 192.168.111.11:5000/mysql:5.7
          ports:
          - containerPort: 3306
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: '123456'
          volumeMounts:     #容器里挂载的数据库目录
          - name: mysql
            mountPath: /var/lib/mysql
      volumes:                #宿主机的挂载目录
      - name: mysql
        persistentVolumeClaim:
          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.16
  ports:
  - port: 49152
    protocol: TCP
  • b: 创建service
    vi glusterfs-svc.yaml
aapiVersion: v1
kind: Service
metadata:
  name: glusterfs    #ep和svc是通过名字关联
  namespace: default
spec:
  ports:
  - port: 49152
    protocol: TCP
    targetPort: 49152  #目标端口,客户端节点的端口
  sessionAffinity: None
  type: ClusterIP

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

  • c: 创建gluster类型pv,就是卷进行挂载
    vi gluster_pv.yaml
aapiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster
  labels:
    type: glusterfs
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    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: glusterfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

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

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

vim mysql-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      volumes:    #宿主机的挂载目录,设置了gluster
      - name: mysql
        persistentVolumeClaim:
          claimName: gluster
      containers:
        - name: mysql
          image: 192.168.111.11:5000/mysql:5.7
          volumeMounts:  #容器的挂载目录
          - name: mysql
            mountPath: /var/lib/mysql
          ports:
          - containerPort: 3306
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: '123456'

创建mysql_svc.yml
vim mysql-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mysql
创建tomcat_rc.yml文件
vim tomcat-rc.yml  
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 1
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
        - name: myweb
          image: 192.168.111.11:5000/tomcat-app:v2
          ports:
          - containerPort: 8080
          env:
          - name: MYSQL_SERVICE_HOST
            value: 'mysql'
          - name: MYSQL_SERVICE_PORT
            value: '3306'

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

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

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

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

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

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

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿听风成曲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值