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

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

开发者学堂课程【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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
四张图片道清AI大模型的发展史(1943-2023)
现在最火的莫过于GPT了,也就是大规模语言模型(LLM)。“LLM” 是 “Large Language Model”(大语言模型)的简称,通常用来指代具有巨大规模参数和复杂架构的自然语言处理模型,例如像 GPT-3(Generative Pre-trained Transformer 3)这样的模型。这些模型在处理文本和语言任务方面表现出色,但其庞大的参数量和计算需求使得它们被称为大模型。当然也有一些自动生成图片的模型,但是影响力就不如GPT这么大了。
5224 0
|
9月前
|
IDE 测试技术 数据库
【YashanDB知识库】使用vmware虚拟机安装的YashanDB,本机无法访问
在 VMware 虚拟机中安装并测试 YashanDB,数据库及虚拟机运行正常,但本地 IDE 工具无法连接虚拟机中的数据库。问题可能与 VMware 网络适配器配置或网络模式(如 NAT、桥接)有关,导致网络通信异常。需检查虚拟机网络设置、IP 地址配置以及防火墙规则,确保本地与虚拟机间网络连通性。目前无明确修复版本。
|
9月前
|
关系型数据库 Java 数据库连接
【YashanDB知识库】Kettle迁移PostgreSQL到YashanDB
本文介绍了在Windows环境下使用开源工具Kettle将PostgreSQL数据迁移到YashanDB的方法,适用于YMP不支持PostgreSQL的场景。环境配置包括Kettle 8.3、JAVA 1.8、PostgreSQL 12和YashanDB 23.2.1.100。通过设置JAVA环境变量、解压作业包、启动Kettle图形界面,配置数据库连接(PostgreSQLInput与YashanOutput)以及修改表清单文件等步骤,最终执行总任务完成数据迁移。若迁移失败,可通过日志定位问题并重试,目标表会在每次同步前被truncate以避免数据冲突。
【YashanDB知识库】Kettle迁移PostgreSQL到YashanDB
|
10月前
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块
YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块
269 1
YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
852 1
|
Java Android开发
全志 Android 11:实现响应全局按键
本文介绍了在全志平台Android 11上实现响应全局按键的方法,通过修改`TvWindowManager.java`来全局拦截特定的热键事件,并在`FocusActivity`中处理这些事件以启动调焦界面和控制步进电机调整焦距。
190 2
|
Java Windows
Win环境安装Protobuf 2.0 版本
Win环境安装Protobuf 2.0 版本
362 1
|
存储 Python
`tempfile`模块在Python中用于创建临时文件和目录。
`tempfile`模块在Python中用于创建临时文件和目录。
|
JSON 监控 安全
使用Objective-C开发的局域网监控微信的追踪系统
在当今数字化时代,随着社交软件的普及,人们越来越多地依赖于微信等应用来进行交流。然而,对于一些特定的情况,例如家长想要监控孩子的聊天记录,或者企业需要监督员工的通讯内容,开发一款能够监控微信的追踪系统显得尤为重要。在本文中,我们将介绍如何使用Objective-C语言来开发一款局域网监控微信的追踪系统,并且提供一些代码示例。
371 0
|
Java 计算机视觉
我的自描外挂制作日志——FPS类游戏的自瞄【优化改进2】
我的自描外挂制作日志——FPS类游戏的自瞄【优化改进2】
357 0