? Kubernetes 集群安裝完畢后隨帶許多( Namespace )命名空間。一些命名空間很重要,事關(guān)你的 Kubernetes 使用是否正常!
搞壞其中一個命名空間即會損壞 Kubernetes系統(tǒng)。
這些命名空間包括如下:
-
default:默認的命名空間。
-
kube-system:系統(tǒng)為對象創(chuàng)建的命名空間。
-
kube-public:該命名空間是自動創(chuàng)建的,所有用戶(包括未驗證身份的用戶)都可以讀取。該命名空間主要留給集群使用,以防某些資源在整個集群中應該可見、公開可讀。這對于提供引導組件所需的集群信息都很有用。它主要由 Kubernetes 本身來管理。
-
kube-node-lease:該命名空間含有與每個節(jié)點關(guān)聯(lián)的 Lease 對象。節(jié)點租用允許 kubelet 發(fā)送 heartbeat(心跳),以便控制平面能檢測節(jié)點故障。
即使您不小心刪除了 Kubernetes 系統(tǒng)的所有命名空間,它們也會再度重新生成。這是 Kubernetes 組件竭力所要做到的。
?注意:但有時如果您不走運,刪除命名空間在終止階段卡住,那就沒有辦法再度重新生成命名空間了。
所以下面提到了每個命名空間的重要性,以便知道相應的癥狀是什么樣子。
default 是什么命名空間?
default 命名空間用作您在未指定命名空間的情況下,創(chuàng)建的任何對象的默認位置。
kube-system 是什么命名空間?
kube-system 是 Kubernetes 中擁有高級權(quán)限的對象和服務帳戶的命名空間。
Kubernetes 控制器的使用源于該命名空間;換句話說,我們會在控制器方面遇到一些問題,在部署新的 pods/deployment 時可能會出現(xiàn)問題。
不僅如此,該命名空間還包含其他的重要對象,比如 kube-dns 和 kube-proxy, kube-dns 是集群域(cluster.local)的權(quán)威命名服務器,它遞歸解析外部名稱。不完全限定的短名稱(比如 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管理這項工作:將發(fā)送到集群 Kubernetes 服務對象的虛擬IP地址,(VIP)的流量轉(zhuǎn)發(fā)到適當?shù)暮蠖?pod;想了解更多的詳細信息,請點擊此處(https://www.tigera.io/blog/comparing-kube-proxy-modes-iptables-or-ipvs/)和此處(https://arthurchiao.art/blog/cracking-k8s-node-proxy/)。
這意味著您在解析外部/內(nèi)部通信時會遇到困難。
kube-public 是什么命名空間?
kube-public 含有一個單一的 ConfigMap 對象 cluster-info,它有助于發(fā)現(xiàn)和安全引導。
如果您試圖刪除所有上述命名空間,服務器會給出如下響應:
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 這個命名空間含有與每個節(jié)點關(guān)聯(lián)的 Lease 對象。節(jié)點 lease 允許 kubelet 發(fā)送 heartbeat(心跳),以便控制平面(節(jié)點控制器)可以檢測節(jié)點故障。
那么,如果我們刪除了 kube-node-lease,會發(fā)生什么?Kubernetes 通常會為每個節(jié)點創(chuàng)建另一個帶有 Lease 對象的對象,但有時命名空間移除操作會在終止狀態(tài)卡住。
到那時我們會有一個節(jié)點 Lease,過時的 heartbeat 可能會告訴節(jié)點控制器:該節(jié)點訪問不了,從而影響節(jié)點之間的整體通信。
如何修復終止時卡住的命名空間刪除?
當然,您可以嘗試弄清楚為何命名空間在終止時卡住,但有時您搞不清楚,這時我們可以使用強行刪除。
創(chuàng)建一個臨時 JSON 文件
kubectl getnamespace<terminating-namespace>-o json >tmp.json
執(zhí)行以下命令:
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
-
編輯您的 tmp.json 文件。從 finalizers 字段中刪除 Kubernetes 值,并保存文件。
- 執(zhí)行以下命令,更新命名空間:
-
$ 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
文章來源:http://www.zghlxwxcb.cn/news/detail-644490.html
您的輸出會像這樣子:文章來源地址http://www.zghlxwxcb.cn/news/detail-644490.html
{
"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"
}}
到了這里,關(guān)于Kubernetes 默認的4種命名空間的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!