4種 Kubernetes 名稱空間永遠不要觸碰!
Kubernetes 隨帶許多( N amespace ) 名稱空間。 一些 名稱空間很重要,事關你的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-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
執行以下命令:
$ 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
您的輸出會像這樣子:
{
"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"
}}
但願本文對您有所幫助!
推薦閱讀 點選標題可跳轉
《Docker中Image、Container與Volume的遷移》
《HTTPS 為什麼是安全的? 說一下他的底層實現原理? 》
免責宣告:本文內容來源於網路,所載內容僅供參考。轉載僅為學習和交流之目的,如無意中侵犯您的合法權益,請及時聯絡Docker中文社群!
- 6 款適用於 Linux 的最佳免費防毒軟體
- 17 張程式設計師桌布(使用頻率很高)
- 【Docker】【GitLab】dokcer 安裝搭建最新 gitlab 中文社群版 (搭建一個小型個人的“Gitee” 或 “GitHub”)
- 解決 Jenkins 效能緩慢的問題
- Kubernetes RBAC (基於角色的訪問控制) 的演進歷史、設計理念及簡潔實現
- 殼牌公司是如何在Kubernetes上不到一天就建立了1萬個AI模型的?
- 執行 Kubernetes 叢集故障分析案例!
- 如何給 Docker 映象進行安全簽名
- 入口控制器:Kubernetes的瑞士軍刀
- 12 個 Kubernetes 最佳安全加固指南
- 4種 Kubernetes 名稱空間永遠不要觸碰!
- 一次核心問題引起的 Kubernetes 節點故障解決記實
- Colima:Docker Desktop for Mac 的免費替代品,輕鬆管理容器和 K8s(支援 M1 晶片)
- 5 分鐘帶你瞭解 DevOps 的發展史
- 2021 年 Top 8 開源 Kubernetes 安全工具
- Docker確確實實改變了世界!
- 7 張圖帶你搞懂 Kubernetes Flannel 高效能網路外掛的兩種常用工作模式
- Kubernetes 常見運維技巧
- 世界最著名的 16 個開源軟體基金會,你認識哪幾個呢?
- 製作一個超級精簡的 Docker 映象只需7步