您现在的位置:首页 >> 装修知识

走进云原生:K8s存储虚拟化及插件使用

发布时间:2025/11/07 12:18    来源:萧山家居装修网

取卷。同时,也获取了一种基于该软件的读取管理工作机制,根据摘序文可知PV Controller、AD Controller和Volume Manager均通过初始本土化Volume Plugin的机制API去执行者读取卷管理工作方面Provision、Attach操纵。因此,操纵的具体做到其实都取决于该软件中的的API逻辑。Volume Plugin可以允许除默认各种类型部份的其他读取维修服务接入到Kubernetes的系统中的,主要分为In-Tree和Out-of-Tree两类:

In-Tree类读取维修服务做到的源码都在Kubernetes主干示例库中的,优势在于和Kubernetes一起发布、管理工作和增量,相对稳定。但也因此忽视于更新增量速度慢、灵活性较差的疑问,属于紧交互作用的合作开发方式在; Out-of-Tree类读取维修服务通过扩展Volume Plugin脱离于Kubernetes部份,读取获取方须要基于Kubernetes盖子对接的读取API新标准先入行读取该软件的做到,就能采用Kubernetes的原生机制为盖子获取读取维修服务。而读取获取方的示例则可与Kubernetes示例彻底解耦,重新部署也与Kubernetes内部缓冲器分离。

在Kubernetes中的,读取该软件的合作开发手段有Flexvolume和CSI两种,年中通过原理和举例来说展示的手段做先入一步摘序文。

03 Felxvolume原理及举例来说展示

3.1 Flexvolume详述

Flexvolume获取了一种扩展Volume Plugin的手段,Gmail可以自定自己的读取该软件,做到Attach、Mount等机制API。比如AD Controller初始本土化该软件做到Attach操纵时,才会首先初始本土化Flexvolume中的的AttachAPI。Flexvolume是可被Kubelet特别设计的可执行者二先入制份文件,该份文件必须要做到Flexvolume的方面API,每一次初始本土化相当于执行者一次shell原作者,然后来到JSON格式的图表,因此其不是一个常驻内存的守护先入程。Flexvolume读取该软件默认的储藏一段距离是:/usr/libexec/kubernetes/kubelet-plugins/volume/exec//,Volume plugin缓冲器才会不断watch这个附序文来做到该软件获取的增删等机制。其中的,vendor~driver的名字和Pod中的flexVolume.driver的字段名相对应将,vendor之部份可自定。

3.2 FlexvolumeAPI界定

FlexvolumeAPI可以根据必须求自定的做到,比如采用NFS份文件读取,因为不忽视于读取卷的悬挂接操纵,因此不必须要做到Attach、Detach方面API,须要将API来到结果界定再加{"status":"Not supported","message":"error message"} 即可。不限列举Flexvolume之部份API:

3.3 Flexvolume举例来说展示

展示当年提条件:Kubernetes空降兵已具有NFS读取维修服务,并且NFS构建附序文已设置,jq机器已重新安装。

# mkdir -p /root/wq/nfs //设置构建附序文

# chmod 755 /root/wq/nfs

# vim /etc/exports //配置NFS,存储/root/wq/nfs *(rw,sync,no_root_squash)设置权限

# yum -y install

# yum install jq -y //重新安装jq机器

# systemctl restart rpcbind.service

# systemctl enable rpcbind.service

# systemctl restart nfs.service

# systemctl enable nfs.service //重启RPC和NFS,使配置作废

展解释器子采用Kubernetes此当年计算出来的一个基于NFS份文件读取的Flexvolume该软件解释器,原作者链接:。根据下图右图,在Flexvolume读取该软件默认的储藏一段距离建起该软件附序文wq-nfs,将原作者摆放附序文下,并等同于份文件可执行者权限。

然后重新部署一个Pod到登序文链表,并采用Flexvolume的手段对盖子中的的图表先入行正因如此本土化读取,详细yaml份文件章节如下。

apiVersion: v1

kind: Pod

metadata:

name: k8s-flexvolume #应将用于名称

namespace: flexvolume #登序文应将用于所在取名空间

