1. 前面的一篇笔记中已经记录了如何搭建一个NFS系统。这篇笔记就记录如何将Pod中容器目录挂载到文件系统

1.原生方式挂载

image.png
原生方式挂载

  • 在NFS上创建指定目录
  • 在Deployment的yaml中配置要挂载路径
    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. labels:
    5. app: nginx-pv-demo
    6. name: nginx-pv-demo
    7. spec:
    8. replicas: 2
    9. selector:
    10. matchLabels:
    11. app: nginx-pv-demo
    12. template:
    13. metadata:
    14. labels:
    15. app: nginx-pv-demo
    16. spec:
    17. containers:
    18. - image: nginx
    19. name: nginx
    20. volumeMounts:
    21. - name: html
    22. mountPath: /usr/share/nginx/html
    23. volumes:
    24. - name: html
    25. nfs:
    26. server: 172.31.0.4
    27. path: /nfs/data/nginx-pv
  1. 在NFS上创建目录

    1. mkdir -p /nfs/data/nginx-pv
  2. 编写配置yaml并部署

    1. vi mountdemo.yaml
    2. kubectl apply -f mountdemo.yaml
  3. 在宿主机的/nfs/data/nginx-pv中写一个index.html

  4. 访问Pod

image.png

2.PV和PVC使用

上面的挂载方式弊端

  • Pod被清除,存储空间不会自动被释放
  • 需要手动创建好对应目录

    2.1PV和PVC的概念

    PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置 PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格

  1. PV:就是一个个目录
  2. PVC:Pod需要PV的信息声明(要xx大小的PV)
  3. PV池:好多PV的集合。Pod需要从池中取

image.png

上图画的PV分布在不同主机,其实PV就是在一个NFS里。不存在在哪个主机之说

2.2PV的创建

  1. PV本质上是目录,所以第一步创建PV对应的目录

    1. #nfs主节点
    2. mkdir -p /nfs/data/01
    3. mkdir -p /nfs/data/02
    4. mkdir -p /nfs/data/03
  2. 将目录映射成PV ```yaml

    vi pv.yaml

    kubectl apply -f xxx.yaml

    apiVersion: v1 kind: PersistentVolume metadata: name: pv01-10m spec: capacity: storage: 10M accessModes:

    • ReadWriteMany storageClassName: nfs nfs: path: /nfs/data/01 server: 172.31.0.4

apiVersion: v1 kind: PersistentVolume metadata: name: pv02-1gi spec: capacity: storage: 1Gi accessModes:

  1. - ReadWriteMany

storageClassName: nfs nfs: path: /nfs/data/02

  1. server: 172.31.0.4

apiVersion: v1 kind: PersistentVolume metadata: name: pv03-3gi spec: capacity: storage: 3Gi accessModes:

  1. - ReadWriteMany

storageClassName: nfs nfs: path: /nfs/data/03 server: 172.31.0.4

  1. 3. 查看pv
  2. ```yaml
  3. [root@k8s-master ~]# kubectl get pv

image.png

2.3PVC的创建

  1. 创建yaml并apply

    1. #vi pvc.yaml
    2. #kubectl apply -f pvc.yaml
    3. kind: PersistentVolumeClaim
    4. apiVersion: v1
    5. metadata:
    6. name: nginx-pvc
    7. spec:
    8. accessModes:
    9. - ReadWriteMany
    10. resources:
    11. requests:
    12. storage: 200Mi
    13. storageClassName: nfs
  2. 查看pvc

    1. kubectl get pvc

    image.png

  3. 同时查看pvc和pv

    1. kubectl get pv,pvc

    image.png

    pv有 10m 1g 3g的但是pvc需要200m,最优的是使用 1G的

2.4PVC方式挂载

  1. #vi nginx-pvc.yaml
  2. #kubectl apply -f xxx.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. labels:
  7. app: nginx-deploy-pvc
  8. name: nginx-deploy-pvc
  9. spec:
  10. replicas: 2
  11. selector:
  12. matchLabels:
  13. app: nginx-deploy-pvc
  14. template:
  15. metadata:
  16. labels:
  17. app: nginx-deploy-pvc
  18. spec:
  19. containers:
  20. - image: nginx
  21. name: nginx
  22. volumeMounts:
  23. - name: html
  24. mountPath: /usr/share/nginx/html
  25. volumes:
  26. - name: html
  27. persistentVolumeClaim:
  28. claimName: nginx-pvc

image.png