k8s 使用GlusterFS做持久化存储

2023-10-27

一、创建GlusterFS

首先找几台主机做GlusterFS存储,这里用了3台主机:
10.244.0.10
10.244.0.11
10.244.0.12


安装GlusterFS

安装过程如下:

  1. 安装 gluster 源
yum install centos-release-gluster -y
  1. 安装 glusterfs 组件
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
  1. 创建 glusterfs 目录
mkdir /opt/glusterd
  1. 修改 glusterd 目录
sed -i 's/var\/lib/opt/g' /etc/glusterfs/glusterd.vol
  1. 启动 glusterfs
systemctl start glusterd.service
  1. 设置开机启动
systemctl enable glusterd.service
  1. 查看状态
systemctl status glusterd.service
  1. 配置 hosts
 > vi /etc/hosts
 
10.244.0.10 glusterfs1 
10.244.0.11 glusterfs2
10.244.0.12 glusterfs3
  1. 创建存储目录
mkdir /opt/gfs_data
  1. 添加节点到集群,在任意一台主机添加另外两台主机即可
gluster peer probe glusterfs2
gluster peer probe glusterfs3
  1. 查看集群状态
> gluster peer status
Number of Peers: 2

Hostname: glusterfs2
Uuid: f255xxxx
State: Peer in Cluster (Connected)

Hostname: glusterfs3
Uuid: 428xxxx
State: Peer in Cluster (Connected)
配置GlusterFS volume
  1. 创建分布卷
gluster volume create k8s-volume transport tcp glusterfs1:/opt/gfs_data glusterfs2:/opt/gfs_data glusterfs3:/opt/gfs_data force

  1. 启动 分布卷
gluster volume start k8s-volume

二、kubernetes整合GlusterFS

  1. 在所有 k8s node 中安装 glusterfs 客户端,并配置hosts
> yum install -y glusterfs glusterfs-fuse

