存储卷volume
volume是定义在pod内,且可以被多个容器同时访问的计算资源。volume的生命周期不会随着容器的终止和重启发生改变,只与pod有关。
volume类型:
- emptyDir
emptyDir是在pod分配到node时创建的,初始内容为空,且无需指定宿主机对应目录(kubernets会自动分配),当pod被移除时,emptyDir也会被删除
用途:临时空间;多容器共享目录。
定义:
volumes:- name: dataemptyDir: {}
- hostPath
hostPath是在pod上挂载宿主机的目录或文件。
用途:需要永久保存的文件。需要访问宿主机上的文件
问题: 不同节点上的目录结构不同,导致找不到文件
volumes:
- name: data
hostPath:
path: "/home/data"
- 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类型:
- ReadWriteOnce。 读写权限,只能被单个node挂载
- ReadOnlyMany。只读权限,可以被多个node挂载
- 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
