企业级运维之云原生与Kubernetes实战课程 - 第一章第5讲 Kubernetes存储

简介: 本小节主要内容为存储卷介绍,包括:Persistent Volumes(PV)、Persistent VolumesClaim(PVC)的特点及使用。

企业级运维之云原生与Kubernetes实战课程

第一章第5Kubernetes存储

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14599

 

摘要:本小节主要内容为存储卷介绍,包括:Persistent Volumes(PV)Persistent VolumesClaim(PVC)的特点及使用。

 

目录

  • Volume存储卷介绍
  • Persistent Volumes(PV)
  • Persistent VolumesClaim(PVC)

 

 

一、Volume存储卷介绍

 

1.  什么是存储卷

 

K8s容器运行时,在没有做日志持久化的情况下,容器重启后导致日志丢失,这时就需要一个中间设备,既可以被Pod调用将日志输出,又可以被分析应用读取(如GrafanaElastic)进行相关分析,这个中间设备就是存储卷。

 image.png

 

2.  存储卷类型

 

a.  本地存储/hostpath

 

  • Emptydir Pod 被分配给节点时,先创建 emptyDir 卷,并且只要该 Pod 在该节点上运行,该卷就会存在,它最初是空的,Pod 中的容器可以读取和写入emptyDir 卷中的相同文件,该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,emptyDir 中的数据将被永久删除。如果Pod发生重启,而emptydir使用了medium(内存)模式,则有可能没有被删除。

 

  • Hostpath将宿主机上的目录挂载到Pod上,实现容器与宿主机的共享。

 

b.  网络存储

 

云厂商阿里、awsgoogle会提供类似云盘、OSSNAS等的网络存储。

 

c.  Projected Volume

 

  • ConfigMap

 

  • ConfigMap提供了向Pod注入数据的方法,以键值对方式存储在K8s系统中;
  • 两种使用方式:环境变量引用、数据卷的方式挂载;
  • 可以定义一个Pod,以环境变量的形式进行使用,引用configmap或者通过挂载数据卷的方式,定义Volume类型为configmap,再去引用configmap信息,数据卷的方式挂载是以文件的方式挂载到容器的定义的路径下;
  • 两种方式区别:configmap热更新时如果使用环境变量方式,需要手动方式更新环境变量,Pod所引用的configmap才会生效;而使用数据卷挂载方式,更新configmapPod所引用的configmap会生效(有10秒到1分钟的延迟)。

 

  • Secret

 

Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。Secret 有几种类型:

 

  • Opaquebase64编码格式的Secret,用来存储密码、密钥等,相当来说不安全;

 

  • SAServiceAccout):用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的特点目录中。每个Pod都有SA,路径/run/secrets/kubernets.io/serviceaccount,包含了公钥、namespacetoken

 

  • 其他:像tls客户端或服务端进行数据加密,ssh的身份认证secret;用于储存镜像仓库的认证信息的dockerconfigjson,在镜像拉取时,可以通过引用的方式使用。

 

d.  PVCPV体系

 

二、Persistent Volumes(PV)

 

1.  Pod中声明的volume的生命周期与Pod相同,常见场景:

 

a. Pod销毁重建(Deployment管理的Pod镜像升级)

b. 宿主机故障迁移(StatefulSet管理的Pod带远程volume迁移)

c. Pod共享同一个数据volume

d. 数据volume snapshotresize等功能的扩展实现;

 

2.  PV的不足之处

 

使用Pod Volumes无法准确表达数据volume复用/共享语义,新功能扩展很难实现。

 

3.  PV的优化

 

如果能将存储与计算分离,使用不同的组件(Controllers)管理存储与计算资源,解耦PodVolume的生命周期关联,可以很好解决这些场景下的问题。

 

PV(Persistent Volumes)定义一种存储资源类似CPUMemory,类型可以为云盘、NAS可以是只读(RO)、可读可写(RW)等。

 

三、Persistent VolumesClaim(PVC)

 

1.  PVC是什么

 

存储对于上层应用Pod而言,并不关心底层存储是通过哪种方式创建,而是注重存储大小、挂载的方式,这时需要定义存储格式、类型,由定义去找符合条件的存储,于是PVC就产生了。

 

