k8s的namespace一直处于terminating的解法

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

先试了强制替换,无法替换掉,强制删除,也删除不掉namespace

[root@master k8s-study]# vi ns-demo.yaml
[root@master k8s-study]# kubectl create -f ns-demo.yaml
namespace/demo created
[root@master k8s-study]# kubectl get -f ns-demo.yaml
NAME   STATUS   AGE
demo   Active   17s
[root@master k8s-study]# cp ns-demo.yaml ns-demo-v2.yaml
[root@master k8s-study]# vi ns-demo-v2.yaml
[root@master k8s-study]# kubectl replace -f ns-demo-v2.yaml
namespace/demo replaced
[root@master k8s-study]# kubectl get -f ns-demo.yaml
NAME   STATUS   AGE
demo   Active   102s
[root@master k8s-study]# kubectl get -f ns-demo.yaml -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2023-07-26T13:22:49Z"
  labels:
    kubernetes.io/metadata.name: demo
  name: demo
  resourceVersion: "42052444"
  uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
[root@master k8s-study]# kubectl get -f ns-demo-v2.yaml -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2023-07-26T13:22:49Z"
  labels:
    kubernetes.io/metadata.name: demo
  name: demo
  resourceVersion: "42052444"
  uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
[root@master k8s-study]# kubectl replace --force -f ns-demo-v2.yaml
namespace "demo" deleted

^C
[root@master k8s-study]# kubectl replace --force=true -f ns-demo-v2.yaml
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl replace --force=true --grace-period=0 -f ns-demo-v2.yaml
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl get ns/demo
NAME   STATUS        AGE
demo   Terminating   10m
[root@master k8s-study]# kubectl get ns/demo -o json
{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "creationTimestamp": "2023-07-26T13:22:49Z",
        "deletionTimestamp": "2023-07-26T13:25:24Z",
        "labels": {
            "kubernetes.io/metadata.name": "demo"
        },
        "name": "demo",
        "resourceVersion": "42052458",
        "uid": "5ff91497-0bb6-448a-8fb2-0aacb017bacc"
    },
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },
    "status": {
        "phase": "Terminating"
    }
}
[root@master k8s-study]# kubectl edit ns/demo -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2023-07-26T13:22:49Z"
  deletionTimestamp: "2023-07-26T13:25:24Z"
  labels:
    kubernetes.io/metadata.name: demo
  name: demo
  resourceVersion: "42052458"
  uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
  finalizers:
  - kubernetes
status:
  phase: Terminating
[root@master k8s-study]# kubectl get ns/demo
NAME   STATUS        AGE
demo   Terminating   11m
[root@master k8s-study]# kubectl delete ns/demo
namespace "demo" deleted
^C
[root@master k8s-study]# kubectl delete --force ns/demo
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
namespace "demo" force deleted
^C
[root@master k8s-study]# kubectl delete --force --grace-period=0 ns/demo
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
namespace "demo" force deleted
^C



[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:10249/api/v1/namespaces/delete-me/finalize
404 page not found
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/delete-me/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# kubectl get ns/demo -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2023-07-26T13:22:49Z"
  deletionTimestamp: "2023-07-26T13:25:24Z"
  labels:
    kubernetes.io/metadata.name: demo
  name: demo
  resourceVersion: "42052458"
  uid: 5ff91497-0bb6-448a-8fb2-0aacb017bacc
spec:
  finalizers:
  - kubernetes
status:
  phase: Terminating
[root@master k8s-study]# kubectl get ns/demo -o json
{
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
        "creationTimestamp": "2023-07-26T13:22:49Z",
        "deletionTimestamp": "2023-07-26T13:25:24Z",
        "labels": {
            "kubernetes.io/metadata.name": "demo"
        },
        "name": "demo",
        "resourceVersion": "42052458",
        "uid": "5ff91497-0bb6-448a-8fb2-0aacb017bacc"
    },
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },
    "status": {
        "phase": "Terminating"
    }
}
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/demo/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# curl -H "Content-Type: application/json" -H “Expect:” -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:31811/api/v1/namespaces/demo/finalize
curl: (52) Empty reply from server
[root@master k8s-study]# curl -H "Content-Type: application/json" -XPUT -d '{"apiVersion":"v1","kind":"Namespace","metadata":{"name":"demo"},"spec":{"finalizers":[]}}' http://localhost:10249/api/v1/namespaces/demo/finalize
404 page not found
NAMESPACE=demo
kubectl get ns $NAMESPACE -o json | jq '.spec.finalizers=[]' > ns.json
kubectl proxy --port=8899 &
PID=$!
curl -X PUT http://localhost:8899/api/v1/namespaces/$NAMESPACE/finalize -H "Content-Type: application/json" --data-binary @ns.json
kill $PID

