Kubernetes的Local Persistent Volumes使用小记

简介: Local Persistent Volumes使用小记

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于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,同为使用本地磁盘,区别在哪呢?
  4. 最重要的区别,就是Local PV和具体节点是有关联的,这意味着使用了Local PV的pod,重启多次都会被Kubernetes scheduler调度到同一节点,而如果用的是HostPath Volume,每次重启都可能被Kubernetes scheduler调度到新的节点,然后使用同样的本地路径;
  5. 当我们要用HostPath Volume的时候,既可以在PVC声明,又可以直接写到Pod的配置中,但是Local PV只能在PVC声明,对于PV资源,通常都有专人管理,这样就避免了Pod开发者擅自使用本地磁盘带来的冲突和风险;
  6. 另外要注意的是,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正常可用,全文由以下部分组成:
  4. 创建Local PV;
  5. 通过helm下载tomcat的chart;
  6. 修改chart,让tomcat使用刚才创建的Local PV;
  7. 部署tomcat;
  8. 在服务器上检查文件夹已正常写入;

    参考文章

    如果您想了解Kubernetes和helm的更多信息,请参考:
  9. 《kubespray2.11安装kubernetes1.15》
  10. 《部署和体验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
    
  4. 关于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的节点创建;
  5. 执行命令kubectl apply -f local-storage-pv.yaml,即可创建PV;
  6. 执行kubectl describe pv example-pv检查是否创建成功,如下图红框所示,此PV已经可用:
    在这里插入图片描述

    使用PV

    接下来通过helm部署tomcat,并且让tomcat使用上述Local PV,请确保helm已经装好;
  7. 增加helm仓库(带有tomcat的仓库):helm repo add bitnami https://charts.bitnami.com/bitnami
  8. 下载tomcat的chart:helm fetch bitnami/tomcat
  9. chart下载成功后,当前目录出现tomcat配置压缩包tomcat-6.2.4.tgz,解压:tar -zxvf tomcat-6.2.4.tgz
  10. 解压得到tomcat文件夹,进入后打开values.yaml文件,找到persistence节点,增加下图红框中的内容:
    在这里插入图片描述
  11. 在tomcat目录下执行命令:helm install --name-template tomcat001 -f values.yaml . --namespace hello-storageclass
  12. 查看tomcat的pod和service情况,一切正常,并且端口映射到了宿主机的31835:
    在这里插入图片描述
  13. 浏览器访问宿主机IP:31835,出现tomcat欢迎页面:
    在这里插入图片描述
  14. 去目录/root/temp/202005/24/local-pv/检查磁盘使用情况,如下图,可见已分配给tomcat的PVC,并且写入了tomcat的基本数据:
    在这里插入图片描述
  15. 再次查看Local PV,发现状态已经改变:
    在这里插入图片描述
    至此可以确认,tomcat用上了Local PV,数据被保存在宿主机的指定文件夹;

    清理Local PV

  16. 一般来说,清理PV要做如下操作:
    a. 删除pod,或者deployment;
    b. 删除pvc;
    c. 删除Local PV;
  17. 这里由于用上了helm,因此通过helm将上述步骤1和2执行掉,既命令helm delete tomcat001
  18. 再在local-storage-pv.yaml所在目录执行kubectl delete -f local-storage-pv.yaml即可删除Local PV;

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

欢迎关注阿里云开发者社区:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8天前
|
存储 Kubernetes 安全
k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战
k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战
77 0
|
10月前
|
存储 Kubernetes NoSQL
kubernetes之volumes使用
kubernetes之volumes使用
77 0
|
存储 Kubernetes 固态存储
Kubernetes 存储概念之Volumes介绍
Kubernetes 存储概念之Volumes介绍
162 0
|
存储 Kubernetes 容器
在阿里云容器K8S服务中使用PV为pod来Mount Volumes
容器服务可以自动将Kubernetes pods绑定到阿里云磁盘、NAS、OSS上。 下面进行OSS创建PV、PVC等操作。
598 0
在阿里云容器K8S服务中使用PV为pod来Mount Volumes
|
存储 Kubernetes 关系型数据库
技术干货 | K8S如何引入Volumes?
Number1 为什么引入Volume? 当container crash的时候,kubelet将会重启它,里面之前运行的数据将会丢失,容器将以一个clean state的状态来启动。 运行在pod中的containers通常会共享数据,volumes的概念就是为了解决这些问题。
2623 0
|
7天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
1天前
|
存储 Kubernetes 监控
Kubernetes 集群的持续性能优化策略
【5月更文挑战第22天】 在微服务架构日益普及的背景下,容器编排成为关键性技术之一。其中,Kubernetes 凭借其强大的功能、灵活的扩展性和便捷的管理特性,成为业界广泛采用的解决方案。然而,随着集群规模的扩大和业务复杂度的增加,性能问题逐渐凸显,影响系统稳定性和响应效率。本文聚焦于 Kubernetes 集群的性能优化,提出一系列持续优化的策略,旨在帮助运维人员系统性地分析和解决性能瓶颈,提升集群运行效率。通过实际案例分析与经验总结,为读者呈现一套实用的性能调优方法论。
|
3天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
35 3
|
4天前
|
存储 运维 监控
Kubernetes 集群的监控与性能优化策略
【5月更文挑战第19天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes已成为部署、管理和扩展服务的关键平台。然而,随着集群规模的增长和服务的复杂化,有效的监控和性能优化成为确保系统稳定性和高效性的重要挑战。本文将探讨针对Kubernetes集群监控的最佳实践,并提出一系列性能优化策略,旨在帮助运维人员识别潜在的瓶颈,保障服务的持续可靠性及响应速度。
|
6天前
|
资源调度 Kubernetes 监控
Kubernetes 集群性能优化实践
【5月更文挑战第17天】在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随着集群规模的增长和业务复杂度的提升,性能优化成为确保系统稳定性与高效运行的关键。本文将深入探讨 Kubernetes 集群性能优化的策略与实践,覆盖从节点资源配置到网络通信优化,再到高效的资源调度机制,旨在为运维人员提供系统的优化路径和具体的操作建议。