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地址 | 环境 |
---|---|---|
glusterfs01 | 192.168.111.14 | centos7.6,内存512M,增加两块硬盘10G,host解析 |
glusterfs02 | 192.168.111.15 | centos7.6,内存512M,增加两块硬盘10G,host解析 |
glusterfs03 | 192.168.111.16 | centos7.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节点已经是存储了两份数据