生产中的小技巧:k8s删除namespaces状态一直为terminating问题处理
# kubectl get nsNAME STATUS AGEdefault Active 5d4hingress-nginx Active 30hkube-node-lease Active 5d4hkube-public Active 5d4hkube-system Active 5d4hkubevirt Terminating 2d2h # <------ here1、新开一个窗口运行命令 kubectl proxy> 此命令启动了一个代理服务来接收来自你本机的HTTP连接并转发至API服务器,同时处理身份认证2、新开一个终端窗口,将下面shell脚本整理到文本内`1.sh`并执行,$1参数即为删除不了的ns名称#------------------------------------------------------------------------------------#!/bin/bashset -eo pipefaildie() { echo "$*" 1>&2 ; exit 1; }need() {which "$1" &>/dev/null || die "Binary '$1' is missing but required"}# checking pre-reqsneed "jq"need "curl"need "kubectl"PROJECT="$1"shifttest -n "$PROJECT" || die "Missing arguments: kill-ns <namespace>"kubectl proxy &>/dev/null &PROXY_PID=$!killproxy () {kill $PROXY_PID}trap killproxy EXITsleep 1 # give the proxy a secondkubectl 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"#------------------------------------------------------------------------------------3. 执行脚本删除# bash 1.sh kubevirtKilled namespace: kubevirt1.sh: line 23: kill: (9098) - No such process5、查看结果# kubectl get nsNAME STATUS AGEdefault Active 5d4hingress-nginx Active 30hkube-node-lease Active 5d4hkube-public Active 5d4hkube-system Active 5d4h