这段代码的含义是在 Kubernetes 环境中删除一个命名空间(Namespace)及其关联的资源,包括在命名空间中运行的所有容器、服务、持久卷等。让我们逐行解释代码的作用:

  1. NAMESPACE=demo 这一行指定了要删除的命名空间的名称,代码中将其设置为 "demo"。你可以根据需要将 "demo" 替换为你要删除的特定命名空间的名称。

  2. kubectl get ns $NAMESPACE -o json | jq '.spec.finalizers=[]' > ns.json 这一行代码使用 kubectl 命令获取指定命名空间的详细信息,并将其以 JSON 格式输出。然后通过 jq 工具(一个命令行 JSON 处理工具)将 .spec.finalizers 的值设置为空数组,这样做的目的是将命名空间中的 finalizer 清空。finalizer 是用于在删除命名空间时执行清理操作的机制。

  3. kubectl proxy --port=8899 & 这一行代码启动了一个 kubectl 代理服务器,并监听在本地的 8899 端口上。代理服务器的目的是允许后续的 curl 请求与 Kubernetes API 进行交互,从而绕过直接与集群通信的需求。

  4. PID=$! 这一行代码将 kubectl 代理服务器的进程 ID 存储在变量 PID 中。这样做是为了在后续操作中能够终止该进程,以便清理代理服务器。

  5. curl -X PUT http://localhost:8899/api/v1/namespaces/$NAMESPACE/finalize -H "Content-Type: application/json" --data-binary @ns.json 这一行代码使用 curl 命令向 Kubernetes API 发出 PUT 请求,调用命名空间的 finalize 操作。在这个请求中,通过将之前生成的 ns.json 文件的内容作为请求体,来执行对命名空间的最终清理。由于之前已经将 finalizer 清空,这个操作将立即删除命名空间和其所有资源。

  6. kill $PID 最后,这一行代码终止之前启动的 kubectl 代理服务器,释放占用的端口和资源。

需要注意的是,这段代码执行时需要确保当前的环境配置有足够的权限来删除命名空间及其资源,否则可能会失败。同时,谨慎使用这样的代码,因为删除命名空间将导致其中的所有资源永久丢失,无法恢复。在生产环境中,务必谨慎执行类似的操作,并确认执行之前的后果。文章来源地址https://www.toymoban.com/news/detail-610166.html

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

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

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

相关文章

  • k8s delete namespace Terminating

    版本情况 当时Terminating截图 前段时间pod的数量增加,怀疑是master节点机器资源不足导致处理效率问题 目前运行的pod数量 查看Prometheus监控,可以看到master节点的使用率都很低,排除资源不足问题 执行查看资源情况, 没有发现依赖资源未释放情况,排查依赖资源没有释放问题

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

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

    2024年02月03日
    浏览(24)
  • k8s默认StorageClass,解决pvc一直处于“Pending”

    报错详情 排查思路 查看 pvc 详细属性 persistentvolume-controller waiting for a volume to be created, either by external provisioner \\\"nfs-provisioner-01\\\" or manually created by system administrator 从persistentvolume-controller反馈出来的信息是 没有权限来创建出pvc。 查看 nfs-provisioner pod日志 远程NFS服务器上的动态子

    2023年04月27日
    浏览(38)
  • k8s pod一直处于pending状态一般有哪些情况,怎么排查?

    一个pod一开始创建的时候,它本身就是会处于pending状态,这时可能是正在拉取镜像,正在创建容器的过程。 如果等了一会发现pod一直处于pending状态, 那么我们可以使用kubectl describe命令查看一下pod的Events详细信息。一般可能会有这么几种情况导致pod一直处于pending状态: 1、

    2024年01月17日
    浏览(42)
  • Kubernetes(k8s):Namespace详解

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

    2024年02月03日
    浏览(41)
  • k8s部署解成功解决node节点一直处于NotReady状态的问题,报错failed to load Kubelet config file /var/lib/kubelet/config.yaml

    我在部署k8s的时候host1节点一直显示NotReady 报错便报,直接经典看日志解决问题思路哈哈哈 看日志找报错点,找问题解决问题,思路一定要清晰。 在host1节点中查看报错信息,代码: 由日志信息可知,报错原因是不能从/var/llib/kubelet/config.yaml下载到kubelet的配置。 错误原因估计

    2024年02月11日
    浏览(31)
  • namespace,pv 一直Terminating状态处理

    在k8s集群中进行测试删除namespace是经常的事件,而为了方便操作,一般都是直接对整个名称空间进行删除操作。     补充:删除rancher的相关namespace(谨慎操作!!!)   (1)可以执行如下命令强制删除(PV-NAME 替换成实际需要删除的 pv 名称):   (2)再次查看可以发现

    2024年02月08日
    浏览(27)
  • k8s的Namespace详解

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

    2024年02月14日
    浏览(27)
  • k8s 大量 pod 处于 ContainerStatusUnknown 状态

    如图所示,nexus 正常运行,但产生了大量的状态不明的 pod,原因也无从所知 解决办法,删除多余的 pod,一个一个删除,非常费劲 获取 namespace 中状态为 ContainerStatusUnknown 的 pod,并删除 获取所有非 Running 状态下的 pod,并删除

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

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

    2024年02月14日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包