目录
一、部署和使用
1. clusterfs服务器初始化
2. 部署glusterfs
3. 创建volume
4. 客户端挂载和使用
5. k8s使用glusterfs作为后端存储(静态供给glusterfs存储)
5.1 集群所有节点安装glusterfs客户端
5.2 k8s创建资源对象使用glusterfs存储
5.2.1 创建glusterfs-endpoints
5.2.2 为这些端点创建一个service,以便它们能够持久,不需要标签选择器
5.2.3 创建pv,pvc,pv中定义glusterfs的信息
5.2.4 创建deployment、service
二、Glusterfs扩/缩容
三、故障演练
四、优化
五、线上创建命令
一、部署和使用
1. clusterfs服务器初始化
# 三台机器需要添加hosts
10.1.63.1 a5000-glusterfs-server1
10.1.63.2 a5000-glusterfs-server2
10.1.63.3 a5000-glusterfs-server3
# 将磁盘设置为GPT格式
parted /dev/sdb mklabel gpt
# 将所有磁盘空间都分给sdb1
parted /dev/sdb mkpart primary 0% 100%
# 初始化ext4文件系统
mkfs -t ext4 /dev/sdb1
# 获取sdb1的UUID
blkid /dev/sdb1
# 设置开机自动挂载
vim /etc/fstab
/dev/disk/by-uuid/9eb095cb-d9ae-4f03-99c5-98f312aa4e88 /glusterfs ext4 defaults 0 1
# 创建挂载点
mkdir /glusterfs
# 进行挂载
mount -a
2. 部署glusterfs
注意:部署过程很简单,只需要安装一个glusterfs-server即可,需要注意的是glusterfs 客户端也需要安装一个客户端工具,并且配置hosts可以解析glusterfs-server的主机名
# 安装软件-属性-通用
apt install software-properties-common
apt install -y glusterfs-server
systemctl enable glusterd --now
# 查看gluster节点状态
gluster peer status
# 增加节点
gluster peer probe a5000-glusterfs-server2
# 删除一个节点
gluster peer detach a5000-glusterfs-server2
# 查看glustrefs集群节点
gluster pool list
3. 创建volume
# 查看所有卷的信息
gluster volume status all
# 创建volume 创建3副本卷,2副本会有脑裂的情况。不加replica的情况下默认是分布式卷
gluster volume create test-volume replica 3 transport tcp a5000-glusterfs-server1:/glusterfs/sunwenbo-test a5000-glusterfs-server2:/glusterfs/sunwenbo-test a5000-glusterfs-server3:/glusterfs/sunwenbo-test
# 启动共享volume gluster守护进程端口24007,每创建一个逻辑卷,就会启动一个进程和端口,进程端口默认是49152,以此类推,第二个卷端口就是49153。
gluster volume start test-volume
# 查看volume信息
gluster volume info
4. 客户端挂载和使用
# 每台机器需要安装client
sudo apt -y install glusterfs-client
# 同时增加hosts解析记录
cat >> /tmp/hosts << EOF
10.0.1.1 a5000-registry.chatglm.cn
10.1.63.1 a5000-glusterfs-server1
10.1.63.2 a5000-glusterfs-server2
10.1.63.3 a5000-glusterfs-server3
EOF
# 创建挂载点
mkdir -p /mnt/test-volume/
# 手动进行挂载
mount -t glusterfs 10.1.63.1:/test-volume /mnt/test-volume/
# 卸载卷
umount /mnt/test-volume
# 开机自动挂载,修改/etc/fstab
10.1.63.1:/test-volume /mnt/test-volume/ glusterfs defaults 0 0
# 停止共享某一个volume
gluster volume stop test-volume
# 删除卷
gluster volume delete test-volume
注意:删除卷的前提是先停止卷,如果要删除卷下面的数据,现在客户端将卷下的数据删除完毕,再停止卷,再删除卷
5. k8s使用glusterfs作为后端存储(静态供给glusterfs存储)
已经在1.25版本后废弃
5.1 集群所有节点安装glusterfs客户端
sudo apt -y install glusterfs-client
5.2 k8s创建资源对象使用glusterfs存储
5.2.1 创建glusterfs-endpoints
可以参考: https://github.com/kubernetes/examples/blob/master/volumes/glusterfs/glusterfs-endpoints.yaml
vim glusterfs-endpoints.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: glusterfs-cluster
subsets:
- addresses:
- ip: 10.1.63.1
ports:
- port: 49152 #填 写 卷 的 端 口 (官 网 说 在 端 口 字 段 中 提 供 任 何 有 效 值 (从 1到 65535)都 可 以 , 所 以 这 个 端 口 有 些 网 上 教 程 写 1的 )
- addresses:
- ip: 10.1.63.2
ports:
- port: 49152 #填 写 卷 的 端 口
- addresses:
- ip: 10.1.63.3
ports:
- port: 49152 #填 写 卷 的 端 口
kubectl create -f glusterfs-endpoints.yaml
5.2.2 为这些端点创建一个service,以便它们能够持久,不需要标签选择器
vim glusterfs-service.yaml
apiVersion: v1
kind: Service
metadata:
name: glusterfs-cluster #名字要与Endpoints名字一样才能进行管理
spec:
ports:
- port: 49152
kubectl create -f glusterfs-service.yaml
5.2.3 创建pv,pvc,pv中定义glusterfs的信息
apiVersion: v1
kind: PersistentVolume
metadata:
name: glusterfs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
glusterfs: #定 义 gluster的 信 息
endpoints: glusterfs-cluster #指 定 glusterfs的 endpoint
endpointsNamespace: default #指 定 glusterfs的 endpoint的 所 属 命 名 空 间
path: test-volume
readOnly: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: glusterfs-pvc
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 5Gi
storageClassName: ""
5.2.4 创建deployment、service
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- name: nginx
containerPort: 80
volumeMounts:
- name: pvc-volume
mountPath: /var/log/nginx #持久化nginx的日志
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: glusterfs-pvc
readOnly: false
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
---
二、Glusterfs扩/缩容
复制卷(Replicated)最大容量,是由宿主机的磁盘决定。生产环境下我们可以先移除glusterfs集群的一台机器,进行更换硬盘格式化后挂载再加入到集群。依次替换集群的机器完成扩容。
Distributed-Replicate分布式复制卷,获得两倍容量
三、故障演练
客户端正常挂载使用
当glusterfs-server2机器发生故障时不会影响客户端挂载使用,可以继续正常写入数据
且glusterfs集群正常的节点依然会存储数据
但是glusterfs-server2这台机器上不会写入新数据没有test5这个文件当glusterfs-server2服务恢复时,从下图可以看出数据会自动从另外两个节点进行同步注意:当glusterfs-server2发生故障时,我们只要不umount 既可以正常使用。如果umount后再想挂载必须得修复glusterfs-server2的服务或者更换挂载ip
四、优化
1. 要同时启用 tcp 和 rdma:
root@a5000-glusterfs-server1:~# gluster volume set test-volume config.transport tcp,rdma
volume set: success
2. 执行 gluster peer status 后Hostname显示的是主机名,实际需求需要显示为ip
这么做的原因是可以不用配置hosts或者不用解析宿主机hostname
root@a5000-glusterfs-server2:/glusterfs/sunwenbo-test# gluster peer status
Number of Peers: 2
Hostname: a5000-glusterfs-server1
Uuid: 5400d9f4-eb91-4163-a3b6-9e0a2b250028
State: Peer in Cluster (Connected)
Hostname: 10.1.63.3
Uuid: 251f6223-bc13-40cc-a2dc-45b13e81d35b
State: Peer in Cluster (Connected)
# 修改hostname 为ip
# 执行peer probe后需要在对应的节点上修改,将hostname1改为对应的ip即可
cat /var/lib/glusterd/peers/251f6223-bc13-40cc-a2dc-45b13e81d35b
uuid=251f6223-bc13-40cc-a2dc-45b13e81d35b
state=3
hostname1=10.1.63.3
五、线上创建命令
gluster volume create model-data replica 3 transport tcp a5000-glusterfs-server1:/glusterfs/ a5000-glusterfs-server2:/glusterfs/ a5000-glusterfs-server3:/glusterfs/ force
启动命令
gluster volume start model-data
集群的每台集群都需要创建挂载点
mkdir -p /data/glusterfs/
安装glusterfs client
apt -y install glusterfs-client
增加hosts解析记录
cat >> /tmp/hosts << EOF
10.0.1.1 a5000-registry.chatglm.cn
10.1.63.1 a5000-glusterfs-server1
10.1.63.2 a5000-glusterfs-server2
10.1.63.3 a5000-glusterfs-server3
EOF
/etc/fstab 追加一条挂载信息
10.1.63.2:/model-data /data/glusterfs/ glusterfs defaults 0 0
挂载
mount -a