k8s之pv

48 阅读2分钟

nfs 共享存储 删除pod nfs的数据不会丢失

image.png



apiVersion: v1
kind: Pod  
metadata:  
  name: nfs-pd1
spec:
  containers:

  - name: nginx
    image: harbor.hiuiu.com/nginx/nginx:1.21.5
    imagePullPolicy: Never
    volumeMounts:
    - mountPath: /usr/share/nginx/html
      name: test-volume
      ports:
    - containerPort: 80
      volumes:
  - name: test-volume
    nfs:
      server: 192.168.10.227
      path: /root/nfs/rw/www/wolfcode
      readOnly: false

pv 持久卷 pvc

静态构建

vim pv.yaml

apiVersion: v1
kind: PersistentVolume  
metadata:  
  name: pv0001
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /root/nfs/rw/test-pv
    server: 192.168.10.227

vim pvc.yaml

apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: nfs-pvc  
spec:  
  accessModes:  
    - ReadWriteOnce  #和pv的一样 
  volumeMode: Filesystem
  resources:  
    requests:  
      storage: 4Gi  #小于pv 不能大于pv
  storageClassName: slow #和pv一样

0. StorageClass 存在storageClassName: slow 指定的 StorageClass 必须在您的 Kubernetes 集群中已定义,并且它应该配置为使用 NFS 作为后端存储。

  1. NFS 服务器和路径:虽然 PVC 本身不直接指定 NFS 服务器的 IP 地址和路径,但是关联的 StorageClass 应该配置有这些信息,或者通过动态卷供应器(如 NFS Provisioner)来自动创建相应的 PersistentVolume。
  2. 权限和网络:确保 Kubernetes 集群中的节点可以访问 NFS 服务器,并且具有适当的权限来挂载指定的 NFS 路径。
  3. NFS 客户端支持:确保 Kubernetes 节点上的 NFS 客户端支持您希望使用的 NFS 版本(尽管这通常是通过 StorageClass 或动态卷供应器来管理的)。
  4. 资源请求:您请求的存储大小为 4Gi,这应该在您的 NFS 服务器上可用,并且符合 StorageClass 的配置。

动态构建

业务量大时 每个pv创建复杂

自动构建pv StorageClass

image.png

nfs动态制备案例

nfs-provisioner

StorageClass 配置

RBAC 配置

PVC 处于pending状态

PVC测试配置

  1. 创建了一个sa账户

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nfs-provisioner
    
    
  2. 对sa授权

    kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner
    
  3. 安装配置nfs-server

    mkdir -p /data/nfs_pro
    vim /etc/exports 
    /data/nfs_pro *(rw,sync,no_root_squash)
    ​
    exportfs -arv
    systemctl restart  nfs-kernel-server.service
    ​
    
  4. 启动一个pod

    
    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
            volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
            env:
            - name: PROVISIONER_NAME
              value: example.com/nfs
            - name: NFS_SERVER
              value: 192.168.10.226
            - name: NFS_PATH
              value: /data/nfs_pro
          volumes:
          - name: nfs-client-root
            nfs:
              server: 192.168.10.226
              path: /data/nfs_pro
              
           
    
  5. 创建StorageClass,动态pv

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs
provisioner: example.com/nfs

6. 创建PVC,通过storageClass去实现

    kind: PersistentVolumeClaim  
    apiVersion: v1  
    metadata:  
      name: test-claim1  
    spec:  
      accessModes:  
      - ReadWriteMany  
      resources:  
        requests:  
          storage: 1Gi  
      storageClassName: nfs
    

7.  创建pod验证

        kind: Pod
        apiVersion: v1
        metadata:
          name: read-pod
        spec:
          containers:
          - name: read-pod
            image: harbor.hiuiu.com/nginx/nginx:1.21.5
            volumeMounts:
              - name: nfs-pvc
                mountPath: /usr/share/nginx/html
          restartPolicy: "Never"
          volumes:
            - name: nfs-pvc
              persistentVolumeClaim:
                claimName: test-claim1
        

image.png