Kubernetes 默认的4种命名空间

Kubernetes 集群安装完毕后随带许多( Namespace )命名空间。一些命名空间很重要,事关你的 Kubernetes 使用是否正常!

搞坏其中一个命名空间即会损坏 Kubernetes系统。

这些命名空间包括如下:

  • default:默认的命名空间。

  • kube-system:系统为对象创建的命名空间。

  • kube-public:该命名空间是自动创建的,所有用户(包括未验证身份的用户)都可以读取。该命名空间主要留给集群使用,以防某些资源在整个集群中应该可见、公开可读。这对于提供引导组件所需的集群信息都很有用。它主要由 Kubernetes 本身来管理。

  • kube-node-lease:该命名空间含有与每个节点关联的 Lease 对象。节点租用允许 kubelet 发送 heartbeat(心跳),以便控制平面能检测节点故障。

即使您不小心删除了 Kubernetes 系统的所有命名空间,它们也会再度重新生成。这是 Kubernetes 组件竭力所要做到的。

注意:但有时如果您不走运,删除命名空间在终止阶段卡住,那就没有办法再度重新生成命名空间了。

所以下面提到了每个命名空间的重要性,以便知道相应的症状是什么样子。

default 是什么命名空间?

default 命名空间用作您在未指定命名空间的情况下,创建的任何对象的默认位置。

kube-system 是什么命名空间?

kube-system 是 Kubernetes 中拥有高级权限的对象和服务帐户的命名空间。

Kubernetes 控制器的使用源于该命名空间;换句话说,我们会在控制器方面遇到一些问题,在部署新的 pods/deployment 时可能会出现问题。

不仅如此,该命名空间还包含其他的重要对象,比如 kube-dns 和 kube-proxy, kube-dns 是集群域(cluster.local)的权威命名服务器,它递归解析外部名称。不完全限定的短名称(比如 myservice )先使用本地搜索路径来完成。

可以在此处(https://cloud.google.com/kubernetes-engine/docs/how-to/kube-dns)和此处(https://www.digitalocean.com/community/tutorials/an-introduction-to-the-kubernetes-dns-service)找到更多的详细信息。

kube-proxy管理这项工作:将发送到集群 Kubernetes 服务对象的虚拟IP地址,(VIP)的流量转发到适当的后端 pod;想了解更多的详细信息,请点击此处(https://www.tigera.io/blog/comparing-kube-proxy-modes-[iptables](https://so.csdn.net/so/search?q=iptables&spm=1001.2101.3001.7020 "iptables")-or-ipvs/)和此处(https://arthurchiao.art/blog/cracking-k8s-node-proxy/)。

这意味着您在解析外部/内部通信时会遇到困难。

kube-public 是什么命名空间?

kube-public 含有一个单一的 ConfigMap 对象 cluster-info,它有助于发现和安全引导。

如果您试图删除所有上述命名空间,服务器会给出如下响应:

复制代码
Errorfrom server (Forbidden): namespaces "kube-public"is forbidden:thisnamespace may not be deleted

预计 Kubernetes v1.14 中添加的 kube-node-lease 会像任何普通的命名空间一样被删除。

kube-node-lease 是什么命名空间?

kube-node-lease 这个命名空间含有与每个节点关联的 Lease 对象。节点 lease 允许 kubelet 发送 heartbeat(心跳),以便控制平面(节点控制器)可以检测节点故障。

那么,如果我们删除了 kube-node-lease,会发生什么?Kubernetes 通常会为每个节点创建另一个带有 Lease 对象的对象,但有时命名空间移除操作会在终止状态卡住。

到那时我们会有一个节点 Lease,过时的 heartbeat 可能会告诉节点控制器:该节点访问不了,从而影响节点之间的整体通信。

如何修复终止时卡住的命名空间删除?

当然,您可以尝试弄清楚为何命名空间在终止时卡住,但有时您搞不清楚,这时我们可以使用强行删除。

创建一个临时 JSON 文件

复制代码
kubectl getnamespace<terminating-namespace>-o json >tmp.json

执行以下命令:

bash 复制代码
$ kubectl proxy

Starting to serve on 127.0.0.1:8001

编辑您的 tmp.json 文件。从 finalizers 字段中删除 Kubernetes 值,并保存文件。

  • 执行以下命令,更新命名空间:

  • $ curl -k -H "Content-Type: application/json"-X PUT --data-binary @tmp.json

  • http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize

您的输出会像这样子:

bash 复制代码
{

    "kind":"Namespace",
    
    "apiVersion":"v1",

    "metadata":{

    "name":"<terminating-namespace>",

    "selfLink":"/api/v1/namespaces/<terminating-namespace>/finalize",

    "uid":"b50c9ea4-ec2b-11e8-a0be-fa163eeb47a5",

    "resourceVersion":"1602981",

    "creationTimestamp":"2021-10-18T18:48:30Z",

    "deletionTimestamp":"2021-10-18T18:59:36Z"

},

"spec":{



},

"status":{

    "phase":"Terminating"

}}
相关推荐
孔明click333 分钟前
Sa-Token v1.43.0 发布 🚀,新增 SSO 单设备注销、消息推送,多 Access-Token 并存能力
java·sa-token·springboot·登录·权限认证
heart000_121 分钟前
用 eBPF 打造下一代云原生可观测性平台:Kubernetes + Cilium 实践指南
云原生·容器·kubernetes
烨然若神人~27 分钟前
算法第24天|93.复原IP地址、 78.子集、 90.子集II
java·开发语言·算法
.生产的驴34 分钟前
SpringBoot 商城系统高并发引起的库存超卖库存问题 乐观锁 悲观锁 抢购 商品秒杀 高并发
android·java·数据库·spring boot·后端·spring·maven
Lansonli1 小时前
大数据Spark(五十九):Standalone集群部署
java·大数据·spark
一个处女座的暖男程序猿1 小时前
替换word中的excel
java·word·excel
snowfoootball1 小时前
牛客周赛 Round 93题解(个人向A-E)
算法·贪心算法·排序算法
武昌库里写JAVA1 小时前
Iteration in Golang – How to Loop Through Data Structures in Go
java·vue.js·spring boot·学习·课程设计
WenGyyyL2 小时前
《Android 应用开发基础教程》——第十三章:权限管理机制与运行时权限请求(以拍照/存储为例)
android·java·权限·极限编程
yy鹈鹕灌顶4 小时前
LeetCode 字符串类题目解析与 Java 实现指南(深度优化版)
java·开发语言·算法·leetcode