为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,以下简称PV)和Persistent Volume Claim(持久卷申请,以下简称PVC)。
PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集群的资源。PV跟Docker里的Volume(卷)类似,不过会有独立于Pod的生命周期。
PVC是用户的一个请求,跟Pod类似。Pod消费Node的资源,PVC消费PV的资源。
总结
pv 实现k8s网络存储,PVC(persistent volume claim)消费PV的资源。
创建pv, 创建pvc,创建pod再消费pvc.
查看命令
#### 部署
kubectl apply -f pv.yaml
kubectl apply -f pod-pvc.yaml
#### 查看pv
kubectl get pv
####查看pvc
kubectl get pvc
pv-oss: 配置storageClassName: oss,标识此PV为oss存储类型,只会与oss类型的PVC绑定;
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-oss
labels:
alicloud-pvname: pv-oss
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
storageClassName: oss
flexVolume:
driver: "alicloud/oss"
options:
bucket: "docker"
url: "oss-cn-hangzhou.aliyuncs.com"
akId: "***"
akSecret: "***"
otherOpts: "-o max_stat_cache_size=0 -o allow_other"
options支持的参数:
bucket:目前只支持挂载 Bucket,不支持挂载 Bucket 下面的子目录或文件。
url: OSS Bucket的endpoint,挂载 OSS 的接入域名。
akId: 用户的 access id 值。
akSecret:用户的 access secret 值。
otherOpts: 挂载 OSS 时支持定制化参数输入,格式为: -o 。
执行创建命令:
kubectl apply -f pv-oss.yaml
PVC通过配置selector,指定与创建的oss PV进行绑定;
pvc-oss.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-oss
spec:
accessModes:
- ReadWriteMany
storageClassName: oss
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: pv-oss
执行创建命令
kubectl apply -f pvc-oss.yaml
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data-oss"
- name: pvc-oss
mountPath: "/data1"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
挂载说明
OSSFS通过s3fs进行bucket挂载,是在用户态挂载的文件系统(FUSE);OSSFS在kubelet重置的时候会重新启动,这时容器内部的bind目录已经不可用,需要重启容器;配置健康检查能保证容器内oss目录不可用时重启容器,进而重新bind oss目录;(升级最近版本flexvolume可解决此问题)
执行创建命令
kubectl apply -f pod-pvc.yaml