问题描述
场景
我有一个 volumeMode
作为 Block
的 PersistentVolume。定义为:
apiVersion: v1
kind: PersistentVolume
Metadata:
name: block-vol
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
local:
path: /dev/sdb # this path on the host specified below is used as a device mount
nodeAffinity:
required:
nodeselectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- <my-host>
persistentVolumeReclaimPolicy: Retain
storageClassName: block-storage
volumeMode: Block
当我将它安装在带有 statefulset
的 VolumeClaimTemplate
上时,我将它的 storage
字段指定为 1Gi
。但是,当执行到部署的 pod 时,我看到块大小超过 1Gi
(这是该设备在物理机上的实际大小)
StatefulSet
YAML:
apiVersion: apps/v1
kind: StatefulSet
Metadata:
name: Nginx
spec:
selector:
matchLabels:
app: Nginx
serviceName: "Nginx"
replicas: 1
template:
Metadata:
labels:
app: Nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: Nginx
image: k8s.gcr.io/Nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeDevices:
- name: rawdev0
devicePath: /dev/kdb0
volumeClaimTemplates:
- Metadata:
name: rawdev0
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: block-storage
volumeMode: Block
resources:
requests:
storage: 1Gi
我使用 blockdev
来查找块的大小(以字节为单位):
root@Nginx-0:/# ls -lhrt /dev/kdb0
brw-rw----. 1 root disk 8,16 Jan 13 19:49 /dev/kdb0
root@Nginx-0:/# blockdev --getsize64 /dev/kdb0
536870912000 #size of block in bytes
问题
在这种情况下,storage
字段表示什么?
解决方法
Kubernetes 对 local volumes 的存储大小无能为力。创建 PersistentVolume
的管理员必须设置适当的大小,为了细化大小,他/她应该创建自己的分区,而不是将本地卷映射到目录。
PersistentVolumeClaim
中的存储大小是一个请求,以便应用至少获得该大小的卷。