存储管理
HostPath
HostPath 将宿主机的某个目录挂载到 Pod 内。
适用场景:
- 日志采集。
- 本地测试。
- 注意:不推荐在生产环境中使用(存在安全风险)。
示例:
volumes:
- name: host-volume
hostPath:
path: /data/logs
type: DirectoryEmptyDir
EmptyDir 是在 Pod 创建时被初始化的临时存储。
特点:
- 容器重启数据不丢失。
- Pod 删除后数据即清空。
- 可用于容器间数据共享、缓存临时文件等。
示例:
volumes:
- name: cache
emptyDir: {}NFS
NFS(Network File System) 是一种共享文件存储方式,多个 Pod 可以同时读写。
特点:
- 跨节点共享。
- 需事先部署 NFS 服务。
- 读写权限需配置合理。
示例:
volumes:
- name: nfs-volume
nfs:
server: 10.0.0.1
path: /exports/dataPV / PVC(持久卷)
PersistentVolume(PV)
- 集群管理员提前配置的存储资源。
- 抽象底层存储设备(如 NFS、云盘等)。
PersistentVolumeClaim(PVC)
- 用户申请存储的声明。
- 系统会自动匹配满足需求的 PV。
- 示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi存储类(StorageClass)
StorageClass 定义了存储卷的类型、配置策略、动态供应方式等。
用途:
- 实现 PVC 自动绑定与卷创建。
- 支持不同级别性能(如 SSD、普通磁盘等)。
示例:AWS EBS CSI
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: ebs.csi.aws.com
parameters:
type: gp3- 示例:local-path
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.29/deploy/local-path-storage.yaml
kubectl -n local-path-storage logs -f -l app=local-path-provisionerPVC 示例:
spec:
storageClassName: fast数据卷迁移
下面只讨论 rancher local-path-provisioner 的本地目录迁移,不适用于 NFS、云盘或其他 CSI 驱动。local volume 与节点和路径绑定,直接改 provisioner 的默认目录通常只影响新建卷,不会自动修改已有 PV 的 local.path、hostPath.path 或节点亲和性。
本地卷迁移是高风险操作。操作前应备份数据,确认 PV reclaimPolicy,记录 PVC、PV、节点和实际目录映射,并在恢复业务前校验数据。跨节点迁移还必须更新或重建 PV 的节点亲和性,不能只修改 StorageClass。
/opt/local-path-provisioner/默认安装通常使用这个父目录,但实际路径以 local-path-config 和每个 PV 的定义为准。
适用于迁移目标是:
换目录(例如 /data -> /mnt/nvme) 换磁盘 同节点换目录或磁盘。跨节点迁移需要额外处理 PV 节点亲和性,不属于下面的简单流程。
步骤 1:暂停 local-path-provisioner(避免新建)
kubectl scale deployment local-path-provisioner -n local-path-storage --replicas=0步骤 2:停止使用 PVC 的 Pod(确保数据不会写入)
例如:
kubectl scale deploy myapp -n default --replicas=0
kubectl -n <namespace> scale deploy --all --replicas=0步骤 3:拷贝数据到新目录(关键步骤)
例子:你准备把 local-path-provisioner 从 /opt/local-path-provisioner 迁到 /data/local-pv
mkdir -p /data/local-pv
rsync -avh --progress --numeric-ids /opt/local-path-provisioner/ /data/local-pv/步骤 4:修改 local-path-provisioner 的 ConfigMap
获取当前 configmap:
kubectl -n local-path-storage get cm local-path-config -o yaml > lpp.yaml编辑:
# 原来:
# hostpath: "/opt/local-path-provisioner"
hostpath: "/data/local-pv"应用后,这个配置主要决定后续新建卷的位置:
kubectl apply -f lpp.yaml已有 PV 需要逐个核对其实际 volume source。不要直接修改 Bound PV 后就恢复业务;某些字段不可变,可能需要保留底层数据后重建 PV,并用 Retain 回收策略重新绑定 PVC。
步骤 5:重新启动 local-path-provisioner
kubectl scale deployment local-path-provisioner -n local-path-storage --replicas=1步骤 6:恢复使用该 PVC 的应用
kubectl scale deploy myapp -n default --replicas=1