网站 多少篇文章才能上线,网站建设为什么学flash,施工企业安全生产评价汇总表最终须由( )签名。,多功能创意产品设计文章目录 1、二进制部署1.1 安装yum源1.2 准备服务器1.3 添加本地解析1.4关闭防火墙及selinux1.5 加载内核模块1.6 格式化分区和挂载brick1.7 安装GlusterFS1.8 iptables配置1.9 配置可信任池1.10 设置GlusterFS卷1.11 测试volume卷 2、使用heketi将二进制GlusterFS集群作为k8s… 文章目录 1、二进制部署1.1 安装yum源1.2 准备服务器1.3 添加本地解析1.4关闭防火墙及selinux1.5 加载内核模块1.6 格式化分区和挂载brick1.7 安装GlusterFS1.8 iptables配置1.9 配置可信任池1.10 设置GlusterFS卷1.11 测试volume卷 2、使用heketi将二进制GlusterFS集群作为k8s持久化存储 GlusterFS可支持多种部署方式,二进制部署kubernetes部署docker部署等等 1、二进制部署
GlusterFS二进制部署可支持Debian、Ubuntu、Redhat/Centos、Fedora、Arch Linux等多种Linux发行版在此以国内使用最多的Centos发行版演示GlusterFS二进制部署流程
1.1 安装yum源
对于可公网访问环境推荐使用yum安装方式简单便捷解决依赖对于内网限制环境可将RPM包提前下载准备好进行自行安装。 以centos7为例 yum install centos-release-gluster -y1.2 准备服务器
准备至少两台centos7服务器,数量越多可实现的卷类型越丰富主机之间网络互通每台主机至少两块硬盘一块用于操作系统安装另一块用于Gluster数据存储(数据盘可挂载多个提高性能),防止系统盘损坏数据丢失也是避免系统盘和数据盘发生IO抢占。
注意GlusterFS将其动态生成的配置文件存储在/var/lib/glusterd中如果在任何时间点GlusterFS无法写入这些文件它会导致您的GlusterFS系统出现问题,或者让系统脱机建议为/var/lib/glusterd,/var/log等这些目录单独创建分区以防发生这种问题。
1.3 添加本地解析
添加服务器本地解析 192.168.1.x server1 192.168.1.x server2 192.168.1.x server3
1.4关闭防火墙及selinux Cenos6: systemctl stop iptables ;chkconfig iptables offCentos7: systemctl stop firewalld;systemctl disable firewalld/etc/selinux/configSELINUXdisabled1.5 加载内核模块
modprobe dm_snapshot modprobe dm_mirror modprobe dm_thin_pool
1.6 格式化分区和挂载brick
对于文件系统类型推荐使用性能更好的xfs或者ext4 以下命令在每台节点上操作 fdisk /dev/sdb mkfs.xfs -i size512 /dev/sdb1 mkdir -p /bricks/brick1 echo -n /dev/sdb1 /bricks/brick1 xfs defaults 1 2 /etc/fstab mount -a mount 现在看到sdb1 挂载到/bricks/brick1 注意在centos6上需要安装xfsprogs包以支持格式化XFS文件系统 yum install xfsprogs
1.7 安装GlusterFS
在每台节点上安装 yum install GlusterFS-server -y 在centos8上安装时需要启动PowerTools源 dnf --enablerepopowertools install GlusterFS-server 启动GlusterFS进程 systemctl start glusterd systemctl enable glusterd
1.8 iptables配置
您可以使用iptables规则运行GlusterFS,但需要注意的是默认情况下glusterd将在tcp/24007上侦听但在glusterd节点上打开该端口是不够的每次添加brick时它都会打开一个新端口(您可以通过“gluster volume status”查看) 根据您的设计最好为 gluster/存储流量使用专用 NIC因此通过您的 netfilter 解决方案“信任”nic/subnet/gluster 节点CentOS 6 的 /etc/sysconfig/iptables 和 firewalld/firewall -cmd) 对于安全性要求不是非常高的使用场景推荐关闭firewalld
1.9 配置可信任池
在任意一台机器执行以下命令 gluster peer probe server2 gluster peer probe server3 在其中一台主机添加不在信任池中的其他主机 例如在server1上执行命令添加server2,server3主机 注意一旦建立了信任池只有受信任的成员可以将新服务器添加到池中新服务器无法自行添加到信任池
1.10 设置GlusterFS卷
在server1和server2上执行以下命令 mkdir /bricks/brick1/gv0 在任意一台服务器执行 gluster volume create gv0 replica 2 server1:/bricks/brick1/gv0 server2:/bricks/brick1/gv0 gluster volume start gv0
查看volume信息确保volume启动了 gluster volume info 注意如果卷未启动则有关出错的线索将在一台或两台服务器上/var/log/GlusterFS下的日志文件中 - 通常在etc-GlusterFS-glusterd.vol.log
1.11 测试volume卷 在任意一台主机挂载volume测试mount -t GlusterFS server1:/gv0 /mntfor i in seq -w 1 100; do cp -rp /var/log/messages /mnt/copy-test-$i; done首先检查挂载点ls -lA /mnt | wc -l
您应该看到返回了 100 个文件。接下来检查每台服务器上的 GlusterFS 挂载点ls -lA /bricks/brick1/gv02、使用heketi将二进制GlusterFS集群作为k8s持久化存储
在上一节安装完GlusterFS集群后我们需要使用heketi将GlusterFS接入到k8s作为后端持久化存储。heketi是一个GlusterFS管理软件可以管理GlusterFS集群的卷创建、删除等操作 heketi管理GlusterFS集群需要注意
GlusterFS集群的各peer必须要有未安装文件系统的磁盘设备(磁盘设备未进行格式化)GlusterFS集群各peer的端口号不能太少不然当peer上的brick将端口号用完后会造成无法创建卷。GlusterFS的各peer不能组成集群heketi可以自创建集群集合。
步骤
准备磁盘 如果是使用的全部磁盘则磁盘不需要分区直接使用/dev/sdb 如果使用磁盘的部分空间则需要对磁盘分区使用/dev/sdb1
上一节我们使用/dev/sdb并进行了分区因此我们需要将磁盘分区删除并将磁盘数据清除否则heketi将拒绝使用该磁盘 umount /bricks/brick1fdisk /dev/sdb d w #删除分区wipefs -a /dev/sdb #清除磁盘数据及信息 注意⚠️如果您使用的是另一块未格式化的新磁盘上面的三个命令无需执行 安装heketi(在集群中任选一个节点安装) yum install heketi heketi-client 生成密钥并配置免密
# ssh-keygen -t rsa -q -f /etc/heketi/private_key -N # ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node01# ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node02# ssh-copy-id -i /etc/heketi/private_key.pub GlusterFS-node03# chown heketi.heketi /etc/heketi/private_key配置heketi vi /etc/heketi/heketi.json{_port_comment: Heketi Server Port Number,port: “48080, #改为48080或其他端口_use_auth: Enable JWT authorization. Please enable for deployment,use_auth: true, #改为true_jwt: Private keys for access,jwt: {_admin: Admin has access to all APIs,admin: {key: adminpassword #用于heketi认证的admin用户及密码},_user: User only has access to /volumes endpoint,user: {key: userpassword #用于heketi认证的user用户及密码可以不配置}},_GlusterFS_comment: GlusterFS Configuration,GlusterFS: {_executor_comment: [Execute plugin. Possible choices: mock, ssh,mock: This setting is used for testing and development., It will not send commands to any node.,ssh: This setting will notify Heketi to ssh to the nodes., It will need the values in sshexec to be configured.,kubernetes: Communicate with GlusterFS containers over, Kubernetes exec api.],executor: “ssh,#改为ssh_sshexec_comment: SSH username and private key file information,sshexec: {keyfile: /etc/heketi/private_key,user: root, #若这里使用root用户,则GlusterFS的机器之间不能禁用rootport: 22, fstab: /etc/fstab},_kubeexec_comment: Kubernetes configuration,kubeexec: {host :https://kubernetes.host:8443,cert : /path/to/crt.file,insecure: false,user: kubernetes username,password: password for kubernetes user,namespace: OpenShift project or Kubernetes namespace,fstab: Optional: Specify fstab file on node. Default is /etc/fstab},_db_comment: Database file name,db: /var/lib/heketi/heketi.db,_loglevel_comment: [Set log level. Choices are:, none, critical, error, warning, info, debug,Default is warning],loglevel : debug}
}
将默认配置文件参考上述配置进行修改启动并测试heketi systemctl enable heketi.service systemctl start heketi.service测试连通性 curl http://GlusterFS-node01:48080/helloHello from Heketi #返回结果配置topology
vi /etc/heketi/topology.json #配置三个节点的使用信息这里/dev/sdb表示后端存储所要使用的数据盘
{clusters: [{nodes: [{node: {hostnames: {manage: [“10.140.xx.xx”],storage: [10.140.xx.xx]},zone: 1},devices: [/dev/sdb]},{node: {hostnames: {manage: [10.140.xx.xx],storage: [10.140.xx.xx]},zone: 1},devices: [/dev/sdb]},{node: {hostnames: {manage: [10.139.xx.xx],storage: [10.139.xx.xx]},zone: 1},devices: [/dev/sdb]}]}]
}配置环境变量,方便操作
echo “export HEKETI_CLI_SERVERhttp://10.140.xx.xx:48080” /etc/profile.d/heketi.sh #heketi地址
echo “alias heketi-cli‘heketi-cli --server “$HEKETI_CLI_SERVER” --user admin --secret adminpassword” ~/.bashrc #heketi用户密码
source /etc/profile.d/heketi.sh
source ~/.bashrc创建集群
heketi-cli topology load --json/etc/heketi/topology.json查看集群信息
heketi-cli cluster list
heketi-cli cluster info xxxx #xxxx为上条命令返回的id
heketi-cli node list
创建volume测试
heketi-cli volume create --size2 --replica3
heketi-cli volume list
mount -t GlusterFS 10.140.xx.xx:vol_4f1a171ab06adf80460c84f2132e96e0 /mnt
heketi-cli volume delete 4f1a171ab06adf80460c84f2132e96e0k8s接入heketi 所有的k8s节点均安装GlusterFS-fuse以保证正常使用 yum install GlusterFS-fuse -y 创建secretheketi的认证密码,或者在kebesphere平台添加密钥
apiVersion: v1
kind: Secret
metadata:name: heketi-secretnamespace: kube-system
data:key: YWRtaW5AUEBzc1cwcmQ
type: kubernetes.io/GlusterFSkey的值,使用base64转码生成echo -n adminpassword | base64 这里的用户名密码为heketi配置文件中创建的用户密码创建storageclassheketi-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: GlusterFSnamespace: kube-system
parameters:resturl: “http://10.140.xx.xx:48080” #heketi的地址clusterid: cca360f44db482f03297a151886eea19 #在heketi节点使用heketi-cli cluster list命令返回的idrestauthenabled: true restuser: admin #heketi配置文件中创建的用户密secretName: heketi-secret # name/namespace与secret资源中定义一致secretNamespace: kube-systemvolumetype: replicate:3
provisioner: kubernetes.io/GlusterFS
reclaimPolicy: Delete创建pvc测试
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: heketi-pvcannotations:volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/GlusterFS
spec:storageClassName: GlusterFSaccessModes:- ReadWriteOnceresources:requests:storage: 1Gi查看sc和pvc的信息
kubectl get sc
kubectl get pvc
创建Pod挂载pvcheketi-pod.yaml)
kind: Pod
apiVersion: v1
metadata:name: heketi-pod
spec:containers:- name: heketi-containerimage: busyboxcommand:- sleep- 3600volumeMounts:- name: heketi-volumemountPath: /pv-datareadOnly: falsevolumes:- name: heketi-volumepersistentVolumeClaim:claimName: heketi-pvc进入容器测试
kubectl exec -it heketi-pod /bin/sh