欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

关于Local Persistent Volumes

文中将Local Persistent Volumes简称为Local PV;

  1. Kubernetes的Local PV自1.7版本进行alpha发布,在1.10版本beta发布,最终的正式发布(General Availability)是在1.14版本;
  2. 一个Local PV对应指定节点上的一处本地磁盘空间;
  3. 相比NFS之类的远程存储,Local PV提供了本地IO带来的更好性能;

和HostPath Volume的区别

Local PV出现之前,使用本地磁盘的方法是HostPath Volume,同为使用本地磁盘,区别在哪呢?

  1. 最重要的区别,就是Local PV和具体节点是有关联的,这意味着使用了Local PV的pod,重启多次都会被Kubernetes scheduler调度到同一节点,而如果用的是HostPath Volume,每次重启都可能被Kubernetes scheduler调度到新的节点,然后使用同样的本地路径;
  2. 当我们要用HostPath Volume的时候,既可以在PVC声明,又可以直接写到Pod的配置中,但是Local PV只能在PVC声明,对于PV资源,通常都有专人管理,这样就避免了Pod开发者擅自使用本地磁盘带来的冲突和风险;
  3. 另外要注意的是,HostPath Volume和Local PV都是在使用本地磁盘,和常见的分布式文件系统相比,本地磁盘故障会导致数据丢失,保存重要数据请勿使用HostPath Volume和Local PV;

基本概念说完了,接下来实战体验;

实战环境信息

  1. 操作系统:CentOS Linux release 7.8.2003 (Core)
  2. kubernetes:1.15.3
  3. helm:2.16.1

体验Local PV的步骤简述

本次实战的目标是快速创建Local PV,并验证该Local PV正常可用,全文由以下部分组成:

  1. 创建Local PV;
  2. 通过helm下载tomcat的chart;
  3. 修改chart,让tomcat使用刚才创建的Local PV;
  4. 部署tomcat;
  5. 在服务器上检查文件夹已正常写入;

参考文章

如果您想了解Kubernetes和helm的更多信息,请参考:

  1. 《kubespray2.11安装kubernetes1.15》
  2. 《部署和体验Helm(2.16.1版本)》

准备完毕,开始实操;

创建PV

  1. 在kubernetes工作节点创建文件夹给Local PV使用,我这是:/root/temp/202005/24/local-pv/
  2. 给上述文件夹读写权限:chmod -R a+r,a+w /root/temp/202005/24/local-pv
  3. 创建文件local-storage-pv.yaml,内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /root/temp/202005/24/local-pv
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
  1. 关于local-storage-pv.yaml有以下几点需要注意:

    a. spec.storageClassName等于local-storage,后面的PVC中也要指定storageClassName等于local-storage;

    b. spec.nodeAffinity是必填参数,用于建立Local PV和节点的关系,spec.nodeAffinity.required,nodeSelectorTerms.matchExpressions.values的值包含node1,表示该Local PV可以在主机名为node1的节点创建;
  2. 执行命令kubectl apply -f local-storage-pv.yaml,即可创建PV;
  3. 执行kubectl describe pv example-pv检查是否创建成功,如下图红框所示,此PV已经可用:

使用PV

接下来通过helm部署tomcat,并且让tomcat使用上述Local PV,请确保helm已经装好;

  1. 增加helm仓库(带有tomcat的仓库):helm repo add bitnami https://charts.bitnami.com/bitnami
  2. 下载tomcat的chart:helm fetch bitnami/tomcat
  3. chart下载成功后,当前目录出现tomcat配置压缩包tomcat-6.2.4.tgz,解压:tar -zxvf tomcat-6.2.4.tgz
  4. 解压得到tomcat文件夹,进入后打开values.yaml文件,找到persistence节点,增加下图红框中的内容:

  5. 在tomcat目录下执行命令:helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
  6. 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的31835:

  7. 浏览器访问宿主机IP:31835,出现tomcat欢迎页面:

  8. 去目录/root/temp/202005/24/local-pv/检查磁盘使用情况,如下图,可见已分配给tomcat的PVC,并且写入了tomcat的基本数据:

  9. 再次查看Local PV,发现状态已经改变:



    至此可以确认,tomcat用上了Local PV,数据被保存在宿主机的指定文件夹;