spec:

nodeSelector:

kubernetes.io/hostname: kcs-ks-qq-m-snqnq #登序文应将用于重新部署链表

volumes:

- name: f-volume

flexVolume:

driver: "wq/nfs" #读取该软件界定,用做在默认该软件读取一段距离转发可执行者份文件

fsType: "nfs" #界定读取的系统各种类型

options: #界定读取维修服务所必须方面参数

server: "192.168.2.49"

share: "/root/wq/nfs" #登序文构建读取附序文

containers:

- name: nginx-proxy

image: nginx

ports:

- containerPort: 80

volumeMounts:

- name: f-volume

subPath: subfv

mountPath: /usr/share/nginx

通过核对Pod本地正因如此本土化附序文是否已被悬配置到了NFS读取的系统上,可以告知Flexvolume该软件是否也就是说接入。在NFS构建附序文下建起文本份文件,并存储一些章节,然后先入入Pod核对建起份文件和存储章节是否已同步,即可先入一步可验证读取是否悬配置再加功,详细操纵如下图右图。

04 CSI原理及举例来说展示

4.1 CSI详述

CSI是盖子读取APIContainer Storage Interface的简称,作用是为了能在盖子编排动力系统和读取的系统两者之间构建一套新标准的读取初始本土化API,先入而通过该API为盖子编排动力系统获取读取维修服务。

图 CSI该软件的设计架构

4.2 CSI读取体系及API界定

CSI读取体系主要由两之部份都由:External Components和Custom Components。

➢ External Components(Kubernetes缓冲缓冲器):主要包含Driver Registrar、External Attacher、External Provisioner三个之部份,这三个缓冲器源自Kubernetes原本的in-tree读取体系,可以理解为Kubernetes的一个缓冲Controller,统筹Watch Kubernetes的API能源都可,然后根据传唤到的平衡状态初始本土化Custom Components做到读取管理工作和操纵。

Driver Registrar:CSI Node-Driver-Registrar是一个Sidecar盖子,用做从CSI driver得到特别设计程序文档(采用NodeGetInfo),并采用Kubelet该软件注册机制在该链表上的 Kubelet中的对其先入行注册。 External Attacher:用做传唤Kubernetes VolumeAttachment都可,并针对特别设计程序尾端点触发CSI ControllerPublish和ControllerUnpublish操纵。 External Provisioner:传唤Kubernetes中的的PVC都可,初始本土化CSI对应将的创设、删除等Volume操纵。

❖注:External Components目当年仍由Kubernetes一个团队保障,该软件合作开发者无必须关心其做到先前。

➢ Custom Components(CSI读取该软件):主要包含CSI Identity、CSI Controller、CSI Node三个之部份,是必须要合作开发者通过格式来做到的,并以gRPC的手段对部份获取维修服务。

CSI Identity:用做对部份暴露这个该软件本身的文档,当年提该软件的有益平衡状态。

service Identity {

// 来到该软件的名称和旧版本

rpc GetPluginInfo(GetPluginInfoRequest)

returns (GetPluginInfoResponse) {}

// 来到该软件具有所有机制

rpc GetPluginCapabilities(GetPluginCapabilitiesRequest)

returns (GetPluginCapabilitiesResponse) {}

// 检测该软件的有益平衡状态,是否正在接入

rpc Probe (ProbeRequest)

returns (ProbeResponse) {}

}

CSI Controller:用做做到Volume管理工作程序中的Provision和Attach过渡期操纵,比如创设和删除Volume、对Volume先入行Attach/Detach(Publish/UnPublish)操纵等。CSI Controller从前界定的所有维修服务都有一个携手特色,那就是无必须在宿主机上先入行操纵。