2. 有了PV,为什么又设计了PVC

 

  • 职责分离,PVC中只用声明自己需要的存储sizeaccess mode(单node独占还是多node共享、只读还是读写访问)等业务真正关心的存储需求(不用关心存储实现细节)PV和其对应的后端存储信息则由交给cluster admin统一运维和管控,安全访问策略更容易控制。
  • PVC简化了User对存储的需求,PV才是存储的实际信息的承载体,通过kube-controller-manager中的PersisentVolumeControllerPVC与合适的PV bound到一起,从而满足User对存储的实际需求。
  • PVC像是面向对象编程中抽象出来的接口,PV是接口对应的实现。

 

3. Static Volume Provisioning

 

Static Volume Provisioning表示已在集群中创建完成存储资源,在Pod指定时,同时通过PVC进行分配挂载存储卷。

 

Static Volume Provisioning的不足:

Cluster Admin需要提前规化或预测存储需求,而User的需求是多样化的,很容易导致 User提交的PVC找不到合适的PV

 

更好的方式:

Cluster Admin只创建不同类型存储的模板,UserPVC中指定使用哪种存储模板以及自己需要的大小、访问方式等参数,然后K8s自动生成相应的PV对象。

 image.png

 

4. Dynamic Volume Provisioning

 

集群没有提供可用PV,通过PVCStorage Class创建所需要的PV,然后挂载到Pod上。这就是声明定义创建PV,而不需要关注创建的细节,K8s则会结合PVCSC两者的信息动态创建PV对象。

image.png

 

5. 静态使用PVPVC(以云盘为例)

 image.png

 

  • 编写yaml创建一个PV,定义PV名字、大小等信息(可以使用命令kubectl get pv查看);
  • 编写PVCyaml文件,定义PVC名称、PVC接入方式、需要PV的大小,然后创建PVC后会自动绑定上面创建的PV

 image.png

 

5. 动态使用PVPVC

 image.png

 

动态PVPVC不需要定义PV资源,只需要在Storage Class(可以认为是存储插件进行调用资源)的yaml中定义名称、调用的存储插件、文件的形式、是否加密、回收模式等信息,然后创建Storage Class,再创建statefulset类型的Pod与之关联;

statefulset创建多个副本数是有序的,首先创建完成一个Pod副本后才会创建下一个,且副本名字无论是删除或重拉后都是不变的,挂载的存储会重新挂载到新拉起的Pod上。

假如statefulset创建了三个Pod,进行更新为2个副本后,删除的副本一定是最后创建的那个副本。

 

statefulset特点:

  • Pod名称是statefulset-序号
  • 有序部署
  • 有序删除
  • 有序拓展

访问方式可以通过Pod的名字或headless名字如:

headless  nginx.namespace.svc.cluster.local

web-0.nginx1.default.svc.cluster.local

 image.png

 

statefulset的使用场景:

 

  • 应用需要稳定持久化存储;
  • 应用是有序的,无论Pod发生什么变化,Pod启动后状态是不变的;
  • 应用需要稳定的网络标识。

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
507 1
|
5月前
|
人工智能 运维 监控
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
172 0
|
7月前
|
人工智能 运维 安全
基于合合信息开源智能终端工具—Chaterm的实战指南【当运维遇上AI,一场效率革命正在发生】
在云计算和多平台运维日益复杂的今天,传统命令行工具正面临前所未有的挑战。工程师不仅要记忆成百上千条操作命令,还需在不同平台之间切换终端、脚本、权限和语法,操作效率与安全性常常难以兼顾。尤其在多云环境、远程办公、跨部门协作频繁的背景下,这些“低效、碎片化、易出错”的传统运维方式,已经严重阻碍了 IT 团队的创新能力和响应速度。 而就在这时,一款由合合信息推出的新型智能终端工具——Chaterm,正在悄然颠覆这一现状。它不仅是一款跨平台终端工具,更是业内率先引入 AI Agent 能力 的“会思考”的云资源管理助手。
|
6月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
3月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
9月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
754 17
|
9月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
10月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
249 17
|
11月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
627 12

热门文章

最新文章