存储卷volume

volume是定义在pod内,且可以被多个容器同时访问的计算资源。volume的生命周期不会随着容器的终止和重启发生改变,只与pod有关。

volume类型:

  1. emptyDir
    emptyDir是在pod分配到node时创建的,初始内容为空,且无需指定宿主机对应目录(kubernets会自动分配),当pod被移除时,emptyDir也会被删除
    用途:临时空间;多容器共享目录。
    定义:
  1. volumes:
  2. - name: data
  3. emptyDir: {}
  1. hostPath
    hostPath是在pod上挂载宿主机的目录或文件。
    用途:需要永久保存的文件。需要访问宿主机上的文件
    问题: 不同节点上的目录结构不同,导致找不到文件
volumes:
- name: data
    hostPath:
    path: "/home/data"
  1. nfs
    pod移除时,nfs只是被卸载,不会被删除(文件永久存在)
volumes:
  - name: data
    nfs:
      path: /
      server: nfs.server.localhost

存储卷的定义与使用:

spec:
  volumes:
    - name: data
      emptyDir: {}
  containers:
    - name: tomcat
      image: tomcat:jdk8
      volumeMounts:
        - mountPath: /data  #挂在到容器内的目录
          name: data # 指定需要挂在的volume

持久化存储卷PV与持久化卷声明PVC

pv是独立与pod(计算资源)的网络存储资源,在使用之前需要先定义,且pv只能是网络存储,它不属于任何Node。
pv类型:nfs, rbd,gce,aws, …
定义:

apiVersion: v1
kind: PersistentVolume
metadata:
  mame: pv-tomcat
  labels:
    pv: tomcat
spec:
  capacity:
    storage: 5Gi   #定义pv大小
  accessModes:
    - ReadWriteOnce
  nfs:
    path: /data
    server: x.x.x.x

PV的accessModes类型:

  1. ReadWriteOnce。 读写权限,只能被单个node挂载
  2. ReadOnlyMany。只读权限,可以被多个node挂载
  3. ReadWriteMany。读写权限,可以被多个node挂载

pod使用pv资源之前,需要先定义一个pvc。

kind: PersistenVolumeClaim
apiVersion: v1
metadata:
  name: mycliam
spec:
  storageClassName: ''
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
  selector:
    matchLabels:
     pv: tomcat

在pod中使用:

spec:
  volumes:
    - name: data
      persistentVolumeClaim:
        claimVolume: mycliam   #指定pvc
  containers:
    - name: tomcat
      image: tomcat:jdk8
      volumeMounts:
        - mountPath: /data  #挂在到容器内的目录
          name: data # 指定需要挂在的volume