4個(gè)Kubernetes 默認(rèn)Namespace(命名空間)介紹

2022年1月12日16:50:48 發(fā)表評(píng)論 3,056 ℃

Kubernetes 隨帶許多( Namespace )命名空間。一些命名空間很重要,事關(guān)你的Kubernetes使用是否正常!

搞壞其中一個(gè)命名空間即會(huì)損壞Kubernetes系統(tǒng)。

這些命名空間包括如下:

default:默認(rèn)的命名空間。

kube-system:系統(tǒng)為對(duì)象創(chuàng)建的命名空間。

kube-public:該命名空間是自動(dòng)創(chuàng)建的,所有用戶(包括未驗(yàn)證身份的用戶)都可以讀取。該命名空間主要留給集群使用,以防某些資源在整個(gè)集群中應(yīng)該可見、公開可讀。這對(duì)于提供引導(dǎo)組件所需的集群信息都很有用。它主要由Kubernetes本身來(lái)管理。

kube-node-lease:該命名空間含有與每個(gè)節(jié)點(diǎn)關(guān)聯(lián)的Lease對(duì)象。節(jié)點(diǎn)租用允許kubelet發(fā)送heartbeat(心跳),以便控制平面能檢測(cè)節(jié)點(diǎn)故障。

即使您不小心刪除了Kubernetes系統(tǒng)的所有命名空間,它們也會(huì)再度重新生成。這是Kubernetes組件竭力所要做到的。

但有時(shí)如果您不走運(yùn),刪除命名空間在終止階段卡住,那就沒有辦法再度重新生成命名空間了。

4個(gè)Kubernetes 默認(rèn)Namespace(命名空間)介紹

所以下面提到了每個(gè)命名空間的重要性,以便知道相應(yīng)的癥狀是什么樣子。

default是什么命名空間?

default命名空間用作您在未指定命名空間的情況下,創(chuàng)建的任何對(duì)象的默認(rèn)位置。

kube-system是什么命名空間?

kube-system是Kubernetes中擁有高級(jí)權(quán)限的對(duì)象和服務(wù)帳戶的命名空間。

Kubernetes控制器的使用源于該命名空間;換句話說(shuō),我們會(huì)在控制器方面遇到一些問(wèn)題,在部署新的pods/deployment時(shí)可能會(huì)出現(xiàn)問(wèn)題。

不僅如此,該命名空間還包含其他的重要對(duì)象,比如kube-dns和kube-proxy,kube-dns是集群域(cluster.local)的權(quán)威命名服務(wù)器,它遞歸解析外部名稱。不完全限定的短名稱(比如myservice)先使用本地搜索路徑來(lái)完成。

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

kube-proxy管理這項(xiàng)工作:將發(fā)送到集群Kubernetes服務(wù)對(duì)象的虛擬IP地址,(VIP)的流量轉(zhuǎn)發(fā)到適當(dāng)?shù)暮蠖藀od;想了解更多的詳細(xì)信息,請(qǐng)點(diǎn)擊此處(https://www.tigera.io/blog/comparing-kube-proxy-modes-iptables-or-ipvs/)和此處(https://arthurchiao.art/blog/cracking-k8s-node-proxy/)。

這意味著您在解析外部/內(nèi)部通信時(shí)會(huì)遇到困難。

kube-public是什么命名空間?

kube-public含有一個(gè)單一的ConfigMap對(duì)象cluster-info,它有助于發(fā)現(xiàn)和安全引導(dǎo)。

如果您試圖刪除所有上述命名空間,服務(wù)器會(huì)給出如下響應(yīng):

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

預(yù)計(jì)Kubernetes v1.14中添加的kube-node-lease會(huì)像任何普通的命名空間一樣被刪除。

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

kube-node-lease這個(gè)命名空間含有與每個(gè)節(jié)點(diǎn)關(guān)聯(lián)的Lease對(duì)象。節(jié)點(diǎn)lease允許kubelet發(fā)送heartbeat(心跳),以便控制平面(節(jié)點(diǎn)控制器)可以檢測(cè)節(jié)點(diǎn)故障。

那么,如果我們刪除了kube-node-lease,會(huì)發(fā)生什么?Kubernetes通常會(huì)為每個(gè)節(jié)點(diǎn)創(chuàng)建另一個(gè)帶有Lease對(duì)象的對(duì)象,但有時(shí)命名空間移除操作會(huì)在終止?fàn)顟B(tài)卡住。

到那時(shí)我們會(huì)有一個(gè)節(jié)點(diǎn)Lease,過(guò)時(shí)的heartbeat可能會(huì)告訴節(jié)點(diǎn)控制器:該節(jié)點(diǎn)訪問(wèn)不了,從而影響節(jié)點(diǎn)之間的整體通信。

如何修復(fù)終止時(shí)卡住的命名空間刪除?

當(dāng)然,您可以嘗試弄清楚為何命名空間在終止時(shí)卡住,但有時(shí)您搞不清楚,這時(shí)我們可以使用強(qiáng)行刪除。

創(chuàng)建一個(gè)臨時(shí)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

您的輸出會(huì)像這樣子:

{
  "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"
  }}

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: