k8s delete namespace Terminating

这篇具有很好参考价值的文章主要介绍了k8s delete namespace Terminating。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版本情况

kubenetes版本: v1.19.10
docker版本: v20.10.6

一、问题经过

早上发现 kubectl delete ns时, 删除namespace一直处于Terminating状态
尝试加上--force参数,执行kubectl delete ns --force,也是一样Terminating

当时Terminating截图

k8s delete namespace Terminating

1、猜测原因:master节点资源不足

前段时间pod的数量增加,怀疑是master节点机器资源不足导致处理效率问题

目前运行的pod数量

k8s delete namespace Terminating

查看Prometheus监控,可以看到master节点的使用率都很低,排除资源不足问题

k8s delete namespace Terminating

2、猜测原因:有依赖资源没有释放,如pvc、pod等 

执行查看资源情况, 没有发现依赖资源未释放情况,排查依赖资源没有释放问题

kubectl get all -n test
k8s delete namespace Terminating

3、猜测原因:k8s本身存在bug,查验源码和官方issue,分析delete namespace过程

查看ns状态,也没有异常情况

kubectl describe ns test

使用json查看ns详情

kubectl get ns test -o json
k8s delete namespace Terminating
{
"lastTransitionTime": "2023-06-20T06:19:29Z",
"message": "Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request",
"reason": "DiscoveryFailed",
"status": "True",
"type": "NamespaceDeletionDiscoveryFailure"
},

参考:kubernetes -- 删除namespace的过程以及遇到的bug解决_LanVv的博客-CSDN博客

二、治标不治本删除方法

了解完源码,还是没得到彻底解决方法

网上很多介绍使用api去解决 使用/api/v1/namespaces/${ns}/finalize 去删除namespace, 只能治标不治本,顺便贴上curl的解决方法

# 注意修改ip地址和生成k8s证书
for ns in `kubectl get ns  | grep Terminating | awk '{print $1}'`
do
    # 获取ns的json
    kubectl get namespace ${ns} -o json > /tmp/${ns}.json
    # 将spec内容清空, 剔除finalizers
    cat ${ns}.json | jq 'del(.spec.finalizers)' > /tmp/del_${ns}.json
    # 用api去删除ns
    curl --cert /tmp/client.pem --key /tmp/client-key.pem --cacert /tmp/ca.pem -H "Content-Type: application/json" -X PUT --data-binary @/tmp/del_${ns}.json https://master_IP:6443/api/v1/namespaces/${ns}/finalize
    # 删除残留文件
    rm -f /tmp/del_${ns}.json /tmp/${ns}.json
done

参考:k8s删除Terminating状态的命名空间_LanVv的博客-CSDN博客

三、kubeernetes组件日志分析

查看kube-apiserver 503

k8s delete namespace Terminating

controller.go:116] loading OpenAPI spec for "v1beta1.metrics.k8s.io" failed with: failed to retrieve openAPI spec, http error: ResponseCode: 503, Body: service unavailable
v1beta1.metrics.k8s.io
http error: ResponseCode: 503, Body: service unavailable 简单明了
查看kube-controller-manager

k8s delete namespace Terminating

namespace_controller.go:162] deletion of namespace test failed: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
也是metrics.k8s.io/v1beta1

四、问题解决 

具体根因,kube-prometheus项目 的prometheus-adapter服务未Running

kube-prometheus项目地址

https://github.com/prometheus-operator/kube-prometheus

根据kube-apiserver和kube-controller-manager的错误日志定位,metrics.k8s.io/v1beta1这个apiservice有问题

kubectl get apiserver | grep False
k8s delete namespace Terminating

metrics.k8s.io/v1beta1是monitoring/prometheus-adapter生成出来的

kubectl -n monitoring get pods | grep prometheus-adapter

k8s delete namespace Terminating

查看服务发现,该pod异常了

Back-off pulling image "directxman12/k8s-prometheus-adapter:v0.8.4"

因node not ready 将pod驱逐了,而公司内网在做防火墙升级,禁止了一部分网络,导致pull失败

问题解决,解决问题的方式很简单,但可收获了一些排查思路

把服务拉起即可,尽量使用国内镜像仓库/公司级镜像仓库,使用dockerhub,可能发生网络问题

服务起来后

