博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k8s使用glusterfs实现动态持久化存储
阅读量:6590 次
发布时间:2019-06-24

本文共 3369 字,大约阅读时间需要 11 分钟。

简介

本文章介绍如何使用glusterfs为k8s提供动态申请pv的功能。glusterfs提供底层存储功能,heketi为glusterfs提供restful风格的api,方便管理glusterfs。支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ,ReadWriteMany

访问模式只是能力描述,并不是强制执行的,对于没有按pvc声明的方式使用pv,存储提供者应该负责访问时的运行错误。例如如果设置pvc的访问模式为ReadOnlyMany ,pod挂载后依然可写,如果需要真正的不可写,申请pvc是需要指定 readOnly: true 参数

安装

实验用的Vagrantfile

# -*- mode: ruby -*-# vi: set ft=ruby :ENV["LC_ALL"] = "en_US.UTF-8"Vagrant.configure("2") do |config|    (1..3).each do |i|      config.vm.define "lab#{i}" do |node|        node.vm.box = "centos-7.4-docker-17"        node.ssh.insert_key = false        node.vm.hostname = "lab#{i}"        node.vm.network "private_network", ip: "11.11.11.11#{i}"        node.vm.provision "shell",          inline: "echo hello from node #{i}"        node.vm.provider "virtualbox" do |v|          v.cpus = 2          v.customize ["modifyvm", :id, "--name", "lab#{i}", "--memory", "3096"]          file_to_disk = "lab#{i}_vdb.vdi"          unless File.exist?(file_to_disk)            # 50GB            v.customize ['createhd', '--filename', file_to_disk, '--size', 50 * 1024]          end          v.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]        end      end    endend复制代码

环境配置说明

# 安装 glusterfs 每节点需要提前加载 dm_thin_pool 模块modprobe dm_thin_pool# 配置开启自加载cat >/etc/modules-load.d/glusterfs.conf<

安装glusterfs与heketi

# 安装 heketi client# https://github.com/heketi/heketi/releases# 去github下载相关的版本wget https://github.com/heketi/heketi/releases/download/v7.0.0/heketi-client-v7.0.0.linux.amd64.tar.gztar xf heketi-client-v7.0.0.linux.amd64.tar.gzcp heketi-client/bin/heketi-cli /usr/local/bin# 查看版本heketi-cli -v# 如下部署步骤都在如下目录执行cd heketi-client/share/heketi/kubernetes# 在k8s中部署 glusterfskubectl create -f glusterfs-daemonset.json# 查看 node 节点kubectl get nodes# 给提供存储 node 节点打 labelkubectl label node lab1 lab2 lab3 storagenode=glusterfs# 查看 glusterfs 状态kubectl get pods -o wide# 部署 heketi server # 配置 heketi server 的权限kubectl create -f heketi-service-account.jsonkubectl create clusterrolebinding heketi-gluster-admin --clusterrole=edit --serviceaccount=default:heketi-service-account# 创建 cofig secretkubectl create secret generic heketi-config-secret --from-file=./heketi.json# 初始化部署kubectl create -f heketi-bootstrap.json# 查看 heketi bootstrap 状态kubectl get pods -o widekubectl get svc# 配置端口转发 heketi serverHEKETI_BOOTSTRAP_POD=$(kubectl get pods | grep deploy-heketi | awk '{print $1}')kubectl port-forward $HEKETI_BOOTSTRAP_POD 58080:8080# 测试访问# 另起一终端curl http://localhost:58080/hello# 配置 glusterfs# hostnames/manage 字段里必须和 kubectl get node 一致# hostnames/storage 指定存储网络 ip 本次实验使用与k8s集群同一个ipcat >topology.json<

测试

# 创建 StorageClass# 由于没有开启认证# restuser restuserkey 可以随意写HEKETI_SERVER=$(kubectl get svc | grep heketi | head -1 | awk '{print $3}')echo $HEKETI_SERVERcat >storageclass-glusterfs.yaml<
gluster-pvc-test.yaml<
nginx-pod.yaml<
/usr/share/nginx/html/index.html' # 访问测试POD_ID=$(kubectl get pods -o wide | grep nginx-pod1 | awk '{print $(NF-1)}')curl http://$POD_ID # node 节点查看文件内容GLUSTERFS_POD=$(kubectl get pod | grep glusterfs | head -1 | awk '{print $1}')kubectl exec -ti $GLUSTERFS_POD /bin/shmount | grep heketicat /var/lib/heketi/mounts/vg_56033aa8a9131e84faa61a6f4774d8c3/brick_1ac5f3a0730457cf3fcec6d881e132a2/brick/index.html复制代码

参考文档

转载地址:http://rqkio.baihongyu.com/

你可能感兴趣的文章
道术结合,方可修炼成架构师
查看>>
Apache Pulsar中的地域复制,第2篇:模式和实践
查看>>
JetBrains在CLion的Linux和OS X版本中引入Swift支持
查看>>
玩大了,开源协议修改引发MongoDB“大动荡”?
查看>>
独家揭秘:微博深度学习平台如何支撑4亿用户愉快吃瓜?
查看>>
数据不是石油,占得多未必有用
查看>>
IBM提出8位深度网络训练法,提速4倍同时保持高精度
查看>>
64位的Mac OS X也有Windows.Forms了
查看>>
VS 2019要来了,是时候了解一下C# 8.0新功能
查看>>
Chrome 42禁用NPAPI和相关插件:Java、Unity和Silverlight
查看>>
自己动手用PHP编写一个简单的HTTP Server(单进程版)
查看>>
React从入门到精通系列之(19)彻底理解React如何重新处理DOM(Diffing算法)
查看>>
从战争到外包软件开发:如何赢得最后胜利
查看>>
华中科大提出EAT-NAS方法:提升大规模神经模型搜索速度
查看>>
TensorFlow发布1.12.0版本,改善XLA稳定性和性能
查看>>
Box开源持续本土化平台Mojito
查看>>
CentOS 6.5下利用Docker使用Letsencrypt
查看>>
url到一个网页经历的什么
查看>>
为了监视快递小哥,我做了一个小程序!
查看>>
Swift 关联类型
查看>>