应用存储和持久化数据卷:存储快照与拓扑调查(一)|学习笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 快速学习应用存储和持久化数据卷:存储快照与拓扑调查(一)

开发者学堂课程【Kubernetes 入门应用存储和持久化数据卷:存储快照与拓扑调查(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/51/detail/1016


应用存储和持久化数据卷:存储快照与拓扑调查(一)


 内容介绍:

一、基本知识

二、用例解读

三、操作演示

四、处理流程

 

一、基本知识

1、存储快照产生背景

l 如何保证重要数据在误操作之后可以快速恢复,以提高数据操作容错率?

l 如何能够快速进行复制,迁移重要数据的动作?如进行环境复制与数据开发等。

Kubernetes CSI Snapshotter controller 正是为了解决这些需求而设计的

2、存储快照用户接口- restore

PersistentVolumeClaim 扩展字段.spec.dataSource 可以指定为 VolumeSnapshot 对象,从而根据 PVC 对象生成的新PV对象,对应的存储数据是从 VolumeSnapshot 关联的 VolumeSnapshotContent restore 出来的

image.png

3、本讲讨论 Topology(拓扑)的含义

l 这里讨论的拓扑是指对 Kubernetes 集群中管理的 Nodes 的按照一定的规则划分的”位置”关系,并通过在 Node 的 Labels 中设置以标识自己属于某一个具体的拓扑位置,如 Node Labels 包括:. failure-domain.beta.kubernetes.iolregion => us-central1#拓扑域为 Region 范围

l failure-domain.beta.kubernetes.io/zone => us-central1-a#拓扑域为 Zone 范围

l kubernetes.io/hostname => nodename # 拓扑域为 node 范围

当然也可以自定义一个字符串key 来表示一个具体的拓扑域,key 所能设置的不同的 value 代表该拓扑域下不同的拓扑位置,如rack 可以用来将属于同一个机架(rack )上的服务器( nodes )划分为一组(如一个具体的拓扑 rack => rack1 ) ,以区别另一个 rack 上的一组机器的“位置”(如 rack => rack2)。

4、存储拓扑调度产生背景

Kubernetes 中通过 PVC&PV 体系将存储与计算分离,即使用不同的 Controllers 管理存储资源和计算资源。但如果创建的 PV 有访问“位置”(.spec.nodeAffinity)的限制,也就是只有在特定的一些 Nodes 上才能访问 PV。原有的创建 Pod 的与创建PV的流程的分离,就无法保证新创建的 Pod 被调度到可以访问 PV 的 Nodes 上,最终导致 Pod 无法正常运行起来。如

场景1.Local PV 只能在指定的 Node 上被 Pod 使用

5、存储拓扑调度产生背景

场景2:单 Region 多 Zone K8s 集群,阿里云云盘当前只能被同一个 Zone 的 Node 上的 Pod 访问

6、存储拓扑调度

1.本质问题

PV 在 Binding 或者 Dynamic Provisioning 时,并不知道使用它的 Pod 被会调度到哪些 Node 上?但 PV 本身的访问对 Node 的“位置”(拓扑)有限制。

⒉流程改进

Binding/Dynamic Provisioning PV 的操作 Delay 到 Pod 调度结果确定之后做,好处:

对于 pre-provisioned 的含有 Node Affinity 的 PV 对象,可以在 Pod 运行的 Node 确认之后,根据 Node 找到合适的 PV 对象,然后与 Pod 中使用的 PVC  Binding,保证 Pod 运行的 Node 满足 PV 对访问”位置”(拓扑)的要求。

·对于 dynamic provisioning PV 场景,在 Pod 运行的 Node 确认之后,可以结合Node 的”位置”(拓扑)信息

创建可被该 Node 访问的PV对象

3. Kubernetes 相关组件改进

. pV Controller:支持延迟 Binding 操作

. Dynamic PV Provisioner:动态创建 PV 时要结合 Pod 待运行的 Node 的”位置”

(拓扑)信息

. Scheduler:选择 Node 时要考虑 Pod 的 PVC Binding 需求,也就是要结合 pre-provisioned 的 PV 的 NodeAffinity 以及 dynamic provisioning 时 PVC 指定StorageClass.AllowedTopologies 的限制

 

二、用例解读

1、volume Snapshot/Restore 示例

#创建 VolumeSnapshotClass 对象

apiVersion: snapshot.storage.k8s.io/lv1alpha1

kind: VolumeSnapshotClass

metadata:

name: disk-snapshotclass

snapshotter: diskplugin.csi.alibabacloud.com #指定 VolumeSnapshot 时使用的 Volume Plugin

# 创建 VolumeSnapshot 对象

apiVersion: snapshot.storage.k8s.iolv1alpha1

kind: VolumeSnapshot

metadata:

name: disk-snapshotspec:

snapshotClassName: disk-snapshotclass

source:

name: disk-pvc #Snapshot 的数据源

kind: PersistentVolumeClaim

#从snapshot 中恢复数据到新生成的 PV 对象中

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: restore-pvc

spec:

dataSource:

name: disk-snapshot

kind: VolumeSnapshot

apiGroup: snapshot.storage.k8s.io

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 20Gi

storageClassName: csi-disk

2、Local PV 示例

#创建一个 no-provisioner StorageClass 对象,目的是告诉 PV

# Controller 遇到.spec.storageClassName 为 local-storage 的

# PVC 暂不做 Binding 操作

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: local-storage

provisioner: kubernetes.io/no-provisioner

volumeBindingMode: WaitForFirstConsumer # deley binding

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: local-pvc

spec:

storageClassName: local-storage

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 60Gi

#创建 Local PV 对象

apiVersion: v1

kind: PersistentVolume

metadata:

name: local-pv

spec:

capacity:

storage: 60Gi

accessModes:

- ReadWriteOnce

persistentVolumeReclaimPolicy: Retain

storageClassName: local-storage

local:

path: /share

nodAffinity:#限制该  PV只能在 node1上被使用 required:

nodeSelectorTerms:

- matchExpressions:

- key: kubernetes.io/hostname#拓扑域限制:单 node 可访问

operator: In

values:

- node1

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
消息中间件 存储 缓存
写入内容丢失,各种数据库或者存储系统如何处理?
写入内容丢失,各种数据库或者存储系统如何处理?
74 0
|
存储 算法
数据仓库数据模型之:极限存储--历史拉链表
摘要: 在数据仓库的数据模型设计过程中,经常会遇到文内所提到的这样的需求。而历史拉链表,既能满足对历史数据的需求,又能很大程度的节省存储资源。 在数据仓库的数据模型设计过程中,经常会遇到这样的需求:1. 数据量比较大;2. 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等;3. 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的
5573 0
|
5天前
|
存储 运维 数据挖掘
服务器数据恢复—华为OceanStor存储数据恢复案例
服务器存储数据恢复环境: 华为品牌型号为OceanStor S2600T的存储设备,存储上有一组由24块4T容量的机械硬盘组建的RAID5阵列,作为存储池使用。 图1 服务器存储故障&检测: 存储设备中raid5阵列上多块硬盘出现故障离线,raid5阵列失效,数据无法正常访问。 关机后将存储中所有硬盘标记&取出,硬件工程师对所有硬盘进行硬件故障检测。经过检测,没有发现存在物理故障的磁盘,都可以正常读取。
|
1月前
|
存储 消息中间件 大数据
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
38 1
|
6月前
|
存储 Kubernetes 调度
K8S常见的持久化(存储)方案用法详解
K8S常见的持久化(存储)方案用法详解
565 3
|
6月前
|
消息中间件 存储 缓存
Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
131 1
|
存储 Kubernetes 应用服务中间件
应用存储和持久化数据卷:核心知识(二)|学习笔记
快速学习应用存储和持久化数据卷:核心知识(二)
121 0
应用存储和持久化数据卷:核心知识(二)|学习笔记
|
存储 缓存 NoSQL
缓存(1) —— 总述:分级存储
缓存(1) —— 总述:分级存储
591 0
|
存储 算法 数据安全/隐私保护
带你读《存储漫谈:Ceph原理与实践》——3.2.4 元数据 / 数据布局
带你读《存储漫谈:Ceph原理与实践》——3.2.4 元数据 / 数据布局
|
存储 缓存 NoSQL
H2存储内核分析一
现在做数据库一般都才有 C/C++ 获取其它编译型的语言,为什么会选择 h2 这种基于 java 的语言?会不会影响效率?其实回答这个问题很简单,无论是用什么语言来实现数据库,其实都是在调用操作系统 IO 的函数。因此仅仅是作为存储的话差别其实是不大的。 现在大多数,涉及到存储内核的文章或者讲义,要么是一堆原理,要么就是玩具版本例子,根本无法应用到实际的工程上面去,就像马保国的闪电五连鞭一样。我们选择 h2 的一个重要原因就是,学习完后,可以直接应用到工程上。行不行直接在擂台上比一下就知道了。
H2存储内核分析一