小本本为你介绍:k8s基于storageclass的动态存储
作为k8s中创建有状态服务的一项必备技能,创建pv+pvc静态存储常常需要对底层存储资源各个方面的细节进行关注。而基于storageclass的动态存储则从根本上简化了这一流程。它使得用户只需要关注自己创建的pvc资源,并引用对应的storageclass资源,k8s系统会自动创建合适的pv,并将pv和pvc绑定实现动态存储。

如何创建动态存储?
创建基于storageclass的动态存储主要包括以下几个步骤:
步骤一:创建rbac授权
如果集群中开启了rbac,需要先创建rbac授权。请执行以下命令创建nfs-rbac.yaml文件,并执行kubectl apply -f nfs-rbac.yaml。
cat nfs-rbac.yaml
apiVersion:v1
kind:ServiceAccount
metadata:
name:nfs-client-provisioner
---
apiVersion:rbac.authorization.k8s.io/v1
kind:ClusterRole
metadata:
name:nfs-client-provisioner-clusterrole
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:["list","watch","create","update","patch"]
-
apiGroups:[""]
resources:["endpoints"]
verbs:["create","delete","get","list","watch","patch","update"]
---
apiVersion:rbac.authorization.k8s.io/v1
kind:ClusterRoleBinding
metadata:
name:nfs-client-provisioner-clusterrolebinding
subjects:
-
kind:ServiceAccount
name:nfs-client-provisioner
namespace:default
roleRef:
kind:ClusterRole
name:nfs-client-provisioner-clusterrole
apiGroup:rbac.authorization.k8s.io
步骤二:创建provisioner
接下来需要创建自动配置卷程序NFSProvisioner。执行以下命令创建nfs-deployment.yaml,并执行kubectl apply -f nfs-deployment.yaml
cat nfs-deployment.yaml
apiVersion:apps/v1
kind:Deployment
metadata:
name:nfs-client-provisioner
spec:
selector:
matchLabels:
app:nfs-client-provisioner
replicas:1
strategy:
type:Recreate
template:
metadata:
labels:
app:nfs-client-provisioner
spec:
serviceAccountName:nfs-client-provisioner
containers:
- name:nfs-client-provisioner
image:registry.cn-hangzhou.aliyuncs.com/rookieops/nfs-client-provisioner:v0.1
imagePullPolicy:IfNotPresent
volumeMounts:
- name:nfs-client-root
mountPath:/data/pv
env:
- name:PROVISIONER_NAME
value:rookieops/nfs
- name:NFS_SERVER
value:192.168.16.1
- name:NFS_PATH
value:/home/nfs
volumes:
- name:nfs-client-root
nfs:
server:192.168.16.1
path:/home/nfs
请注意:ip192.168.16.1为nfs的服务器地址 /home/nfs为nfs的共享目录
步骤三:创建storageclass
借助已经安装并能使用nfs的基础条件,我们可以创建一个新的storageclass。执行以下命令创建storageclass-naf.yaml文件,并执行kubectl apply -f storageclass-naf.yaml查看已创建的sc资源。
cat storageclass-naf.yaml
apiVersion:storage.k8s.io/v1
kind:StorageClass
metadata:
name:nfs-client-storageclass
provisioner:rookieops/nfs
请注意:provisioner的参数rookieops/nfs需要和创建的provisioner中的PROVISIONER_NAME对应。
步骤四:创建pvc
最后我们需要创建一个新的pvc资源。执行以下命令创建pvc.yaml,并执行kubectl get pvc 和 kubectl get pv查看新创建的绑定状态。
cat pvc.yaml
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:test-nfs-pvc2
annotations:
volume.beta.kubernetes.io/storage-class:"nfs-client-storageclass"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage:300Gi
总结
通过以上几个步骤,您已经成功创建了基于storageclass的动态存储。与传统的静态存储相比,它降低了您对存储资源细节的关注,使得您可以更加专注于业务的开发与实现。在您的k8s服务中使用动态存储将会大大提升您的工作效率。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6125.html
