k8s删除namespace失败,状态Terminating解决方案,cattle-system一直为Terminating状态解决方案

解决方案,删除其中的spec字段,因为k8s集群是携带认证的:

查到命名空间下确实还有一些引用pod还在运行

[root@jettoloader ~]# kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n longhorn-system

但是只能看到无法删除

kubectl proxy --port=8081 &

1,导出信息

kubectl get namespace wubo  -o json > tmp.json

2,删除spec

3 执行

curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8081/api/v1/namespaces/wubo/finalize

或者

namespace="kubernetes-dashboard "
[root@localhost k3s]# kubectl get ns ${namespace}  -o json | jq 'del(.spec.finalizers)' |curl -v -H "Content-Type: application/json" -X PUT --data-binary @- http://127.0.0.1:8081/api/v1/namespaces/${namespace}/finalize

=============================

好用:

# 指定需要删除的命名空间
NAMESPACE= ''

# 以下为固定格式,不需要修改
RANCHER_SERVER_URL=$( kubectl config view -o json|jq -r .clusters[0].cluster.server )
CLUSTER_TOKEN=$( kubectl config view -o json|jq -r .users[0].user.token )

# 获取删除 finalizers 后的命名空间 json 配置
kubectl get ns ${NAMESPACE} -ojson| \
  jq 'del(.spec.finalizers[])'| \
  jq 'del(.metadata.finalizers)' > ${NAMESPACE}.json

curl -k \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${CLUSTER_TOKEN}" \
-X PUT \
--data-binary @${NAMESPACE}.json \
${RANCHER_SERVER_URL}/api/v1/namespaces/${NAMESPACE}/finalize

故障现象

使用Rancher2.0添加了k3s集群进行Kubernetes的相关web管理。

因删除k3s集群监控服务:删除Rancher依赖的namespace(cattle-system),状态一直是Terminating

NAMESPACE='' # 指定需要删除的命名空间
KUBE_CONFIG='' # 指定 K8S 配置文件

K8S_API_URL=$( kubectl --kubeconfig=${KUBE_CONFIG} config view --raw -o json|jq -r '.clusters[0].cluster.server' )

# 注意:如果 config 中证书是以文件保存,此处命令
kubectl --kubeconfig=${KUBE_CONFIG} config view --raw -o json| \
  jq -r '.users[0].user."client-certificate-data"'| \
  tr -d '"'|base64 --decode > /tmp/client_cert.pem

kubectl --kubeconfig=${KUBE_CONFIG} config view --raw -o json| \
  jq -r '.users[0].user."client-key-data"'| \
  tr -d '"'|base64 --decode > /tmp/client_key.pem

kubectl --kubeconfig=${KUBE_CONFIG} config view --raw -o json| \
  jq -r '.clusters[0].cluster."certificate-authority-data"'| \
  tr -d '"'|base64 --decode > /tmp/client_ca.pem

# 获取删除 finalizers 后的命名空间 json 配置
kubectl --kubeconfig=${KUBE_CONFIG} get ns ${NAMESPACE} -ojson| \
  jq 'del(.spec.finalizers[])'| \
  jq 'del(.metadata.finalizers)' > ${NAMESPACE}.json

curl -k \
--cert /tmp/client_cert.pem \
--key /tmp/client_key.pem \
--cacert /tmp/client_ca.pem \
-H "Content-Type: application/json" \
-X PUT \
--data-binary @${NAMESPACE}.json \
${K8S_API_URL}/api/v1/namespaces/${NAMESPACE}/finalize

解决办法

kubectl patch namespace cattle-system -p '{"metadata":{"finalizers":[]}}' --type='merge' -n cattle-system
kubectl delete namespace cattle-system --grace-period=0 --force

kubectl patch namespace cattle-global-data -p '{"metadata":{"finalizers":[]}}' --type='merge' -n cattle-system
kubectl delete namespace cattle-global-data --grace-period=0 --force

kubectl patch namespace local -p '{"metadata":{"finalizers":[]}}' --type='merge' -n cattle-system

for resource in `kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -o name -n local`; do kubectl patch $resource -p '{"metadata": {"finalizers": []}}' --type='merge' -n local; done

kubectl delete namespace local --grace-period=0 --force

===============

NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' > temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize

该方法可能会残留一些其他资源,不建议使用。

下面的命令可以显示你删除命名空间下面仍然存在的一些资源对象:(建议使用这种方式)

kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>

找到这些资源对象解决问题然后删除它们,你删除的命名空间就可以被删除了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值