定义一个 PV,指明物理机上的路径、容量以及它所在的特定节点。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv-realpath # PV的名称
spec:
capacity:
storage: 10Gi # 存储容量,根据您的磁盘空间设置
volumeMode: Filesystem
accessModes:
- ReadWriteOnce # 访问模式:单节点读写
persistentVolumeReclaimPolicy: Retain # 回收策略:删除PVC后保留数据和PV
storageClassName: local-storage # 存储类名称,可自定义
local:
path: /your/real/physical/path # ⚠️ 请替换为您的真实物理路径
nodeAffinity: # 节点亲和性,关键!确保PV只用于指定节点
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- your-specific-node-name # ⚠️ 请替换为您的节点主机名
PVC 是 Pod 请求存储的方式。它会绑定到上面创建的 PV。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc-realpath # PVC的名称
namespace: default # 按需指定命名空间
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi # 请求的存储大小,需小于等于PV的容量
storageClassName: local-storage # 必须与PV的存储类名称匹配
在您的 Pod 定义中引用这个 PVC。
apiVersion: v1
kind: Pod
metadata:
name: app-using-local-pv
spec:
containers:
- name: app
image: your-app-image:latest
volumeMounts:
- name: data-volume
mountPath: /app/data # 容器内的挂载路径
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: local-pvc-realpath # 引用上面创建的PVC名称
使用 HostPath (适用于开发测试)
apiVersion: v1
kind: Pod
metadata:
name: pod-using-hostpath
spec:
containers:
- name: container
image: busybox
command: ['sh', '-c', 'sleep 3600']
volumeMounts:
- name: hostpath-volume
mountPath: /container-data # 容器内的挂载路径
volumes:
- name: hostpath-volume
hostPath:
path: /your/real/physical/path # ⚠️ 请替换为您的真实物理路径
type: DirectoryOrCreate # 如果主机上路径不存在,则创建它