service Controller {

// 创设读取卷

rpc CreateVolume (CreateVolumeRequest)

returns (CreateVolumeResponse) {}

// 删除读取卷

rpc DeleteVolume (DeleteVolumeRequest)

returns (DeleteVolumeResponse) {}

// Attach卷,即将读取介质悬挂发来目的链表

rpc ControllerPublishVolume (ControllerPublishVolumeRequest)

returns (ControllerPublishVolumeResponse) {}

// Unattach卷

rpc ControllerUnpublishVolume (ControllerUnpublishVolumeRequest)

returns (ControllerUnpublishVolumeResponse) {}

// 来到读取卷具有的机制,比如是否全力支一向悬配置到多个链表上等

rpc ValidateVolumeCapabilities (ValidateVolumeCapabilitiesRequest)

returns (ValidateVolumeCapabilitiesResponse) {}

// 来到所有最简单读取卷

rpc ListVolumes (ListVolumesRequest)

returns (ListVolumesResponse) {}

// 来到读取能源池的最简单空间大小

rpc GetCapacity (GetCapacityRequest)

returns (GetCapacityResponse) {}

// 来到controller该软件具有的机制,比如是否全力支一向Snapshot机制等

rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest)

returns (ControllerGetCapabilitiesResponse) {}

// 创设动态

rpc CreateSnapshot (CreateSnapshotRequest)

returns (CreateSnapshotResponse) {}

// 删除动态

rpc DeleteSnapshot (DeleteSnapshotRequest)

returns (DeleteSnapshotResponse) {}

// 列出动态

rpc ListSnapshots (ListSnapshotsRequest)

returns (ListSnapshotsResponse) {}

// 扩容

rpc ControllerExpandVolume (ControllerExpandVolumeRequest)

returns (ControllerExpandVolumeResponse) {}

}

CSI Node:用做操纵Kubernetes链表上Volume的方面机制操纵。Volume在链表的Mount全过程被分为NodeStageVolume和NodePublishVolume两个过渡期,当年者针对块读取各种类型将读取电子的系统格式本土化后,先悬配置到链表的一个全局的临时附序文,之后再行初始本土化NodePublishVolumeAPI将附序文悬配置先入Pod中的登序文的附序文上。

service Node {

// 在Kubernetes链表上格式本土化读取卷,并将其悬配置到一个全局的临时附序文

rpc NodeStageVolume (NodeStageVolumeRequest)

returns (NodeStageVolumeResponse) {}

// NodeStageVolume的自是操纵,将读取卷从临时附序文卸载掉

rpc NodeUnstageVolume (NodeUnstageVolumeRequest)

returns (NodeUnstageVolumeResponse) {}

// 将读取卷从全局的临时附序文悬配置到登序文的目的附序文(Pod内的附序文)

rpc NodePublishVolume (NodePublishVolumeRequest)

returns (NodePublishVolumeResponse) {}

// NodePublishVolume的自是操纵,将读取卷从Pod附序文卸载掉

rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest)

returns (NodeUnpublishVolumeResponse) {}

// 来到最简单于该卷的卷量统计文档

rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest)

returns (NodeGetVolumeStatsResponse) {}

// Kubernetes链表上执行者卷扩容

rpc NodeExpandVolume(NodeExpandVolumeRequest)

returns (NodeExpandVolumeResponse) {}

// 来到链表该软件具有的所有机制,比如是否全力支一向Stage/Unstage机制

rpc NodeGetCapabilities (NodeGetCapabilitiesRequest)

returns (NodeGetCapabilitiesResponse) {}

// 来到链表的一些文档

rpc NodeGetInfo (NodeGetInfoRequest)

returns (NodeGetInfoResponse) {}

}

4.3 CSI举例来说展示

展示当年提条件:Kubernetes空降兵中的已重新安装NFS方面的CSI特别设计,用做实践通过CSI的手段采用NFS份文件读取。Kubernetes此当年有一个基于CSI特别设计做到NFS读取的建设项目可以用做紧接著实践,链接如下:,同时获取不限两种重新安装重新部署手段。

l 远程重新安装:通过不限下达回访Github一键重新安装。

# curl -skSL | bash -s v3.1.0 便是 //本次解释器重新安装csi-driver-nfs旧版本为v3.1.0,也可重新安装其他旧版本

l 本地重新安装:通过将建设项目Clone到本地,再行执行者重新安装原作者手段先入行重新安装。

# git clone

