跳至主要內容

技术中心大约 3 分钟

注意

推荐环境:Centos7,文档环境:Centos7

GlusterFS介绍

GlusterFS是分布式文件系统,可将物理独立的磁盘整合为整体的文件系统提供服务。可用于k8s的存储提供,方便pod的卷动态分配与挂载。

推荐配置

三台以上独立挂载未使用的磁盘

安装GlusterFS(Centos7)

参考:https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstartopen in new window

安装环境配置:
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/107324823open in new window

https://blog.csdn.net/qq_15138049/article/details/122450353open in new window