因为从R86S升级到R2S,因为强迫症,将家里主网段的IP从192.168.86改为了192.168.2,忽略了对外提供服务网段里有一些PV是用192.168.86绑定的NAS,于是有了重建这些PV的过程。

以deployment.apps/rabbitmq-rabbitmq-pvc-rabbitmq-pv为例展开:

  1. 备份PVC:kubectl get pvc -n test rabbitmq-pvc -oyaml >rabbitmq-pvc.yaml
  2. 备份PV:kubectl get pv rabbitmq-pv -oyaml >rabbitmq-pv.yaml
  3. 检查一个PV的yaml中有没有persistentVolumeReclaimPolicy属性,是否为Retain,如果没有,使用kubectl patch pv rabbitmq-pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'添加,防止删除PVC时PV被删除
  4. 将rabbitmq的副本数缩到0:kubectl scale deployment rabbitmq -n test --replicas=0
  5. 尝试删除PVC:kubectl delete pvc -n test rabbitmq-pvc
  6. 尝试删除PV:kubectl delete pv rabbitmq-pv
  7. 修改备份的rabbitmq-pv.yaml,修改NFS地址
  8. 重建PV:kubectl apply -f rabbitmq-pv.yaml
  9. 检查PV状态kubectl get pv rabbitmq-pv发现为Released,使用kubectl patch pv rabbitmq-pv -p '{"spec":{"claimRef": null}}'清除 claimRef 字段,告诉 Kubernetes:这个 PV 可以重新被绑定
  10. 重建PVC:kubectl apply -f rabbitmq-pvc.yaml
  11. 拉起pod:kubectl scale deployment rabbitmq -n test --replicas=1

重建另一个PV是删除PVC卡死,过程如下:

  1. 删除PVCkubectl delete pvc -n test elasticsearch-data-pvc卡死,检查状态变成Terminating,查看elasticsearch-data-pvc.yaml存在finalizers: kubernetes.io/pvc-protection保护
  2. 强制移除 PVC 的 Finalizer:kubectl patch pvc elasticsearch-data-pvc -n test -p '{"metadata":{"finalizers":[]}}' --type=merge,移除后pvc自动删除

后续步骤同上,检查发现是因为存在podelasticsearch-5c6bc6ff78-lkjs9状态为error,未删除,执行kubectl delete pod -n test elasticsearch-5c6bc6ff78-lkjs9 --force强制删除

以上即完成修复。

作者 Assaultcore

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注