2022年10月更文挑战11-k8s中利用storageClass及nfs进行pv的自动创建

133 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

k8s中利用storageClass及nfs进行pv的自动创建

前文

本文内容主要是关于k8s中,通过进行storageClass的相关配置,实现在创建pvc时自动进行pv创建的方式。其中主要为针对知识的总结及在实践过程中的操作内容,难免存在不准确或不完善之处。

nfs服务

前文已经有文章进行过探讨,本文不进行过于详细的赘述。主要是通过nfs服务,在创建容器时指定相应的nfs服务作为实际容器的外挂存储,将存储的信息保存在nfs服务中,来实现数据的持久化保存。

pv及pvc相关知识

pv我们认为是k8s进行持久化存储时,实际的在硬盘上存储介质。容器中的数据进行存储时,会将数据保存到pv上。而所谓pvc,是与容器进行绑定的,pvc下面会映射存在多个pv。正常情况下pv与pvc可以通过手动创建进行关联。而于此同时,也可以利用storageClass进行pv的自动创建。

如何通过storageClass进行pv的自动创建

  • 首先,我们需要进行nfs服务的配置,此处内容忽略跳过。
  • 配置nfs服务后,我们需要利用k8s创建storageClassProvisioner,这是storageClass在进行自动pv创建时,实际所利用的纽带。在该文件中,我们需要进行nfs服务信息的配置,同时需要记录名称的记录,方便在storageClass创建时进行映射。省略一些额外配置仅贴出核心变更代码:
containers:
    - name: nfs-client-provisioner
      image: quay.io/external_storage/nfs-client-provisioner:latest
      env:
        - name: PROVISIONER_NAME
          value: nfs-storage-01
        - name: NFS_SERVER
          value: 127.0.0.1
        - name: NFS_PATH
          value: /data/k8s/sc
      volumeMounts:
        - name: nfs-client-root
          mountPath: /persistentvolumes
    volumes:
    - name: nfs-client-root
      nfs:
        server: 127.0.0.1
        path: /data/k8s/sc
  • 进行storageClass的创建,创建时我们需要利用上述的名称进行绑定的关联配置。这样在创建pvc时指定我们的storageClass,才能够进行实际磁盘存储的创建。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: nfs-storage
parameters:
  archiveOnDelete: "false"
  • 进行pvc创建,并在其中指定storageClass。我们的pvc可以直接创建,也可以在使用statefulSet类型有状态容器创建时,在其中同时进行pvc的创建。要注意的是,如果是单独创建pvc,pvc删除时会删除对应的磁盘pv存储。而通过有状态容器进行创建时,当容器移除时,pvc不会进行移除,也就是对应的磁盘空间不会被清理。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  annotations:
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Mi

image.png

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。