Kubernetes组件Valume

简介

K8s支持多种存储方案以便满足各种不同Pod类型的需求,如:对本机目录挂载(HostPath),远程共享目录( NFS,MFS),Pod之间目录共享(emptyDir),性能较强的(iscsi)等等

EmptiDir

介绍

当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上云巽宫,该卷就会存在,最初是空的状态,Pod中的容器可以读取和写入emptyDir卷中的相同文件,改卷可以挂载到每个容器中的相同或不同路径上,当出于任何原因从节点中删除Pod时,emptyDir中的数据将被永久删除。

用法

  1. 暂存空间,例如用于基于磁盘的合并排序
  2. 用作长时间计算奔溃恢复时的检查点
  3. Web服务容器提供数据时,保存内容管理器容器提取的文件

eg:

apiVersion: v1
kind: Pod
metadata:
  name: test
  name: default
spec:
  containers:
  - name: nginx
    image: test/nginx:v1
    ports:
    - containerPort: 80
    volumeMounts:
    - mountPath: /test
      name: nginx-test
  volumes:
    - name: nginx-test
      emptyDir: {}

HostPath

介绍

就是Pod与Pod运行所在的Node上目录进行绑定

卷的type类型

行为
  空字符串(默认)用于向后兼容,这意味着在挂载hostPath卷之前不会执行任何检查
DirectoryOrCreate 如果在给定的路径上没有任何东西存在,那么将根据需要在那里创建一个空目录,权限设置为0755,与Kubelet具有相同的组和所有权
Directory 给定的路径下必须存在目录
FileOrCreate 如果在给定的路径上没有任何东西存在,那么会更具需要创建一个空文件,权限设置为0644,与Kubelet具有相同的组和所有权
File 给定的路径下必须存在文件
Socket 给定的路径先必须存在UNIX套接字
CharDevice 给定的路径下必须存在字符设备
BlockDevice 给定的路径下必须存在块设备

注意

  1. 无法确定Pod运行在哪个Node节点上,所以需要所有Node节点拥有挂载目录,否则Pod启动失败
  2. Pod没有对该目录大小感知度,所以使用时目录没有大小限制内容将会一直叠加
  3. 注意目录权限问题

eg:

apiVersion: v1
kind: Pod
metadata:
  name: test
  namespace: default
spec:
  containers:
  - name: nginx-test
    image: test/nginx:v1
    ports:
    - containerPort: 80
    volumeMounets:
    - mountPath: /usr/share/nginx/html
      name: nginx-test
    volumes:
    - name: nginx-test
      hostPath:
        path: /www/html
        type: Directory 

PV/PVC

PV

扫描二维码关注公众号,回复: 8914869 查看本文章

是Volume之类的卷插件,但是具有独立使用PV的Pod的生命周期,PVC可以通过对PV类型添加的标签类型来自动选择适合的PV进行绑定后再挂载到Pod中

PVC

相当与连接Pod与PV之间的中间件,可以根据Pod选取PV的标准自动选择合适的PV进行绑定挂载到Pod中,可以声明请求资源的最大值,以及请求的访问控制

PV访问模式(accessModes)

访问模式 简写 意义
ReadWriteOnce RWO 该卷可以被单个接待你以读/写模式挂载
ReadOnlyMany ROX 该卷可以被多个节点以只读模式挂载
ReadWriteMany RWX 改卷可以被多个节点以读/写模式挂载

PV回收策略(persistentVolumeReclaimPolicy)

  1. Retain(保留):手动回收
  2. Recycle(回收):基本擦除(rm -rf /thevolime/*)
  3. Delete(删除):关联的存储资产将被删除(AWS EBS,GCE PD)

eg:

部署PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv1
  namespace: default
spec: 
  capacity:
    storage: 5Gi                            #pv上限
  accessModes:                              #pv访问策略
    - ReadWriteOnec
  presistentVolumeReclaimPolicy: Retain      #pv回收策略
  storageClassName: nfs                      #pv类型

部署PVC以及Deployment

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: test-depoyment
  namespace: test
  labels:
    app: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      name: test
      namespace: test
      labels:
        app: test
    spec:
      containers:
        - name: test-nginx
          ports:
          - containerPort: 80
          image: ntp.weijiayu.club/myapp/nginx:v3
          volumeMounts:
          - mountPath: /usr/share/nginx/html
            name: test-html
  volumeClaimTemplates:
  - metadata:
      name: test-html
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nfs"
      resources:
        requests:
          storage: 1Gi
发布了62 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41674452/article/details/103886108
今日推荐