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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本小节主要内容为存储卷介绍,包括: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启动后状态是不变的;
  • 应用需要稳定的网络标识。

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
6天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
26 4
|
5天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
23 1
|
8天前
|
消息中间件 运维 UED
消息队列运维实战:攻克消息丢失、重复与积压难题
消息队列(MQ)作为分布式系统中的核心组件,承担着解耦、异步处理和流量削峰等功能。然而,在实际应用中,消息丢失、重复和积压等问题时有发生,严重影响系统的稳定性和数据的一致性。本文将深入探讨这些问题的成因及其解决方案,帮助您在运维过程中有效应对这些挑战。
15 1
|
9天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
10天前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
23 1
|
15天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
15天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
80 0
|
3天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。