k8s通过StorageClass动态提供 pv和pvc
1.PV 和 和 PVC 模式都是需要先创建好PV,然后定义好 PVC 和 和 pv 进行一对一的 Bond ,但是如果 PVC 请求成千 上万,那么就需要创建成千上万的 PV ,对于运维人员来说维护成本很高,Kubernetes 提供一种自动创建 PV 的机制, 叫StorageClass** ,它的作用就是创建 PV 的模板。k8s 集群管理员通过创建storageclass 可以动态生成一个存 储卷 pv 供 k8s pvc 使用
2.每个 StorageClass 都包含字段 provisioner ,parameters 和 reclaimPolic
3.具体来说,StorageClass 会定义以下两部分:
PV 的属性 ,比如存储的大小、类型等;
创建这种 PV 需要使用到的存储插件,比如 Ceph 、NFS 等
有了这两部分信息, Kubernetes 就能够根据用户提交的 PVC ,找到对应的 StorageClass ,然后
Kubernetes 就会调用 StorageClass 声明的存储插件,创建出需要的 PV
以 NFS 为例 , 要想使用 NFS ,我们需要一个 nfs-t client 的自动装载程序, 称之为 provisioner , 这个程序会使用我们已经配置好的NFS 服务器自动创建持久卷,也就是自动帮我们创建 PV.
1.安装 nfs provisioner ,用于 配合 存储类动态生成 pv
创建 运行 nfs- -r provisioner 需要的 sa 账号
cat > serviceaccount.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
EOF
kubectl apply -f serviceaccount.yaml
kubectl get sa
什么是 sa ?
sa 的全称是 serviceaccount 。
serviceaccount 是为了方便 Pod 里面的进程调用 Kubernetes API 或其他外部服务而设计的 。
指定了serviceaccount 之后,我们把pod 创建出来了,我们在使用这个pod 时,这个pod 就有了
我们指定的账户的权限了 。
对 sa 授权
kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
安装 nfs-provisioner 程序
mkdir /data/nfs_pro -p #把data/nfs_pro变成nfs共享的目录
cat >> /etc/exports << EOF
/data/nfs_pro *(rw,no_root_squash)
EOF
exportfs -arv #使NFS配置生效
cat > nfs-deployment.yaml << EOF
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-provisioner
spec:
selector:
matchLabels:
app: nfs-provisioner
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-provisioner
image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: example.com/nfs
- name: NFS_SERVER
value: 192.168.243.180 #这IP是NFS共享服务器的IP,你们要修改为你们自己的IP
- name: NFS_PATH
value: /data/nfs_pro/
volumes:
- name: nfs-client-root
nfs:
server: 192.168.243.180 #这IP是NFS共享服务器的IP,你们要修改为你们自己的IP
path: /data/nfs_pro/
EOF
kubectl apply -f nfs-deployment.yaml
kubectl get pods |grep nfs #过滤看到pod运行正常
2.创建 storageclass ,动态供给 pv
cat > nfs-storageclass.yaml << EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs
EOF
kubectl apply -f nfs-storageclass.yaml
kubectl get storageclass
3.创建 pvc , 通过 storageclass 动态 生成 pv
cat > claim.yaml << EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim1
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 1Gi
storageClassName: nfs
EOF
kubectl apply -f claim.yaml
标题:k8s通过StorageClass动态提供 pv和pvc
作者:lipl666
地址:http://www.lipeilong.space:8088/articles/2025/09/04/1756973835099.html