当前位置: 首页 > news >正文

部署NFS版StorageClass(存储类)

部署NFS版StorageClass存储类

    • NFS版PV动态供给StorageClass(存储类)
      • 基于NFS实现动态供应
      • 下载`NFS存储类资源清单`
      • 部署NFS服务器
      • 为StorageClass(存储类)创建所需的RBAC
      • 部署nfs-client-provisioner的deployment
      • 创建StorageClass
      • 使用存储类创建PVC

NFS版PV动态供给StorageClass(存储类)

  • 存储类的好处之一便是支持PV的动态供给,它甚至可以直接被视作为PV的创建模版,用户用到持久性存储时,需要通过创建PVC来绑定匹配的PV,此类操作需求较大,或者当管理员手动创建的PV无法满足PVC的所有需求时,系统按PVC的需求标准动态创建适配的PV会为存储管理带来极大的灵活性,不过仅那些属于StorageClassPVCPV才能产生绑定关系,即没有指定StorageClassPVC只能绑定同类的PV
  • 存储类对象名称至关重要,它是用户调用的标识,创建存储类对象时,除了名称之外,还需要为其定义三个关键字段。provisioner(供应者)parameter(参数)reclaimPolicy(回收策略)
  • 所以kubernetes提供了一种可以动态分配的工作机制,可用自动创建PV,该机制依赖于StorageClassAPI,将某个存储节点划分1T给kubernetes使用,当用户申请5Gi的PVC时,会自动从这1T的存储空间去创建一个5Gi的PV,而后自动与之进行关联绑定。
  • 动态PV供给的启用需要事先创建一个存储类,不同的Provisoner(供应者)的创建方法各有不同,并非所有的存储卷插件都由Kubernetes内建支持PV动态供给。

基于NFS实现动态供应

参考: https://www.cnblogs.com/xunweidezui/p/16930975.html

由于kubernetes内部不包含NFS驱动,所以需要使用外部驱动;
nfs-subdir-external-provisioner是一个自动供应器,它使用NFS服务端来支持动态供应
NFS-subdir-external- provisioner实例负责监视PersistentVolumeClaims(PVC)请求StorageClass,并自动为它们创建NFS所支持的PresistentVolumes(PV)


下载NFS存储类资源清单

NFS版StorageClass插件GitHub项目地址: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

部署NFS Provisioner参考

免积分下载部署yaml


部署NFS服务器

https://blog.csdn.net/omaidb/article/details/120926883


为StorageClass(存储类)创建所需的RBAC

nfs-rbac.yaml示例

---
# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:name: storage
---
# 创建服务账号
kind: ServiceAccount
apiVersion: v1
metadata:# 服务账号名name: nfs-client-provisioner# 替换为deployment的命名空间namespace: storage
---
# 创建集群角色
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:# 集群角色名name: nfs-client-provisioner-runner
# 添加集群角色权限
rules:- apiGroups: [""]# 向该角色增加对PV执行查看,创建,删除 权限resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]# 向该角色增加对PVC执行查看,更新 权限resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]# 向该角色增加对动态存储类执行查看 权限resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]# 向该角色增加对events(集群事件)进行 创建 更新 补丁 权限resources: ["events"]verbs: ["create", "update", "patch"]
---
# 创建集群角色绑定
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:# 角色绑定的名称name: run-nfs-client-provisioner
subjects:# 绑定服务账号- kind: ServiceAccount# 要绑定的服务账号名--就是第一个yaml创建的saname: nfs-client-provisioner# 绑定到哪个命名空间namespace: storage
roleRef:kind: ClusterRole# 要绑定的集群角色名--就是第2个yaml创建的集群角色name: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
# 创建role
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:# 创建的角色名name: leader-locking-nfs-client-provisioner
rules:- apiGroups: [""]# 向该角色增加对endpoint 查看 创建 更新 补丁 的权限resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
# 创建role绑定
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:# 该角色绑定的名字name: leader-locking-nfs-client-provisioner
subjects:- kind: ServiceAccount# 要绑定的服务账号名--就是第一个yaml创建的服务账号name: nfs-client-provisioner# 替换为deployment要部署到的命名空间# 绑定到storage命名空间namespace: storage
roleRef:kind: Role# 要绑定的角色名称,就是上一个yaml创建的rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

# 清理rbac授权
kubectl delete -f nfs-rbac.yaml -n kube-system# 执行rbac授权
kubectl apply -f nfs-rbac.yaml

部署nfs-client-provisioner的deployment

apiVersion: apps/v1
kind: Deployment
metadata:# Deployment名name: nfs-client-provisionerlabels:app: nfs-client-provisioner# 部署到哪个命名空间namespace: storage
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:# 使用哪个服务账号serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisioner# image: lizhenliang/nfs-subdir-external-provisioner:v4.0.1image: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVER# NFS服务器地址value: 192.168.31.63- name: NFS_PATH# NFS服务器share目录value: /ifs/kubernetesvolumes:- name: nfs-client-rootnfs:# NFS服务器地址server: 192.168.31.63# NFS服务器share目录path: /ifs/kubernetes

创建StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # 或选择其他名称,必须与部署的环境 PROVISIONER_NAME 匹配
parameters:# 启用PV归档模式 true|falsearchiveOnDelete: "false"

使用存储类创建PVC

---
# 创建pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:# pvc名称name: pv-volume
spec:# 存储类名称storageClassName: nfs-clientaccessModes:- ReadWriteOnceresources:requests:storage: 10Mi # pvc容量

http://www.mrgr.cn/news/98088.html

相关文章:

  • 文献总结:AAAI2025-UniV2X-End-to-end autonomous driving through V2X cooperation
  • SAP系统客户可回收包材库存管理
  • 强化学习系统在复杂推理模型中的应用——以AReaL系统为例
  • RPA VS AI Agent
  • 解决VS2022中scanf报错C4996
  • 第十六届蓝桥杯 省赛C/C++ 大学B组
  • 前端工程化-包管理NPM-package.json 和 package-lock.json 详解
  • C++基础精讲-01
  • CTF web入门之命令执行 完整版
  • 前端面试宝典---创建对象的配置
  • leetcode-动态规划25
  • Linux基础命令解释
  • mysql相关面试题
  • 银行业务发展历史
  • python相关面试题
  • C_内存 内存地址概念
  • C++学习之ORACLE③
  • 【LaTeX】
  • 《系统分析师-浏览试卷—总结》
  • C++指针(二)