Kubernetes 存储卷挂载方式

快来打我* 2022-11-29 12:45 321阅读 0赞

存储卷挂载方式大致分为三类,容器内存储卷挂载、宿主机存储卷挂载、分布式文件存储卷挂载。

1、容器内存储卷挂载

POD增加一个cachevol的Volume存储卷,挂载到容器的nginx-cache目录上,内容如下:

  1. apiVersion: extensions/v1beta1
  2. kind: ReplicaSet
  3. metadata:
  4. name: frontend
  5. spec:
  6. replicas: 3
  7. selector:
  8. tier: frontend
  9. volumes:
  10. - name: cachevol # 增加一个名为cachevol的volume存储卷
  11. emptyDir: {} # pod分配到node时创建的,k8s自动分配的一个目录,pod从node移除时emptyDir中的数据永久删除
  12. template:
  13. metadata:
  14. labels:
  15. app: nginx
  16. tier: frontend
  17. spec:
  18. containers:
  19. - name: nginx1.18
  20. image: nginx:1.18.0
  21. volumeMounts:
  22. - mountPath: /nginx-cache # 将cachevol volume存储卷mount到容器内的/etc/nginx/cache目录上
  23. name: cachevol
  24. imagePullPolicy: IfNotPresent
  25. env:
  26. - name: GET_HOSTS_FROM
  27. value: env
  28. ports:
  29. - containerPort: 80

2、宿主机存储卷挂载

hostPath在POD上挂载宿主机的文件或目录,内容如下:

  1. apiVersion: extensions/v1beta1
  2. kind: ReplicaSet
  3. metadata:
  4. name: mysql5.7
  5. spec:
  6. replicas: 2
  7. selector:
  8. app: mysql
  9. template:
  10. metadata:
  11. labels:
  12. app: mysql # spec.template.metadata.labels标签名与spec.selector名称要相同
  13. spec:
  14. volumes:
  15. - name: "data-storage"
  16. hostPath:
  17. path: "/opt/data" # 宿主机目录
  18. containers:
  19. - name: mysql5.7
  20. image: mysql:5.7.29
  21. ports:
  22. - containerPort: 3306
  23. env:
  24. - name: MYSQL_ROOT_PASSWORD
  25. value: "123456"

3、分布式文件存储卷挂载

分布式文件存储方式需要 Pod 通过 PVC 来申请存储空间,分布式存储可以使用 PV 静态分配存储空间,也可以通过 StorageClass 动态分配存储空间,下面我采用 PV & PVC 方式提供存储卷进行挂载,内容如下:

  1. apiVersion: extensions/v1beta1
  2. kind: ReplicaSet
  3. metadata:
  4. name: mysql5.7
  5. spec:
  6. replicas: 2
  7. selector:
  8. app: mysql
  9. template:
  10. metadata:
  11. labels:
  12. app: mysql
  13. spec:
  14. volumes:
  15. - name: mypd
  16. persistentVolumeClaim:
  17. claimName: myclaim
  18. containers:
  19. - name: mysql5.7
  20. image: mysql:5.7.29
  21. ports:
  22. - containerPort: 3306
  23. env:
  24. - name: MYSQL_ROOT_PASSWORD
  25. value: "123456"
  26. # nfs-persistent_volume.yaml
  27. apiVersion: v1
  28. kind: PersistentVolume
  29. metadata:
  30. name: pv0001
  31. spec:
  32. capacity:
  33. storage: 5Gi
  34. accessModes:
  35. - ReadWriteOnce
  36. nfs:
  37. path: /data
  38. server: 192.168.1.2
  39. # nfs-persistent_volume_claim.yaml
  40. apiVersion: v1
  41. kind: PersistentVolumeClaim
  42. metadata:
  43. name: myclaim
  44. spec:
  45. accessModes:
  46. - ReadWriteOnce
  47. resources:
  48. requests:
  49. storage: 8Gi
  50. nfs:
  51. path: /data
  52. server: 192.168.1.2

注:1、PV只能是网络存储,不能属于任何Node,但可以在每个Node上访问;

2、PV并不是被定义在Pod上的,而是独立于Pod之外的;

4、PVC读写方式有三种,VCReadWriteOnce:有读写权限且只能被单个node挂载;ReadOnlyMany:只读权限允许被多个node挂载;ReadWriteMany:有读写权限允许被多个node挂载。

发表评论

表情:
评论列表 (有 0 条评论,321人围观)

还没有评论,来说两句吧...

相关阅读

    相关 kubernetes存储

    一、存储卷的概念和类型 为了保证数据的持久性,必须保证数据在外部存储在`docker`容器中。在宿主机和容器内做映射,可以保证在容器的生命周期结束时,数据依旧可以实现...

    相关 Kubernetes文件挂载问题

    当我们将应用打包成docker镜像并发布时,可能会有替换掉内部配置文件的需求,有别于docker中自带的文件挂载功能,Kubernetes挂载配置文件的时候会覆盖掉原有的文件。