存储
## pv
### 简述 Kubernetes PV 生命周期内的阶段?
答:某个 PV 在生命周期中可能处于以下 4 个阶段(Phaes)之一。
Available:可用状态,还未与某个 PVC 绑定。
Bound:已与某个 PVC 绑定。
Released:绑定的 PVC 已经删除,资源已释放,但没有被集群回收。
Failed:自动资源回收失败
### 问题1: K8S PV一直Released状态的解决办法
说明
我们在修改PV的容量的时候,可能会想删除掉PVC,再进行重新创建,不就可以重新绑定之前的PV了, 可事实并不会,这时候的PV会变成Released状态,而PVC只能和Available 状态的 PV 进行绑定。
这时候需要管理员对PV进行修改,删除 claimRef 对 PVC 的引用, 使PV变成Available状态。 注意数据的备份与保存。
```
kubectl get pv -n dev
# 结果
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
data-pv-dev 5Gi RWX Retain Released dev/data-pv-claim nfs-slow 117d
```
解决
```
kubectl edit pv mims-data-pv-dev
# 删除字段
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: data-pv-claim
namespace: dev
resourceVersion: "1113810"
uid: f40897d6-02cd-4c23-866b-2eb78235cc6d
```
结果
```
kubectl get pv -n dev
# 正常绑定
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
data-pv-dev 5Gi RWX Retain Bound dev/data-pv-claim nfs-slow 117d
```
### 问题2: 遇到k8s 删除pv 和pvc 删不掉
```
[root@master01 ~]# kubectl get pvc|grep chi
clickhouse-storage-template-chi-gt-business-0-0-0 Terminating pvc-52d51ed6-53eb-4dc6-9e29-dd2c3b787c73 500Gi RWO local-path-clickhouse 12m
clickhouse-storage-template-chi-gt-business-1-0-0 Terminating pvc-ee1352f5-91f5-4e8f-83fe-4845b4e1fd84 500Gi RWO local-path-clickhouse 12m
[root@master01 ~]# kubectl get pv|grep chi
pvc-52d51ed6-53eb-4dc6-9e29-dd2c3b787c73 500Gi RWO Retain Terminating default/clickhouse-storage-template-chi-gt-business-0-0-0 local-path-clickhouse 13m
pvc-ee1352f5-91f5-4e8f-83fe-4845b4e1fd84 500Gi RWO Retain Terminating default/clickhouse-storage-template-chi-gt-business-1-0-0 local-path-clickhouse 13m
```
解决方法:
```
kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'
kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
```
```
[root@master01 ~]# kubectl patch pv pvc-52d51ed6-53eb-4dc6-9e29-dd2c3b787c73 -p '{"metadata":{"finalizers":null}}'
persistentvolume/pvc-52d51ed6-53eb-4dc6-9e29-dd2c3b787c73 patched
[root@master01 ~]# kubectl patch pv pvc-ee1352f5-91f5-4e8f-83fe-4845b4e1fd84 -p '{"metadata":{"finalizers":null}}'
persistentvolume/pvc-ee1352f5-91f5-4e8f-83fe-4845b4e1fd84 patched
[root@master01 ~]# kubectl patch pvc clickhouse-storage-template-chi-gt-business-0-0-0 -p '{"metadata":{"finalizers": []}}' --type=merge
persistentvolumeclaim/clickhouse-storage-template-chi-gt-business-0-0-0 patched
[root@master01 ~]# kubectl patch pvc clickhouse-storage-template-chi-gt-business-1-0-0 -p '{"metadata":{"finalizers": []}}' --type=merge
persistentvolumeclaim/clickhouse-storage-template-chi-gt-business-1-0-0 patched
[root@master01 ~]# kubectl get pv|grep chi
[root@master01 ~]# kubectl get pvc|grep chi
```
删除crd等同理
```
kubectl patch crd crd-name -p '{"metadata":{"finalizers":[]}}' --type=merge
```
### 一、k8s强制删除pod命令
在K8s中,可以使用kubectl命令行工具删除Pod。默认情况下,kubectl delete pod命令将在删除Pod之前等待Pod的终止信号,这可能需要一些时间。但是,在某些情况下,Pod可能无法终止,这时就需要使用强制选项-f(--force)。 下面是一个使用kubectl删除Pod的示例命令:
```
kubectl delete pod my-pod
kubectl delete pod my-pod --force
```
### 二、k8s强制删除pod不重启
有时候,我们需要强制删除容器,但是不想在删除容器后让K8s重新启动该Pod。为此,我们可以使用kubectl的--grace-period=0选项来实现删除Pod的同时禁止其重新启动。 下面是一个使用--grace-period=0选项的示例命令:
```
kubectl delete pod my-pod --grace-period=0 --force
```
该命令将立即强制删除Pod,不管Pod的状态如何,并且在删除后不会重新启动Pod。