k8s 1.20.15版本中,将local-path类型的pvc迁移到其他节点

步骤 1:停止使用 PVC 的应用

  1. 将相关 Pod 或 Deployment 副本数设为 0
    确保目标 PVC 不再被任何 Pod 使用,避免数据写入冲突。
    kubectl scale deploy <deployment-name> --replicas=0

步骤 2:备份原节点上的数据

  1. 确认 PVC 对应的 PV 和存储路径
    查询 PVC 绑定的 PV:

    kubectl get pvc <pvc-name> -o yaml | grep volumeName

     

  2. 查看 PV 的 local.path 字段获取数据路径:

    kubectl get pv <pv-name> -o yaml

     

  3. 示例输出片段:

    spec:
      ...
      local:
        path: /opt/local-path-provisioner/pvc-12345678-90ab-cdef-1234-567890abcdef
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - node01  # 原节点名称
  4. 登录原节点备份数据
    将数据复制到临时目录或压缩打包:

    # 在原节点上执行 
    cp -r /opt/local-path-provisioner/pvc-12345678-90ab-cdef-1234-567890abcdef /tmp/pvc-backup 
    tar czvf /tmp/pvc-backup.tar.gz -C /opt/local-path-provisioner/pvc-12345678-90ab-cdef-1234-567890abcdef .

步骤 3:迁移数据到目标节点

  1. 将备份文件复制到目标节点
    使用 scp 或文件传输工具:

    scp /tmp/pvc-backup.tar.gz user@target-node:/tmp/
  2. 在目标节点恢复数据
    解压到 local-path 的存储目录(需确保路径与配置一致):

     
    # 在目标节点上执行 
    mkdir -p /opt/local-path-provisioner/pvc-new-uid 
    # 替换为新的唯一目录名 
    tar xzvf /tmp/pvc-backup.tar.gz -C /opt/local-path-provisioner/pvc-new-uid

步骤 4:创建新 PV/PVC 并绑定到目标节点

  1. 创建新 PV
    手动创建 PV,绑定目标节点和新路径:

     
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: migrated-pv
    spec:
      capacity:
        storage: 5Gi  # 调整大小
      volumeMode: Filesystem
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain  # 建议设置为 Retain 避免误删
      local:
        path: /opt/local-path-provisioner/pvc-new-uid  # 目标节点上的路径
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - target-node  # 目标节点名称
      storageClassName: local-path
    
    kubectl apply -f migrated-pv.yaml
  2. 创建新 PVC 并绑定到新 PV

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: migrated-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi  # 需与 PV 一致
      storageClassName: local-path
      volumeName: migrated-pv  # 显式绑定到新 PV
    
    kubectl apply -f migrated-pvc.yaml

步骤 5:更新应用使用新 PVC

  1. 修改 Pod/Deployment 配置
    将 Pod 模板中的 PVC 名称改为 migrated-pvc,并确保 Pod 可调度到目标节点(可通过节点选择器或容忍度配置)。

  2. 重启应用

     
    kubectl scale deploy <deployment-name> --replicas=1

     

注意事项

  1. 数据一致性
    迁移前确保应用已停止,避免数据损坏。

  2. 权限问题
    目标节点上的目录权限需与源节点一致,确保 Pod 有权限访问。

  3. StorageClass 配置
    确认目标节点的 local-path StorageClass 配置路径与 PV 中 local.path 匹配。

  4. 局限性
    local-path 存储不适合生产关键数据,建议迁移到网络存储(如 NFS、Ceph)以实现动态迁移和高可用。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容