十三、kubernetes 1.29 之 存储 storageClass存储类、补全命令
本文介绍了Kubernetes中StorageClass的概念及其动态存储机制,重点讲解了nfs-client-provisioner的实现方法。StorageClass允许管理员定义存储类型并实现持久卷的动态供给。文章详细说明了NFS服务器的搭建步骤,包括安装、配置和共享目录设置。同时提供了nfs-client-provisioner的Deployment配置、RBAC权限设置以及Storage
一、storageClass存储类
一种动态申请存储的机制
1、概念
StorageClass 是一种资源对象,用于定义持久卷(Persistent Volumes)的动态供给(Dynamic Provisioning)策略。StorageClass 允许管理员定义不同类型的存储,并指定如何动态创建持久卷以供应用程序使用。这使得 Kubernetes 集群中的存储管理更加灵活和自动化。
静态 动态

2、nfs-client-provisioner
nfs-client-provisioner 是一个 Kubernetes 供应商,用于动态提供由 NFS(Network File System)共享支持的持久卷。在 Kubernetes 中,持久卷是独立于 pod 存在的存储资源,可以在 pod 重新启动或重新调度时持久地存储数据。
nfs-client-provisioner 自动化了根据需要创建持久卷的过程,通过与 NFS 服务器交互。在需要在 Kubernetes 集群中为应用程序动态分配存储而无需手动管理 NFS 共享和持久卷创建的情况下,这尤其有用。
搭建服务器上一节做过了(主节点)
# 安装 nfs 服务器 $ dnf install nfs-utils rpcbind $ mkdir /nfs $ chown nobody /nfs $ /etc/exports /nfs *(rw,sync,no_subtree_check) $ systemctl enable nfs-server && systemctl start nfs-server $ showmount -e 192.168.10.11新建目录,vi /etc/exorot
权限限制
chown -R nobody /nfsdata/share/重启+开机自启
systemctl restart nfs-server systemctl enable nfs-server systemctl enable rpcbind检查是否共享出来
showmount -e 192.168.125.101
创建、client资源清单
# 1. Deployment:部署nfs-client-provisioner容器 kind: Deployment apiVersion: apps/v1 # 原文档缺失,补充标准apiVersion metadata: name: nfs-client-provisioner # 控制器名称 namespace: nfs-storageclass # 命名空间(后续创建) spec: replicas: 1 # 原文档缺失,补充默认副本数1,想高可用改成2 selector: matchLabels: app: nfs-client-provisioner strategy: type: Recreate # 重建策略(更新时先删旧Pod再建新Pod) template: metadata: labels: app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner # 关联服务账户 containers: - name: nfs-client-provisioner # 镜像地址(国内镜像,避免国外镜像拉取失败) image: k8s.dockerproxy.com/sig-storage/nfs-subdir-external-provisioner:v4.0.2 volumeMounts: - name: nfs-client-root # 挂载卷名称 mountPath: /persistentvolumes # 容器内挂载路径(存储数据的目录) # 环境变量:配置NFS服务器信息 env: - name: PROVISIONER_NAME value: k8s-sigs.io/nfs-subdir-external-provisioner # 供应者名称(需与StorageClass匹配) - name: NFS_SERVER value: 192.168.125.101 # NFS服务器IP(替换为实际IP) - name: NFS_PATH value: /nfsdata/share # NFS服务器上的共享目录(替换为实际路径) volumes: - name: nfs-client-root # 定义卷,关联NFS共享 nfs: # 原文档缺失“nfs”类型,补充 server: 192.168.125.101 # NFS服务器IP path: /nfsdata/share # NFS共享目录创建、sc,权限授权
apiVersion: v1 kind: ServiceAccount metadata: name: nfs-client-provisioner namespace: nfs-storageclass --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nfs-client-provisioner-runner rules: - apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] - apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["create", "update", "patch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: run-nfs-client-provisioner subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: nfs-storageclass # 绑定指定命名空间的服务账户 roleRef: kind: ClusterRole name: nfs-client-provisioner-runner apiGroup: rbac.authorization.k8s.io --- # 5. Role:定义命名空间内权限(仅nfs-storageclass命名空间) apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: leader-locking-nfs-client-provisioner namespace: nfs-storageclass rules: - apiGroups: [""] resources: ["endpoints"] # 资源类型:端点(用于 leader 选举,避免多副本冲突) verbs: ["get", "list", "watch", "create", "update", "patch"] --- # 6. RoleBinding:将Role绑定到ServiceAccount apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: leader-locking-nfs-client-provisioner namespace: nfs-storageclass subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: nfs-storageclass roleRef: kind: Role name: leader-locking-nfs-client-provisioner apiGroup: rbac.authorization.k8s.io创建、存储类创建
# 7. StorageClass:定义动态存储供给策略 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-client namespace: nfs-storageclass provisioner: k8s-sigs.io/nfs-subdir-external-provisioner parameters: pathPattern: "${.PVC.namespace}/${.PVC.name}" reclaimPolicy: Delete
创建、 名字空间
kubectl create ns nfs-storageclass启动
kubectl apply -f ../19/
二、插曲
安装,允许对选项进行补全
yum install bash-completion编辑,
vi .bashrc source <(kubectl completion bash)刷新后,可以补全和查看选项了
更多推荐








所有评论(0)