# cd csi-driver-nfs

# ./deploy/install-driver.sh v3.1.0 local

接入原作者后,可通过下达”kubectl -n kube-system get pod -o wide -l app=csi-nfs-controller”和”kubectl -n kube-system get pod -o wide -l app=csi-nfs-node”核对Pod平衡状态,如下右图则表示已重新安装完毕。可以留意到,csi-nfs-node才会以DaemonSet的手段在每个链表上接入,并执行者读取卷的Mount/Unmount操纵。

csi-driver-nfs重新安装顺利进行时后,就可以通过”spec.csi.driver”的规章来初始本土化特别设计采用NFS读取。下面我们先通过Static Volume Provisioning,也就是静态PV的原材料手段初始本土化CSI特别设计创设PV。然后通过PVC采用这个PV,顺利进行时PVC和PV的链接操纵。

# Static Volume Provisioning创设PV所用yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv-csi-nfs

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

persistentVolumeReclaimPolicy: Retain

mountOptions:

- hard

- nfsvers=4.1

csi:

driver: nfs.csi.k8s.io

readOnly: false

volumeHandle: unique-volumeid

volumeAttributes:

server: 192.168.2.49

share: /root/wq/nfs

# Static Volume Provisioning创设PVC所用yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvc-csi-nfs

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 1Gi

volumeName: pv-csi-nfs # 登序文必须要采用的PV

storageClassName: ""

实际操纵全过程如下图右图。可以看到,通过CSI特别设计,PV创设再加功并已受制于可采用的平衡状态。此时,便可通过PVC采用这个PV,PVC在创设后才会与PV先入行链接,链接再加功后PV的平衡状态也才会发生改变。

年中,我们再行通过Dynamic Volume Provisioning,动态PV的原材料手段做先入一步的展示。该手段来得Static Volume Provisioning,空降兵管理工作员无必须再行预先分配PV,而只是创设一个SC常量份文件,Gmail在通过PVC采用PV时,无必须再行关心PV所必须的参数先前,因为这些文档已经预先设置到了SC从前。

# Dynamic Volume Provisioning创设SC所用yaml

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

name: sc-csi-nfs

provisioner: nfs.csi.k8s.io

parameters:

server: 192.168.2.49

share: /root/wq/nfs

reclaimPolicy: Delete

volumeBindingMode: Immediate

mountOptions:

- hard

- nfsvers=4.1

# Dynamic Volume Provisioning创设PVC所用yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvc-sc-csi-nfs

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 1Gi

storageClassName: sc-csi-nfs

实际操纵全过程如下图右图。可以看到,SC、PVC创设再加功,PVC通过SC初始本土化CSI特别设计自动生再加了PV(pvc-4c45d45b-ec52-4276-9cbd-589964da73b3),并事与愿违与PVC顺利进行时了链接。

05 总结

本文摘序文了Kubernetes读取架构及该软件的采用,主要以部份不限三之部份章节:

第一之部份摘序文了Kubernetes读取的基本知识、上都架构、读取机制摘序文以及读取该软件的概念; 第二之部份对FlexVolume先入行了摘序文,描述了其用做合作开发的API界定,并通过一个实际的举例来说展示了Flexvolume的采用方法; 第三之部份对CSI先入行了摘序文,判别了其读取体系结构以及合作开发API界定,最后通过实际的举例来说展示了如何通过CSI该软件以静态或者动态的手段采用PV先入行读取。

引文

[1] 《Kubernetes权威指南:从Docker到Kubernetes实践雷电》

[2]

[3]

[4]

[5]

[6]

安徽精神心理医院预约挂号
贵州生殖感染医院哪家正规
长春皮肤病检查
郑州风湿治疗费用
海南皮肤病医院哪家医院好
21岁男咳嗽吐黄痰怎么办
眼部鼻部整形
退烧
甲流咳嗽吃哪种止咳药好
血脂高

上一篇: iPhone 13成京东618最热门的机型之一 京东下单自行决定机型立减600元

下一篇: 来自太空的设计!魅族PANDAER × XOG 白火星舟联名耳机发布

友情链接