> vi /etc/hosts
10.244.0.10 glusterfs1 
10.244.0.11 glusterfs2
10.244.0.12 glusterfs3
  1. 配置endpoints
    官方提供了endpoints的example文件,如下:[ https://github.com/kubernetes/examples/blob/master/staging/volumes/glusterfs/glusterfs-endpoints.json ]
    其中有如下一段配置,address配置GlusterFS节点IP,port配置1-65535中的可用的port即可
 "subsets": [
    {
      "addresses": [{ "ip": "10.240.106.152" }],
      "ports": [{ "port": 1 }]
    },
    {
      "addresses": [{ "ip": "10.240.79.157" }],
      "ports": [{ "port": 1 }]
    }
  ]
  1. 创建endpoint,
 > kubectl create -f  glusterfs-endpoints.json
 > kubectl get endpoints
 NAME                     ENDPOINTS                           AGE
glusterfs-cluster        10.244.0.10:1,10.244.0.11:1990   7h35m
  1. 为endpoint创建service.
    模板连接如下:
    [ https://github.com/kubernetes/examples/blob/master/staging/volumes/glusterfs/glusterfs-service.json ]
> kubectl create -f glusterfs-service.json
  1. 创建一个pod用于测试
    示例如下,[ https://github.com/kubernetes/examples/blob/master/staging/volumes/glusterfs/glusterfs-pod.json ]

其中:

"volumes": [
  {
    "name": "glusterfsvol",
    "glusterfs": {
      "endpoints": "glusterfs-cluster",
      "path": " k8s-volume",
      "readOnly": true
    }
  }
]

endpoints:为刚刚创建的endponits名称。
path:glusterfs卷名
readOnly:通过true/false设置挂载点是只读还是读写。
6. 验证

> kubectl get pods
NAME             READY     STATUS    RESTARTS   AGE
glusterfs        1/1       Running   0          3m
> kubectl exec glusterfs -- mount | grep gluster
10.244.0.10:kube_vol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)

可能会有如下报错:


 the following error information was pulled from the glusterfs log to help diagnose this issue: 
[2019-07-04 04:12:08.856792] E [MSGID: 100026] [glusterfsd.c:2351:glusterfs_process_volfp] 0-: failed to construct the graph
[2019-07-04 04:12:08.856967] E [graph.c:1142:glusterfs_graph_destroy] (-->/usr/sbin/glusterfs(mgmt_getspec_cbk+0x532) [0x55fc018ea332] -->/usr/sbin/glusterfs(glusterfs_process_volfp+0x150) [0x55fc018e3e60] -->/lib64/libglusterfs.so.0(glusterfs_graph_destroy+0x84) [0x7f506a7ef1e4] ) 0-graph: invalid argument: graph [Invalid argument]
  Warning  FailedMount  4s  kubelet, worker2  Unable to mount volumes for pod "glusterfs_jx(bd61f071-9e11-11e9-a889-00163e0cdcc7)": timeout expired waiting for volumes to attach or mount for pod "jx"/"glusterfs". list of unmounted volumes=[glusterfsvol]. list of unattached volumes=[glusterfsvol default-token-bt9rk]

原因是k8s集群节点的gluster客户端版本和GlusterFS集群的版本不一致,只需要版本拉齐即可。

三、创建PV和PVC

  1. 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster-volume
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: glusterfs
  glusterfs:
    endpoints: "glusterfs-cluster"
    path: "k8s-volume"
    readOnly: false

capacity:指定PV的容量为1GB
accessModes:指定访问模式为ReadWriteOnce,支持的访问模式有3种:ReadWriteOnce表示PV能以read-write模式mount到单个节点,ReadOnlyMany表示PV能以read-only模式mount到多个节点, ReadWriteMany表示PV能以read-write模式mount到多个节点。
persistentVolumeReclaimPolicy指定PV的回收策略为Recycle,支持的策略有3种:Retain表示需要手动回收;Recycle 表示清除PV中的数据,效果相当于执行了 rm -rf /volumename/*;Delete 表示删除Storage Provider上的对应存储资源。
storageClassName 指定PV的class为glusterfs。相当于为PV设置了一个分类,PVC可以指定 class 申请相应 class 的PV。

> kubectl apply -f pv.yml 
persistentvolume/gluster-volume created
> kubectl get pv
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
gluster-volume   1Gi        RWO            Recycle          Available           glusterfs               9s

STATUS为Available,表示 PV 就绪,可以被 PVC 申请

  1. 创建PVC
    PVC只需要指定PV的容量、访问模式、class即可。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: glusterfs-nginx
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: glusterfs

创建PVC 并查看PV和PVC的状态

kubectl apply -f pvc.yml 
persistentvolumeclaim/glusterfs-nginx created
> kubectl get pvc
NAME                     STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
glusterfs-nginx          Bound     gluster-volume   1Gi        RWO            glusterfs      9s
tufted-sasquatch-mysql   Pending                                                             8d
> kubectl get pv
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
gluster-volume   1Gi        RWO            Recycle          Bound    jx/glusterfs-nginx   glusterfs               37m

可以看出,PVC已经绑定了PV。
接下来就可以在pod中使用PVC了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s 使用GlusterFS做持久化存储 的相关文章

  • kubeadm一键搭建kubernetes环境

    kubeadm一键搭建kubernetes环境 安装docker 按官网教程执行https docs docker com v17 09 engine installation linux docker ce centos install
  • Minikube安装以及一些踩坑的解决

    安装k8s和docker 我的测试系统是centos7 8的国内服务器 参考文档 https developer aliyun com article 221687 首先先安装k8s 1 19 2版本 1 19 x 版本的安装 腾讯云 do
  • k8s job机制初探

    博客作为学习笔记记录 若有理解或表述错误 欢迎指出 k8s的job机制 k8s官网参考 k8s的job是用来执行一次性任务的一类资源 相关的还有cronjob 用于执行以下周期性任务 部署job之后 k8s会起对应pod 当pod的状态为f
  • K8S 工作负载(一)

    K8S 工作负载 1 Pod Pod 是 Kubernetes 中创建 管理和调度的最小计算单元 用户可以在 K8S 中通过调用 Pod API生成一个 Pod 让 K8S 对其进行调度 Pod 是一组 一个或多个 容器 这些容器共享存储
  • k8s Trouble Shooting 故障排除

    本文要讲的是k8s的故障排除 比较浅 最近刚入门 主要涵盖的内容是查看k8s对象的当前运行时信息 对于服务 容器的问题是如何诊断的 对于某些复杂的问题例如pod调度问题是如何排查的 1 查看系统的Event事件 在对象资源 pod serv
  • k8s安装遇到过的一些问题

    无法获取recomended yaml文件 root k8master1 wget https raw githubusercontent com kubernetes dashboard v2 7 0 aio deploy recomme
  • k8s系列——部署k8s集群

    1 环境准备 1 1 安装操作系统 此处选用centos 7 操作系统进行安装操作 1 2 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 1 3 关闭selinux s
  • k8s v1.16设置Job ttlSecondsAfterFinished不生效

    目录 Completed的job默认不会清理 配置自动清理job ttl机制自动清理完成的job ttl controller 开启 TTLAfterFinished kube apiserver开启TTLAfterFinished kub
  • minikube单机安装nfs服务

    1 安装 nfs server sudo apt get update sudo apt get install y nfs kernel server 2 创建目录 配置 IP 共享目录绑定 vim etc exports 新增 data
  • wireshark 抓包学习TLS握手(ECDHE)

    首先放出经典的流程图 TLS 握手共分四个阶段 为了便于理解 我用wireshark抓了包来分析每一个阶段 Client Hello 第一次握手 客户端首先会发一个 Client Hello 消息 消息里面有客户端使用的 TLS 版本号 支
  • Deployment Controller 典型使用场景

    1 重新调度 Rescheduling 不管想运行 1 个副本还是 1000 个副本 副本控制器都能确保指定数量的副本存在于集群中 即使发生节点故障或 Pod 副本被终止运行等意外状况 2 弹性伸缩 Scaling 手动或者通过自动扩容代理
  • k8s Pod定义yaml配置文件详解

    此文件相关配置查询 此文件只做参考 以查询为准 kubectl explain 为文档查询命令如 kubectl explain pod spec volumes apiVersion v1 版本 kind pod 类型 pod metad
  • IDEA远程调试

    1 概述 原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试指令 jdwp是Java Debug Wire
  • 如何解决K8S节点显示NotReady

    文章目录 kubernetes节点断电重启 kubernetes节点断电重启 背景 运行的好好的k8s集群 某天断电 发现一个节点炸了 显示NotReady kubectl get nodes 那么如何查找问题呢 我们用它 journalc
  • kubectl常用命令

    alias k kubectl alias kc k create f alias kgp k get pods alias kdp k describe pods alias kdep k delete pods alias kl k l
  • k8s 裸机安装 nginx1.19 ingrass

    k8s 裸机安装 nginx1 19 ingrass deploy yaml文件如下 apiVersion v1 kind Namespace metadata name ingress nginx labels app kubernete
  • kubernetes报错Error from server (AlreadyExists): error when creating "kubernetes-dashboard.yaml": serv

    在执行 kubectl apply f kubernetes dashboard yaml 报错 Error from server AlreadyExists error when creating kubernetes dashboar
  • 国内k8s集群部署的几种方式

    前言 总所周知 由于某种原因 通过官方的方式在国内是无法顺利部署k8s集群的 这里记录下在国内部署的几种方式 部署方式 目前我所了解有以下几种方式 使用kubeadmin通过离线镜像的方式 网上教程和镜像包挺多的 通过厂商集成的方式如 ra
  • flannel和calico区别

    k8s网络模式 Flannel数据包在主机间转发是由backend实现的 目前已经支持UDP VxLAN host gw等多种模式 VxLAN 使用内核中的VxLAN模块进行封装报文 也是flannel推荐的方式 host gw虽然VXLA
  • flannel和calico区别

    k8s网络模式 Flannel数据包在主机间转发是由backend实现的 目前已经支持UDP VxLAN host gw等多种模式 VxLAN 使用内核中的VxLAN模块进行封装报文 也是flannel推荐的方式 host gw虽然VXLA

随机推荐

  • Bootstrap日期控件,实现日期控件只选择不准输入效果

    一 引入日期控件CSS JS 二 input就用控件 td 发行时间 td td div class input group date style width 14em div td
  • CDN,P2P,PCDN的区别?

    如何来有效解决网络卡顿的问题 这就是我们SwarmCloud要解决的问题啦 那么为了大家能更好地了解SwarmCloud的网络加速技术 本篇文章为大家介绍一下与网络加速有关的几个重要概念 一起了解一下CDN P2P和PCDN究竟是什么吧 1
  • 黄色叹号_资深从业者教你如何关闭SolidWorks任务栏的感叹号图标提示

    很多小伙伴在安装启动SolidWorks的时候 是不是会弹出内存不足的提示 或者在SolidWorks任务栏显示黄色感叹号图标 看着很不顺眼 我们回头一看自己的电脑内存 显存 发现又很充足 这种情况一般是新安装SolidWorks才会出现
  • QT day2

    1 完成登录框的按钮操作 并在登录成功后进行界面跳转 跳转界面代码 include form h include ui form h Form Form QWidget parent QWidget parent ui new Ui For
  • 银河麒麟安装mysql

    1 在线安装和卸载 安装arm版 先看下本地源 sudo gedit etc apt sources list 或者 sudo pluma etc apt sources list 查询mysql源 sudo apt search mysq
  • 实用小软件实现Mac读写ntfs U盘 移动硬盘

    对于Mac默认情况下 不支持NTFS U盘移动硬盘的读写问题 一直困扰着Mac用户 其实解决的方法还不少 方案一 有人建议敲代码解决 可是 对于小白用户来说 sudo nano blah blah 这是个什么鬼 完全不懂啊 方案二 搞个Wi
  • 天梯题集——冰岛人(隐藏条件:考虑嫡系)

    前文 愿天下有情人都是失散多年的兄妹 与 冰岛人 解题思路几乎是同理的 不过这里需要考虑多一个是否嫡系的关系 卡了我好久 又来一个隐藏条件 长知识 长知识 用递归实现很容易出现超时 循环果然比递归效率高 循环与递归效率的比较 冰岛人 解题难
  • 配置apache允许所有ip访问

    1 打开 apache安装目录 conf httpd conf 配置文件 a 搜索Listen监听端口 修改如下 Listen Allows you to bind Apache to specific IP addresses and o
  • 交换律和结合律

    交换律和结合律 加法交换律 A B B A 交换两个加数的位置 结果不变 乘法交换律 AB BA 交换两个因数的位置 结果不变 加法结合律 A B C A B C 三个数相加 先计算前两个数再计算第三个数的结果与先计算后两个数再计算第一个数
  • linux文件操作常见考题_linux试题

    1 当登录Linux时 一个具有唯一进程ID号的shell将被调用 这个ID是什么 B A NID B PID C UID D CID 2 用vi打开一个文件 如何用字母 new 来代替字母 old A A s old new g B s
  • js中null、NaN和undefined的区别

    1 js中null NaN和undefined的区别 在js 中未定义的值 是null 定义未赋值为undefined null 为特殊的一种object NAN 为特使一种number 数据类型
  • 【python】基础课程 在这里哦

    推荐一些Python学习资料 如果你是准备学习Python或者正在学习 下面这些你应该能用得上 Python所有方向的学习路线图 清楚各个方向要学什么东西 100多节Python课程视频 涵盖必备基础 爬虫和数据分析 100多个Python
  • pysot训练自己数据集

    pysot如何训练网络呢 有没有人知道呢 咱们可以互相交流
  • 【通信基础】通信基础、编码&&调制

    https www jianshu com p 128c1157eb97 原文地址 1 通信基础 编码 调制 1 物理层的基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流 而不是指具体的传输媒体 物理层的主要任务 确定与传
  • python水印倾斜_python中图像特定位置的水印算法

    目前我正在处理一个图像处理项目 在这个项目中 我需要将图像分割成几个片段 然后在每个片段上应用水印 在 我写了一个代码 通过掩蔽将图像分成几段 您可以找到代码here 现在我想在每个片段上实现水印 水印教程可以在here找到 在 我该怎么做
  • LeetCode--初级算法--数组篇--第二题--买卖股票的最佳时机 II

    GitHub地址 题目 给定一个数组 它的第 i 个元素是一支给定股票第 i 天的价格 设计一个算法来计算你所能获取的最大利润 你可以尽可能地完成更多的交易 多次买卖一支股票 注意 你不能同时参与多笔交易 你必须在再次购买前出售掉之前的股票
  • 淘宝SEO珍贵笔记

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 分享淘宝SEO技术 讲诉如何使用 关键词 带来百万IP流量 大家都有目共睹淘宝七月八号改变规则后引发了不少争议 后面所引起的众多卖家 围攻 淘宝之事也不仅发生过一次了 还有
  • 如何解决vcruntime140.dll找不到的问题?两种方法教你解决

    当你在运行某些应用程序或游戏时 可能会遇到一个错误提示 即 找不到vcruntime140 dll 文件 这是因为你的电脑中缺少了这个动态链接库文件 这个问题可能会导致你无法正常使用某些应用程序 在本文中 我们将介绍两种方法来解决 目录 一
  • 树莓派安装Ubuntu22.04后使用X86_Linux交叉编译Qt5+opencv4

    文章目录 准备工作 环境搭建 准备编译 未完待续 准备工作 树莓派安装Ubuntu 直接从官网下载对应的镜像烧写工具下载地址 工具里面准备好了对应的镜像地址 直接烧写入SD卡就行了 进入系统 ubuntu server22 04默认密码应该
  • k8s 使用GlusterFS做持久化存储

    一 创建GlusterFS 首先找几台主机做GlusterFS存储 这里用了3台主机 10 244 0 10 10 244 0 11 10 244 0 12 安装GlusterFS 安装过程如下 安装 gluster 源 yum insta