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

本文共 3391 字,大约阅读时间需要 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://zszfo.baihongyu.com/

你可能感兴趣的文章
【 D3.js 入门系列 --- 3 】 做一个简单的图表!
查看>>
mybatis0208 缓存
查看>>
svn回退到具体的版本
查看>>
全栈JavaScript路(八)得知 CDATASection 种类 节点
查看>>
JSP模板文本
查看>>
javascript于boolean类型转换,运营商&amp;&amp;和|| 返回值
查看>>
iOS远程推送之友盟Push
查看>>
Socket tips: UDP Echo service - Client code
查看>>
NYOJ 1076 计划数(公式 要么 递归)
查看>>
Loading half a billion rows into MySQL---转载
查看>>
iOS边练边学--通知机制和键盘处理小练习
查看>>
PHP源代码生成 main/config.w32.h
查看>>
深入分析面向对象中的封装作用
查看>>
JAVA 位操作学习
查看>>
mybatis实战教程(mybatis in action)之三:实现数据的增删改查
查看>>
【转】mysql的cardinality异常,导致索引不可用
查看>>
Babel6.x 转换ES6
查看>>
深刻理解Python中的元类(metaclass)
查看>>
mysql 5.7 zip 文件在 windows下的安装
查看>>
Java编程的逻辑 (44) - 剖析TreeSet
查看>>