Kubernetes认证考试自学系列 | 动态卷供应

籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes认证考试自学系列 | 汇总_热爱编程的通信人的博客-CSDN博客


6.5.1 storageClass的工作流程

定义storageClass时必须要包含一个分配器(provisioner),不同的分配器指定了动态创建pv时使用什么后端存储。

可以是以aws-ebs作为pv的后端存储,也可以是以lv作为pv的后端存储,也可以是以hostPath作为pv的后端存储。

在用storageClass动态创建pv的时候,根据使用后端存储的不同,应该选择一个合适的分配器,但是像
http://lvmplugin.csi.alibabacloud.comhttp://hostpath.csi.k8s.io这样的分配器,既然不是kubernetes自带的,那是哪里来的呢?

这些非内置的分配器暂且称为外部分配器,这些外部分配器由第三方提供,是通过自定义CSIDriver(容器存储接口驱动)来实现的分配器。

所以整个流程就是,管理员创建storageClass时会通过.provisioner字段指定分配器。管理员创建好storageClass之后,用户在定义pvc时需要通过.spec.storageClassName指定使用哪个storageClass,如图6-8所示。

当创建pvc的时候,系统会通知storageClass,storageClass会通过它所关联的分配器来获取后端存储类型,然后动态地创建一个pv和此pvc进行绑定。

6.5.2 利用nfs创建动态卷供应

前面已经用NFS配置过共享文件夹了,因为配置起来相对简单,所以这里以NFS作为后端存储来配置动态卷供应。

步骤1:自行在存储服务器192.168.26.30上创建一个目录/vdisk,并共享这个目录。

[root@vms30 ~]# cat/etc/exports 
/123      *(rw,async,no_root_squash)
/zz     *(rw,async,no_root_squash)
/vdisk    *(rw,async,no_root_squash)
[root@vms30 ~]# exportfs -avr 
exporting *:/vdisk 
exporting *:/zz 
exporting *:/123
[root@vms30 ~]#

因为kubernetes里,NFS没有内置分配器,所以需要下载相关插件来创建NFS外部分配器。

步骤2:在vms10上先安装git客户端工具。

[root@vms10 volume]# yum install git -y
   ... 输出 ...
[root@vms10 volume]#

步骤3:克隆项目并进入目录。

[root@vms10 volume]# git clone https://github.com/kubernetes-incubator/external-storage.git
正克隆到 'external-storage'...
   ... 输出 ...
[root@vms10 volume]#
[root@vms10 volume]# cd external-storage-master/nfs-client/deploy/
[root@vms10 deploy]#

步骤4:部署rbac权限。

需要把rbac.yaml里指定的命名空间更换为nsvolume,然后部署rbac。

[root@vms10 deploy]# sed -i 's/namespace: default/namespace: nsvolume/g' rbac.yaml 
[root@vms10 deploy]#
[root@vms10 deploy]# kubectl apply -f rbac.yaml 
   ... 输出 ...
[root@vms10 deploy]#

步骤5:修改
/etc/kubernetes/manifests/kube-apiserver.yaml。

在kubernetes v1.20及之后的版本里,还需要修改
/etc/kubernetes/manifests/kube-apiserver.yaml,增加:

- --feature-gates=RemoveSelfLink=false

然后重启kubelet。

6.5.3 部署NFS分配器

因为NFS分配器不是自带的,所以这里需要先把NFS分配器创建出来。

步骤1:用vim编辑器打开deployment.yaml,修改如下内容。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner 
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed 
  namespace: nsvolume
   ... 输出 ...
    spec:
      serviceAccountName: nfs-client-provisioner 
      containers:
      - name: nfs-client-provisioner 
        image: quay.io/external_storage/nfs-client-provisioner: latest 
        imagePullPolicy: IfNotPresent 
        volumeMounts:
        - name: nfs-client-root
          mountPath: /persistentvolumes
        env:
        - name: PROVISIONER_NAME 
          value: fuseim.pri/ifs 
        - name: NFS_SERVER 
          value: 192.168.26.30
        - name: NFS_PATH
          value: /vdisk
      volumes:
      - name: nfs-client-root 
        nfs:
          server: 192.168.26.30
          path: /vdisk

步骤2:部署NFS分配器。

[root@vms10 deploy]# kubectl apply -f deployment.yaml 
deployment.apps/nfs-client-provisioner created 
[root@vms10 deploy]# 

