我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。


当前回答

我有类似的问题与metric -server,执行kubectl获得namespace < namespace - here > -o json后,我发现这条消息:

"某些组的发现失败,1失败:无法检索 服务器api的完整列表:Io /v1beta1:错误 服务器("内部服务器错误: \ " / api / metrics.k8s.io / v1beta1吗?timeout=32s\":未经授权")已经生效 阻止请求成功

我在这个集群上安装了旧版本的metrics-server。我只是删除了这些资源。因为它是安装在:

kubectl apply -f metrics-server-0.3.7/deploy/1.8+/ --dry-run -o yaml | kubectl apply -f -

这个命令删除了所有这些:

kubectl apply -f metrics-server-0.3.7/deploy/1.8+/ --dry-run -o yaml | kubectl delete -f -

最后,该名称空间在几秒钟后消失。

我假设,如果你有一个最新的版本,你可以删除:

1. YAML安装(此处):

kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/<VERSION-HERE>/components.yaml

2. 舵图安装(此处)

helm uninstall metrics-server

不要忘记用正确的版本重新安装它。

其他回答

运行kubectl get apiservice

对于上面的命令,您将发现apiservice的Available Flag=Flase。

因此,只需使用kubectl删除apiservice,删除apiservice <apiservice名称>

执行此操作后,具有终止状态的名称空间将消失。

删除下面列出的所有资源:

kubectl delete -n YOURNAMESPACE —-all

使用kubectl delete -n YOURNAMESPACE <resource> <id>,或者(如果你从上面的输出复制粘贴)kubectl delete -n YOURNAMESPACE <resource>/<id>,对于你看到的列出的每个资源。

kubectl delete -n YOURNAMESPACE <resource>/<id1> <resource>/<id2> <resource2>/<id3> <resource2>/<id4> <resource3>/<id5>等。

可能您试图删除资源,但由于部署或复制集资源,它们正在被重新创建,从而阻止名称空间释放依赖的资源并被清理。

我尝试了3-5个选项来删除ns,但只有这一个对我有用。

这个sh文件将删除所有处于终止状态的名称空间

$ 我们 force-delete-namespaces.sh

$chmod +x force-delete-namespaces.sh

美元。/ force-delete-namespaces.sh

#!/usr/bin/env bash

set -e
set -o pipefail

kubectl proxy &
proxy_pid="$!"
trap 'kill "$proxy_pid"' EXIT

for ns in $(kubectl get namespace --field-selector=status.phase=Terminating --output=jsonpath="{.items[*].metadata.name}"); do
    echo "Removing finalizers from namespace '$ns'..."
    curl -H "Content-Type: application/json" -X PUT "127.0.0.1:8001/api/v1/namespaces/$ns/finalize" -d @- \
        < <(kubectl get namespace "$ns" --output=json | jq '.spec = { "finalizers": [] }')

    echo
    echo "Force-deleting namespace '$ns'..."
    kubectl delete namespace "$ns" --force --grace-period=0 --ignore-not-found=true
done

我发现删除“终止”名称空间的唯一方法是删除“终结器”部分中的条目。我试过——强制删除它和——grace-period=0没有一个工作,但是,这个方法做到了:

在命令行中显示命名空间的信息:

$ kubectl get namespace your-rogue-namespace -o yaml

这将给你yaml输出,寻找类似于这样的一行:

deletionTimestamp: 2018-09-17T13:00:10Z
  finalizers:
  - Whatever content it might be here...
  labels:

然后只需编辑名称空间配置并删除终结器容器中的项。

$ kubectl edit namespace your-rogue-namespace

这将打开一个编辑器(在我的例子中是VI),浏览我想删除的行并删除它,我按D键两次删除整行。

保存它,退出编辑器,就像变魔术一样。rogue-namespace应该消失了。

为了证实这一点:

$ kubectl get namespace your-rogue-namespace -o yaml

这是由于名称空间控制器无法删除名称空间中仍然存在的资源。

这个命令(使用kubectl 1.11+)将显示名称空间中保留的资源:

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

一旦找到并解析并删除这些名称空间,该名称空间就会被清理