k8s delete namespace Terminating

已经变成True状态

k8s delete namespace Terminating

再次删除namespace,成功

k8s delete namespace Terminating

其他参考:unable to retrieve the complete list of server APIs文章来源地址https://www.toymoban.com/news/detail-498555.html

  1. 【k8s错误处理】——unable to retrieve the complete list of server APIs_unable to retrieve connectors_Teingi的博客-CSDN博客
  2. https://github.com/prometheus-operator/kube-prometheus/issues/275

到了这里,关于k8s delete namespace Terminating的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生 | k8s批量删除Evicted/Terminating/Unknown Pods

    宿主机内存被docker占满导致,K8s集群pod处于Evicted 状态,清理内存后处理Evicted和Terminating状态的pod 1、在集群查询pod状态,发现大量pod处于Evicted和Terminating状态 2.使用kubectl中的强制删除命令 3.删除非正常的pod  

    2024年02月08日
    浏览(38)
  • k8s pod 处于Terminating的原因分析和解决处理——筑梦之路

    之前整理了一下各种资源长时间无法回收,解决处理的命令行 k8s 各种资源Terminationg状态处理 —— 筑梦之路_k8s自定义资源修改状态-CSDN博客 这里具体整理下pod长时间处于Terminating状态的相关知识,主要是对前面的补充和完善,作为笔记记录。 当我们要删除一个Pod时,Kuberne

    2024年02月03日
    浏览(34)
  • k8s的Namespace详解

    简介 在一个K8s集群中可以拥有多个命名空间,它们在逻辑上彼此隔离 namespaces是对一组资源和对象的抽象集合,比如可以将系统内部的对象划分为不同的项目组或用户组 K8s在集群启动之后,会默认创建几个namespace 默认namespace default:所有未指定Namespace的对象都会被分配在de

    2024年02月14日
    浏览(36)
  • K8S 跨 namespace 访问服务

    在K8S中,同一个命名空间(namespace)下的服务之间调用,之间通过服务名(service name)调用即可。不过在更多时候,我们可能会将一些服务单独隔离在一个命名空间中(比如我们将中间件服务统一放在 middleware 命名空间中,将业务服务放在 business 命名空间中)。 遇到这种情

    2024年02月14日
    浏览(33)
  • Kubernetes(k8s):Namespace详解

    💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes(K8s)中,Namespace是一种用于在集群中创建多个虚拟集群的方式。它将集群资源进行逻辑分组,使得不同的团队或项目可以独立地使用资源,避免资源冲突和混乱。本篇博客将详细介绍Kubernetes的Namespace概念、用法和实战应用场

    2024年02月03日
    浏览(52)
  • k8s资源对象(1) namespace&&pod

    Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的

    2024年01月18日
    浏览(50)
  • k8s学习笔记(四):命名空间(namespace)详解

    Kubernetes中的Namespace是一种用于在 集群内部组织和隔离资源 的机制。一个Namespace可以看作是一个 虚拟的集群 ,它将物理集群划分为多个逻辑部分,每个部分都有自己的一组资源(如Pod、Service、ConfigMap等)。 Namespace 适合用于 隔离不同用户创建的资源 用于给集群中的 任何对

    2024年02月12日
    浏览(35)
  • k8s资源管理命令与Namespace使用详解

    目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法

    2023年04月16日
    浏览(51)
  • K8S初级入门系列之四-Namespace/ConfigMap/Secret

         本章节我们继续学习Namespace、ConfigMap、Secret基础概念,了解他们基本用法和操作。NameSpace为命名空间,在同一集群中试下资源隔离。ConfigMap通过key-value的方式实现明文配置数据的保存,Secret与ConfigMap类似,不过是采用密文方式保存。      K8S集群可以通过Namespace创建多

    2024年02月15日
    浏览(50)
  • k8s-1.28.2权限管理(系统普通用户查看对应namespace)

    操作前提是已经有namespace,本文的namespace是nacos umask 077; openssl genrsa -out nacos1.key 2048 参数:-subj指定组和用户,其中O是组名,CN是用户名 openssl req -new -key nacos1.key -out nacos1.csr -subj \\\"/O=nacos1/CN=nacos1\\\" openssl x509 -req -in nacos1.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreat

    2024年01月24日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包