Kubernetes的Local Persistent Volumes使用小记

欢迎访问个人GitHub

https://github.com/zq2599/blog_demosnode

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

关于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,同为使用本地磁盘,区别在哪呢?github

  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正常可用,全文由如下部分组成:api

  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版本)》

准备完毕,开始实操;tomcat

建立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

相关文章
相关标签/搜索