1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

k8s基于storageclass的动态存储

小本本为你介绍:k8s基于storageclass的动态存储

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

k8s基于storageclass的动态存储

如何创建动态存储?

创建基于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