步骤3:查看pod的运行情况。

[root@vms10 deploy]# kubectl get pods
NAME                                        READY    STATUS    RESTARTS    AGE
nfs-client-provisioner-7544459d44-dpjtx     1/1      Running   0           5s
[root@vms10 deploy]#  

6.5.4 部署storageClass

创建了NFS分配器之后,下面开始创建一个使用这个分配器的storageClass。

步骤1:创建storageClass。

在当前目录里有一个名为class.yaml的文件,用于创建storageClass,内容如下。

[root@vms10 deploy]# cat class.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass 
metadata:
  name: managed-nfs-storage 
provisioner: fuseim.pri/ifs
parameters:
  archiveOnDelete: "false"
[root@vms10 deploy]#

这个yaml文件的意思是创建一个名字是managed-nfs-storage的storageClass,使用名字为fuseim.pri/ifs的分配器。

步骤2:查看现在是否存在storageClass。

[root@vms10 deploy]# kubectl get sc 
No resources found 
[root@vms10 deploy]#

步骤3:部署并查看storag Class。

[root@vms10 deploy]# kubectl apply -f class.yaml
storageclass.storage.k8s.io/managed-nfs-storage created 
[root@vms10 deploy]# 
[root@vms10 deploy]# kubectl get sc
NANE                  PROVISIONER     RECLAIMPOLICY   VOLUMEBINDINGMODE  ... 
managed-nfs-storage   fuseim.pri/ifs   Delete          Immediate
...  [root@vms10 deploy]#

步骤4:查看当前是否存在pvc和pv。

[root@vms10 deploy]# kubectl get pvc
No resources found in nsvolume namespace.
[root@vms10 deploy]# kubectl get pv 
No resources found
[root@vms10 deploy]#

当前不存在任何pv和pvc。

步骤5:下面开始创建pvc。

[root@vms10 deploy]# cp test-claim.yaml pvc1.yaml 
[root@vms10 deploy]# cat pvc1.yaml 
kind: PersistentVolumeClaim 
apiVersion: v1
metadata:
  name: pvc1
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
  accessModes:
    - ReadWriteMany 
  resources: 
    requests:
      storage: 1Mi 
[root@vms10 deploy]#

这里在annotations里指定了使用哪个storageClass,也可以写成如下内容。

kind: PersistentVolumeClaim 
apiVersion: v1
metadata:
  name: pvc1
spec:
  accessModes:
    - ReadWriteMany 
  resources:
    requests:
      storage: 1Mi 
  storageClassName: managed-nfs-storage

步骤6:下面开始创建pvc。

[root@vms10 deploy]# kubectl apply -f pvc1.yaml 
persistentvolumeclaim/pvc1 created
[root@vms10 deploy]#

步骤7:查看是否创建出来了pvc。

[root@vms10 deploy]# kubectl get pvc
NAME  STATUS  VOLUME                                     CAPACITY    ACCESS MODES    STORAGECLASS          AGE
pvc1  Bound   pvc-edce9ee1-e0c0-4527-a3e8-15b94bf45fc0   1Mi         RWX             managed-nfs-storage   4s

步骤8:查看pv。

[root@vms10 deploy]# kubectl get pv 
NAME                                       CAPACITY    ACCESS MODES    RECLAIM POLICY    STATUS    CLAIM         STORAGECLASS           REASON  AGE
pvc-edce9ee1-eeco-4527-a3e8-15b94bf45fc0   1Mi         RWX             Delete            Bound     volume/pvc1   managed-nfs-storage             9s
[root@vms10 deploy]#

从这里可以看到,不仅把pvc1创建出来了,也创建出来一个名字叫作
pvc-edce9ee1-e0c0-4527-a3e8-15b94bf45fco的pv,并且和pvc1关联在一起了。

步骤9:查看这个pv的属性。

[root@vms10 deploy]# kubectl describe pv pvc-edce9ee1-e0c0-4527-a3e8-15b94bf45fc0
   ... 输出 ...
Source:
    Type:      NFS(an NFS mount that lasts the lifetime of apod)
    Server:    192.168.26.30
    Path:      /vdisk/ns1-pvc1-pvc-edce9ee1-e0c0-4527-a3e8-15b94bf45fc0
    ReadOnly: false
Events:        <none>
[root@vms10 deploy]#

可以看到这个pv所使用的存储类型为NFS。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130797059