大约 3 分钟
注意
推荐环境:Centos7,文档环境:Centos7
GlusterFS介绍
GlusterFS是分布式文件系统,可将物理独立的磁盘整合为整体的文件系统提供服务。可用于k8s的存储提供,方便pod的卷动态分配与挂载。
推荐配置
三台以上独立挂载未使用的磁盘
安装GlusterFS(Centos7)
参考:https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart
安装环境配置:
node01 192.168.1.10
node02 192.168.1.11
node03 192.168.1.12
Using Storage SIG Yum Repos
yum install centos-release-gluster
分区
mkfs.xfs -i size=512 /dev/sdb1
下面命令用于测试,测试后需要删除对应的配置:
# mkdir -p /bricks/brick1
# vi /etc/fstab
# vi /etc/fstab
Add the following:
/dev/sdb1 /bricks/brick1 xfs defaults 1 2
Save the file and exit
# mount -a && mount
开始安装(所有节点)
yum install glusterfs-server
systemctl enable glusterd
systemctl start glusterd
systemctl status glusterd
添加节点信任
除node01之外的其他节点:
gluster peer probe node01
安装heketi
安装服务
主节点(node01)执行:
yum install heketi
所有节点安装:
yum install heketi-client
所有节点生成ssh_rsa方便,免密登录到任何节点:
useradd heketi
echo "heketi" |passwd --stdin heketi
su - heketi
ssh-keygen
echo "heketi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
主节点执行,拷贝所有节点的免密证书:
ssh-copy-id node01
ssh-copy-id node02
ssh-copy-id node03
配置
cp heketi.json heketi.json.default
vi heketi.json
修改如下配置
"port": "18080", # 服务端口
"use_auth": true, # 开启认证
"admin": {
"key": "admin"
},
"user": {
"key": "admin"
}
"executor": "ssh",
"sshexec": {
"keyfile": "/home/heketi/.ssh/id_rsa",
"user": "heketi",
"port": "22", "sudo": true,
"fstab": "/etc/fstab"
},
修改文件权限:
chown heketi:heketi /etc/heketi/ -R
chown heketi:heketi /var/lib/heketi -R
启动服务
systemctl enable heketi && systemctl start heketi && systemctl status heketi
创建磁盘集群
# 创建磁盘集群
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 --json cluster create
{"id":"0c15099b0905cf490004ff3a4f0991e4","nodes":[],"volumes":[],"block":true,"file":true,"blockvolumes":[]}
# 添加节点
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 --json node add --cluster "0c15099b0905cf490004ff3a4f0991e4" --management-host-name 192.168.1.10 --storage-host-name 192.168.1.10 --zone 1
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 --json node add --cluster "0c15099b0905cf490004ff3a4f0991e4" --management-host-name 192.168.1.11 --storage-host-name 192.168.1.11 --zone 1
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 --json node add --cluster "0c15099b0905cf490004ff3a4f0991e4" --management-host-name 192.168.1.12 --storage-host-name 192.168.1.12 --zone 1
# 磁盘设备
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 node list
Id:179b08165b56df018a0ba295e2c78f22 Cluster:0c15099b0905cf490004ff3a4f0991e4
Id:a547a8327d3ba9fc51fe5e25d95236cb Cluster:0c15099b0905cf490004ff3a4f0991e4
Id:c65521c53de76c3f70d2ec828498a261 Cluster:0c15099b0905cf490004ff3a4f0991e4
# 分别添加所有节点的磁盘(对于上面查询的node id)
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 device add --name "/dev/sdb" --node 179b08165b56df018a0ba295e2c78f22
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 device add --name "/dev/sdb" --node a547a8327d3ba9fc51fe5e25d95236cb
> heketi-cli --user admin --secret admin --server http://192.168.1.10:18080 device add --name "/dev/sdb" --node c65521c53de76c3f70d2ec828498a261
配置K8S动态卷
配置StrongClass
添加 StorageClass
apiVersion: v1
kind: Secret
metadata:
name: heketi-secret
namespace: default
data:
# base64 encoded password. E.g.: echo -n "123456" | base64
key: U2NzekAyMDIw
type: kubernetes.io/glusterfs
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://192.168.1.10:18080"
clusterid: "c227957901ab6e3819ffdd0e189f5593"
restauthenabled: "true"
restuser: "admin"
secretNamespace: "default"
secretName: "heketi-secret"
gidMin: "40000"
gidMax: "50000"
volumetype: "none"
allowVolumeExpansion: true
K8S Node添加角色
在k8s主节点执行:
kubectl label nodes 节点名字 node-role.kubernetes.io/glusterfs=
上面的节点名字需要替换(所有安装了glusterFS的k8s节点都需要添加)
部署PVC使用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-node
annotations:
volume.beta.kubernetes.io/storage-class: "glusterfs"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
其他命令
查看heketi集群拓扑及空间使用信息
heketi-cli --user admin --secret admin --server http://192.168.1.10:18080
常见问题
https://blog.csdn.net/Kermit_father/article/details/107324823