存储管理
HostPath
HostPath 将宿主机的某个目录挂载到 Pod 内。
适用场景:
- 日志采集。
- 本地测试。
- 注意:不推荐在生产环境中使用(存在安全风险)。
示例:
yaml
volumes:
- name: host-volume
hostPath:
path: /data/logs
type: DirectoryEmptyDir
EmptyDir 是在 Pod 创建时被初始化的临时存储。
特点:
- 容器重启数据不丢失。
- Pod 删除后数据即清空。
- 可用于容器间数据共享、缓存临时文件等。
示例:
yaml
volumes:
- name: cache
emptyDir: {}NFS
NFS(Network File System) 是一种共享文件存储方式,多个 Pod 可以同时读写。
特点:
- 跨节点共享。
- 需事先部署 NFS 服务。
- 读写权限需配置合理。
示例:
yaml
volumes:
- name: nfs-volume
nfs:
server: 10.0.0.1
path: /exports/dataPV / PVC(持久卷)
PersistentVolume(PV)
- 集群管理员提前配置的存储资源。
- 抽象底层存储设备(如 NFS、云盘等)。
PersistentVolumeClaim(PVC)
- 用户申请存储的声明。
- 系统会自动匹配满足需求的 PV。
- 示例:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi存储类(StorageClass)
StorageClass 定义了存储卷的类型、配置策略、动态供应方式等。
用途:
- 实现 PVC 自动绑定与卷创建。
- 支持不同级别性能(如 SSD、普通磁盘等)。
示例:aws
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2- 示例:local-path
bash
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 示例:
yaml
spec:
storageClassName: fast数据卷迁移
迁移数据卷的目录,需要先停止所有使用 PVC 的 Pod,然后迁移数据,最后修改 PV 的目录。
bash
/opt/local-path-provisioner/所以所有 local-path 的卷都在这里。
适用于迁移目标是:
换目录(例如 /data -> /mnt/nvme) 换磁盘 换节点(但不换 storageClass)
步骤 1:暂停 local-path-provisioner(避免新建)
bash
kubectl scale deployment local-path-provisioner -n local-path-storage --replicas=0步骤 2:停止使用 PVC 的 Pod(确保数据不会写入)
例如:
bash
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
bash
mkdir -p /data/local-pv
rsync -avh --progress --numeric-ids /opt/local-path-provisioner/ /data/local-pv/步骤 4:修改 local-path-provisioner 的 configmap
获取当前 configmap:
bash
kubectl -n local-path-storage get cm local-path-config -o yaml > lpp.yaml编辑:
yaml
# 原来:
# hostpath: "/opt/local-path-provisioner"
hostpath: "/data/local-pv"应用:
bash
kubectl apply -f lpp.yaml步骤 5:重新启动 local-path-provisioner
bash
kubectl scale deployment local-path-provisioner -n local-path-storage --replicas=1步骤 6:恢复使用该 PVC 的应用
bash
kubectl scale deploy myapp -n default --replicas=1