开发者学堂课程【Kubernetes 入门: 应用存储和持久化数据卷:核心知识(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/51/detail/1015
应用存储和持久化数据卷:核心知识(二)
三、操作演示
###系统管理员预先创建PV ### apiVersion: v1 kind: PersistentVolume metadata: name: nas-csi-pv spec: capacity: storage: 5Gi #该volume的总容量大小 accessModes: - ReadWriteMany # 该volume可以被多个node上的pod挂载使用且都具有读写权限 persistentVolumeReclaimPolicy: Retain #该volume使用后被release之后的回收策略 csi: driver: nasplugin.csi.alibabacloud.com #指定由什么volume plugin来挂载该volume(需要提前在node上部署) volumeHandle: data-id volumeAttributes: host: "***.cn-beijing.nas.aliyuncs.com" path: "/k8s" vers: "4.0" |
###用户创建PVC### #nas-pvc与nas-csi-pv匹配,将由 # PersistentVolumeController将两者 # bound到一起 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi ###用户创建Pod ### ... spec: containers: - name: nginximage: nginx:1.7.9 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: /data volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-pvc |
Dynamic Volume Provisioning
###系统管理员创建###
l # StorageClass 就像动态创建PV的模板,为创建 PV 对象提供必要的参数
apiVersion: storage.k8s.iolv1
kind: StorageClass
metadata:
name: csi-disk
l #指定使用什么 volume plugin 来 create/deletelattach/detach/mount/unmount
新 PV #该 volume plugin 需要部署到 k8s cluster 中
provisioner: diskplugin.csi.alibabacloud.com
parameters:
regionld: cn-Beijing
zoneld: cn-beijing-b
fsType: ext4
type: cloud_ssd
reclaimPolicy: Delete
1、PV Spec 其他重要字段解析
l Capacity:存储总空间
AccessModes: PV 访问策略控制列表,必须同 PVC 的访问策略控制列表匹配才能绑定( bound )
. ReadWriteOnce 只允许单 node 访问
. ReadOnlyMany 允许多个 node 只读访问
. ReadWriteMany 允许多 node 读写访问
一个PV可以设置多个访问策略,PVC 与 PV bound 时,PV Controller 会优先找到 AccessModes 列表最短并且匹配 PVC AccessModes 列表的 PV 集合,然后从该集合中找到 Capacity 最小且符合 PVC size 需求的 PV 对象
PersistentVolumeReclaimPolicy: PV 被 release 之后(与之 bound 的 PVC 被删除)回收再利用策略
. Recycle (已废弃)
. Delete: volume 被 released 之后直接 delete,需要 volume plugin 支持
. Retain:默认策略,由系统管理员来手动管理该 volume
StorageClassName: PVC 可通过该字段找到相同值的 PV(静态 provisioning ) ,也可通过该字段对应的 storageclass 从而动态 provisioning 新 PV 对象
NodeAffinity:限制可以访问该 volume 的 nodes,对使用该 volume 的 pod 的调度有影响(因为使用该 volume 的 pod 只能调度能访问该 PV 的 node 上才能正常工作)
2、PV 状态流转
说明:到达 released 状态的 PV 无法根据 Reclaim Policy 回到 available 状态而再次 bound 新的 PVC。此时,如果想复用原来 PV 对应的存储中的数据,只有两种方式:
1.复用 old PV 中记录的存储信息新建 PV 对象。
2.直接从 PVC 对象复用,即不 unbound PVC 和 PV (即:StatefulSet 处理存储状态的原理)。
四、架构设计
Pod 创建, mount PV 到启动 container 流程
PV provision/attach 流程
csi 是存储插件实现的官方推荐方式,分为两种:
l 第一种是由社区区域实现的通用的部分 csi-provisioner、csi-attacher
l 对接云存储服务
分为三个阶段:
1、应用提交完 PVC 由 csi-provisioner 创建存储
2、由 create new Pv 生成 bound
3、提交 pod 调度 node,运行的 node 被选出来之后会被 ADController watch 到我的 pod 选中了 node,然后去插到 pod 中使用了哪些 PV,会生成VolumeAttachment 的对象,经过 csi-attacher attach 到 csi-controller-server 中,最后到 Cloud StorageVendor 中