暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes 中如何删除 Terminating 的 namespace

云原生内经 2021-07-05
1585

前言

基于 Kubernetes 的2.0云原生使用场景中,由于操作系统、存储以及其他因素导致某namespace处于Terminating状态,而又需要使用该namespace创建资源。不得以需要强制删除该ns,再创建它。本文描述以下两种方法强制删除namespace。

1. 基于 PUT api形式删除 Terminating状态下namespace

1.1 查看ns

root@node1:~# kubectl get ns | grep test
test Terminating 2d

1.2 将处于Terminating的ns的描述文件保存下来

root@node1:~# kubectl get ns test -o json > tmp.json
root@node1:~# cat tmp.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2021-06-27T13:06:51Z",
"name": "test",
"resourceVersion": "273179",
"selfLink": "/api/v1/namespaces/test",
"uid": "93a15629-0ae8-415e-b855-0c02d810dbbb"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Terminating"
}
}

1.3 本地启动kube proxy

kubectl proxy --port=8081

1.4 打开新窗口,执行删除操作

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

2. 基于 etcdctl指令删除处于 Terminationg 状态下 namepsace

说明:

  • 此方法有一定危险性,谨慎操作。
  • etcdctl 配有证书时,删除也需要带有证书,否则操作指令报错。
  • 如果带证书,有些证书参数和对应的etcd版本有关,可etcdctl -h查看。
  • 本机没有etcdctl指令时,可以进入etcd容器中操作。
  • 操作etcdctl前,需要把对应的api version调为3,即执行export ETCDCTL_API=3。

2.1 查看版本,设置etcdctl api的版本为3

root@node1:~# etcdctl --version
etcdctl version: 3.3.12
API version: 2
root@node1:~# export ETCDCTL_API=3
root@node1:~# etcdctl version
etcdctl version: 3.3.12
API version: 3.3

2.2 查看该集群对应的 namespace情况

  • get registry/namespaces/ --prefix --keys-only 查看所有的ns
root@node1:/etc/ssl/etcd/ssl# etcdctl --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-node1.pem --key=/etc/ssl/etcd/ssl/node-node1-key.pem --endpoints=https://192.168.1.21:2379 get registry/namespaces --prefix --keys-only
/registry/namespaces/default

/registry/namespaces/kube-node-lease

/registry/namespaces/kube-public

/registry/namespaces/kube-system

/registry/namespaces/test


2.3 删除Terminating状态下的 namespace

etcdctl --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-node1.pem --key=/etc/ssl/etcd/ssl/node-node1-key.pem --endpoints=https://127.0.0.1:2379 del registry/namespaces/test
1
root@node1:/etc/ssl/etcd/ssl# kubectl get ns
NAME STATUS AGE
default Active 98d
kube-node-lease Active 98d
kube-public Active 98d
kube-system Active 98d

3.  etcdctl指令参考链接

  • https://www.huweihuang.com/kubernetes-notes/etcd/etcdctl-v3.html


文章转载自云原生内经,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论