目录
一、部署和使用
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-client5.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.yaml5.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服务恢复时,从下图可以看出数据会自动从另外两个节点进行同步 注意:当glusterfs-server2发生故障时,我们只要不umount 既可以正常使用。如果umount后再想挂载必须得修复glusterfs-server2的服务或者更换挂载ip
注意:当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                                                        


















