1. 尝试删除kube-test的命名空间
    kubectl delete ns kube-test
  2. 查看集群所有namespaces
[root@k8s-master ~]# kubectl get ns
NAME              STATUS        AGE
default           Active        48d
kube-node-lease   Active        48d
kube-public       Active        48d
kube-system       Active        48d
kube-test         Terminating   32d
  1. 解决方法

第一步:新开一个窗口,运行命令kubectl proxy

此命令启动了一个代理服务来接收来自你本机的HTTP连接并转发至API服务器,同时处理身份认证

第二步:新开一个窗口,创建一个shell脚本test.sh,并写入以下内容

#!/bin/bash

set -eo pipefail

# 报错并退出函数
die() { echo "$*" 1>&2 ; exit 1; }

# 检查依赖工具函数
need() {
        which "$1" &>/dev/null || die "Binary '$1' is missing but required"
}

# 检查前置条件
need "jq"
need "curl"
need "kubectl"

PROJECT="$1"
shift

test -n "$PROJECT" || die "Missing arguments: kill-ns <namespace>"

kubectl proxy &>/dev/null &
PROXY_PID=$!
killproxy () {
        kill $PROXY_PID
}
trap killproxy EXIT

sleep 1 # give the proxy a second

kubectl get namespace "$PROJECT" -o json | jq 'del(.spec.finalizers[] | select("kubernetes"))' | curl -s -k -H "Content-Type: application/json" -X PUT -o /dev/null --data-binary @- http://localhost:8001/api/v1/namespaces/$PROJECT/finalize && echo "Killed namespace: $PROJECT"

第三步:执行脚本删除
bash test.sh kube-test

第四步:查看结果

[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   48d
kube-node-lease   Active   48d
kube-public       Active   48d
kube-system       Active   48d

更多推荐