清理Local PV

  1. 一般来说,清理PV要做如下操作:

    a. 删除pod,或者deployment;

    b. 删除pvc;

    c. 删除Local PV;
  2. 这里由于用上了helm,因此通过helm将上述步骤1和2执行掉,既命令helm delete tomcat001
  3. 再在local-storage-pv.yaml所在目录执行kubectl delete -f local-storage-pv.yaml即可删除Local PV;

至此,Local PV的学习和实践就完成了,如果您正在使用这种存储,希望本文能给您一些参考;

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...

https://github.com/zq2599/blog_demos

Kubernetes的Local Persistent Volumes使用小记的更多相关文章

  1. Kubernetes存储之Persistent Volumes简介

    简介 管理存储和管理计算有着明显的不同.PersistentVolume子系统给用户和管理员提供了一套API,从而抽象出存储是如何提供和消耗的细节.在这里,我们介绍两种新的API资源:Persiste ...

  2. kubernetes支持local volume

    目录 local volume 创建一个storage class 静态创建PV 使用local volume PV 动态创建PV local volume kubernetes从1.10版本开始支持 ...

  3. Kubernetes Storage Persistent Volumes

    链接:https://kubernetes.io/docs/concepts/storage/persistent-volumes/ 支持的参数,比如mountOptions在这里可以找到 删除正在被 ...

  4. no persistent volumes available for this claim and no storage class is set FailedBinding -- nfs --存储

    添加PV标签oc label pv registrypv disktype=registry oc get pv --show-labels NAME CAPACITY ACCESSMODES REC ...

  5. 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...

  6. 浅析Kubernetes的工作原理

    先放一张Kubernetes的架构图: 整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解析. 1.元数据存储与集群维护 作为一个集群 ...

  7. kubernetes大概的工作原理

    先放一张Kubernetes的架构图: 整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解析. 1.元数据存储与集群维护 作为一个集群 ...

  8. 轻松理解 Kubernetes 的核心概念

    Kubernetes 迅速成为云环境中软件部署和管理的新标准. 与强大的功能相对应的是陡峭的学习曲线. 本文将提供 Kubernetes 的简化视图,从高处观察其中的重要组件,以及他们的关联. 硬件 ...

  9. 给小白的 PG 容器化部署教程(下)

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,< ...

随机推荐

  1. 2020 中国.NET 开发者峰会正式启动

    2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步. 2014年以来已经有众多知名公司加入.NET基金会,Google,微软,AWS三大云厂商已经齐聚.NET基金会 ...

  2. parted命令采用gpt分区过程

    Gpt无分区限制,故只有主分区,无扩展分区和逻辑分区.分区直接按容量算,不按柱面算. 查看分区:parted -l 将分区表类型转换为gpt.: 主要命令mklabel gpt 对sdc盘分区: [r ...

  3. linux的别名(alias/unalias)

    linux中有别名时先找的别名后找命令文件 临时创建是直接用alias. [root@localhost ~]# alias ls=pwd [root@localhost ~]# ls /root 其 ...

  4. 通过tuned-adm调整服务器的各种参数

    前言 centos7 服务器上面支持通过tuned进行统一的系统参数调整,以前我们可能会通过修改内核配置文件修改内核参数,通过echo去调整磁盘预读,等等很多调整会分散在各处 而系统实际上是可以通过一 ...

  5. burp使用

    只拦截特定网站数据包 我们以只拦截"www.baidu.com"为例 点击"Add"--布尔运算选择"And"--匹配类型选择"D ...

  6. Hbase启动报java异常

    在conf文件夹下的hbase-env.sh文件中的j添加ava_home的环境变量, ******************************************************** ...

  7. 深度分析:java设计模式中的原型模式,看完就没有说不懂的

    前言 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的 ...

  8. 如何用ABBYY FineReader 识别表格

    ABBYY FineReader有着强大的OCR文字识别功能,不但可以将文件转换为文本文档或Word文档,也可以识别PDF文件或者图片上的表格,并且转换为Excel文件. 下面小编就使用ABBYY F ...

  9. pytest测试框架入门

    安装pytest 命令行输入: pip install -U pytest 检查是否安装了正确的版本: λ pytest --version This is pytest version 5.3.5, ...

  10. CF1156D 0-1-Tree

    路径考虑顺序. 显然合法的路径只有以下两种: 一段 \(0\) 加一段 \(1\) 或一段 \(1\) 加一段 \(0\). 全 \(0\) 或全 \(1\). 用并查集将边权为 \(0\) 和 \( ...