欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
关于Local Persistent Volumes 文中将Local Persistent Volumes简称为Local PV;
Kubernetes的Local PV自1.7版本进行alpha发布,在1.10版本beta发布,最终的正式发布(General Availability)是在1.14版本; 一个Local PV对应指定节点上的一处本地磁盘空间; 相比NFS之类的远程存储,Local PV提供了本地IO带来的更好性能; 和HostPath Volume的区别 Local PV出现之前,使用本地磁盘的方法是HostPath Volume,同为使用本地磁盘,区别在哪呢?
最重要的区别,就是Local PV和具体节点是有关联的,这意味着使用了Local PV的pod,重启多次都会被Kubernetes scheduler调度到同一节点,而如果用的是HostPath Volume,每次重启都可能被Kubernetes scheduler调度到新的节点,然后使用同样的本地路径; 当我们要用HostPath Volume的时候,既可以在PVC声明,又可以直接写到Pod的配置中,但是Local PV只能在PVC声明,对于PV资源,通常都有专人管理,这样就避免了Pod开发者擅自使用本地磁盘带来的冲突和风险; 另外要注意的是,HostPath Volume和Local PV都是在使用本地磁盘,和常见的分布式文件系统相比,本地磁盘故障会导致数据丢失,保存重要数据请勿使用HostPath Volume和Local PV ; 基本概念说完了,接下来实战体验;
实战环境信息 操作系统:CentOS Linux release 7.8.2003 (Core) kubernetes:1.15.3 helm:2.16.1 体验Local PV的步骤简述 本次实战的目标是快速创建Local PV,并验证该Local PV正常可用,全文由以下部分组成:
创建Local PV; 通过helm下载tomcat的chart; 修改chart,让tomcat使用刚才创建的Local PV; 部署tomcat; 在服务器上检查文件夹已正常写入; 参考文章 如果您想了解Kubernetes和helm的更多信息,请参考:
《kubespray2.11安装kubernetes1.15》 ;《部署和体验Helm(2.16.1版本)》 ;准备完毕,开始实操;
创建PV 在kubernetes工作节点创建文件夹给Local PV使用,我这是:/root/temp/202005/24/local-pv/ 给上述文件夹读写权限:chmod -R a+r,a+w /root/temp/202005/24/local-pv 创建文件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
关于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 的节点创建;
执行命令kubectl apply -f local-storage-pv.yaml ,即可创建PV; 执行kubectl describe pv example-pv 检查是否创建成功,如下图红框所示,此PV已经可用: 使用PV 接下来通过helm部署tomcat,并且让tomcat使用上述Local PV,请确保helm已经装好;
增加helm仓库(带有tomcat的仓库):helm repo add bitnami https://charts.bitnami.com/bitnami 下载tomcat的chart:helm fetch bitnami/tomcat chart下载成功后,当前目录出现tomcat配置压缩包tomcat-6.2.4.tgz,解压:tar -zxvf tomcat-6.2.4.tgz 解压得到tomcat文件夹,进入后打开values.yaml文件,找到persistence 节点,增加下图红框中的内容: 在tomcat目录下执行命令:helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的31835: 浏览器访问宿主机IP:31835 ,出现tomcat欢迎页面: 去目录/root/temp/202005/24/local-pv/ 检查磁盘使用情况,如下图,可见已分配给tomcat的PVC,并且写入了tomcat的基本数据: 至此可以确认,tomcat用上了Local PV,数据被保存在宿主机的指定文件夹;
清理Local PV 一般来说,清理PV要做如下操作:
a. 删除pod,或者deployment;
b. 删除pvc;
c. 删除Local PV; 这里由于用上了helm,因此通过helm将上述步骤1和2执行掉,既命令helm delete tomcat001 再在local-storage-pv.yaml所在目录执行kubectl delete -f local-storage-pv.yaml即可删除Local PV; 至此,Local PV的学习和实践就完成了,如果您正在使用这种存储,希望本文能给您一些参考;
关于K8S环境 如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE :无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;
如果您希望自己的镜像可以通过外网上传和下载,推荐腾讯云容器镜像服务TCR :像数据加密存储,大镜像多节点快速分发,跨地域镜像同步
你不孤单,欣宸原创一路相伴 Java系列 Spring系列 Docker系列 kubernetes系列 数据库+中间件系列 DevOps系列 欢迎关注公众号:程序员欣宸 微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...X2RlbW9zL21hc3Rlci9maWxlcy9hYmMuanBn?x-oss-process=image/format,png)