如何理解k8s里面 pv pvc 和 storageClass 之间的关系?
我目前按照某数据服务的说明在 minikube 上搭建 logstash 服务,但一直提示 unbound immediate PersistentVolumeClaims 。我在按照文档理解的意思是绑定 pvc 失败了,于是发现对方让默认用 nfs 做存储,我理解的单节点上搭建应该不存在 nfs 服务,所以换用了 local 。但换用 local 之后,发现就 pv 就没有创建,pvc 也是空的,storageClass 是创建成功的。
我目前的配置如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: logstash-local-storage
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
---
apiVersion: v1
kind: Service
metadata:
name: logstash
labels:
app: logstash
spec:
ports:
- port: 5044
name: beat-in
clusterIP: None
selector:
app: logstash
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: logstash
spec:
# 使用上面的 Headless Service
serviceName: "logstash"
selector:
matchLabels:
app: logstash
replicas: 3
template:
metadata:
labels:
app: logstash
spec:
containers:
- name: logstash
image: sensorsdata/logstash:7.2.0
resources:
limits:
cpu: "0.5"
memory: "500Mi"
requests:
cpu: 100m
memory: "100Mi"
ports:
- containerPort: 5044
name: beat-in
volumeMounts:
- name: logstash-pipe-conf
mountPath: /usr/share/logstash/pipeline/logstash.conf
subPath: logstash.conf
- name: logstash-set
mountPath: /usr/share/logstash/config/logstash.yml
subPath: logstash.yml
# 容器中 /usr/share/logstash/data 目录下保存着缓冲队列 ,与进度信息。
- name: ldata
mountPath: /usr/share/logstash/data
volumes:
- name: logstash-pipe-conf
configMap:
name: logstash-pipe-conf
- name: logstash-set
configMap:
name: logstash-set
volumeClaimTemplates: # Logstash 进度数据使用的 PVC 模板
- metadata:
name: ldata
spec:
accessModes: [ "ReadWriteOnce" ]
# 使用的存储类名称,需要提前创建。
storageClassName: "logstash-local-storage"
resources:
requests:
# 大小要高于缓冲队列的最大长度限制
storage: 100Mi
我理解的是 pv 是要永久存储的卷,pvc 是对这个卷的声明,而 sc 则是对存储系统参数的抽象化,官方文档读起来太拗口,我不知道理解的对不对。请大家帮我看看。
看了下你的sc的信息,里面有个
应该是要手动创建一个pv对象吧,不然pvc无法找到相对应的pv对象进行绑定。
这块我也不是特别熟。仅供参考。