新聞中心
名字空間
在 Kubernetes 中,“名字空間(Namespace)”提供一種機制,將同一集群中的資源劃分為相互隔離的組。 同一名字空間內(nèi)的資源名稱要唯一,但跨名字空間時沒有這個要求。 名字空間作用域僅針對帶有名字空間的對象,例如 Deployment、Service 等, 這種作用域對集群訪問的對象不適用,例如 StorageClass、Node、PersistentVolume 等。

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設計、成都做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務黑河,10余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220
何時使用多個名字空間
名字空間適用于存在很多跨多個團隊或項目的用戶的場景。對于只有幾到幾十個用戶的集群,根本不需要創(chuàng)建或考慮名字空間。當需要名稱空間提供的功能時,請開始使用它們。
名字空間為名稱提供了一個范圍。資源的名稱需要在名字空間內(nèi)是唯一的,但不能跨名字空間。 名字空間不能相互嵌套,每個 Kubernetes 資源只能在一個名字空間中。
名字空間是在多個用戶之間劃分集群資源的一種方法(通過資源配額)。
不必使用多個名字空間來分隔僅僅輕微不同的資源,例如同一軟件的不同版本: 應該使用標簽 來區(qū)分同一名字空間中的不同資源。
使用名字空間
創(chuàng)建名字空間
避免使用前綴 ?
kube-? 創(chuàng)建名字空間,因為它是為 Kubernetes 系統(tǒng)名字空間保留的。
新建一個名為 my-namespace.yaml 的 YAML 文件,并寫入下列內(nèi)容:
apiVersion: v1
kind: Namespace
metadata:
name: 然后運行:
kubectl create -f ./my-namespace.yaml
2、或者,你可以使用下面的命令創(chuàng)建名字空間:
kubectl create namespace
請注意,名字空間的名稱必須是一個合法的 DNS 標簽。
可選字段 finalizers 允許觀察者們在名字空間被刪除時清除資源。記住如果指定了一個不存在的終結器,名字空間仍會被創(chuàng)建,但如果用戶試圖刪除它,它將陷入 Terminating 狀態(tài)。
更多有關 finalizers 的信息請查閱 設計文檔 中名字空間部分。
刪除名字空間
刪除名字空間使用命令:
kubectl delete namespaces
Warning: 這會刪除名字空間下的 所有內(nèi)容 !
刪除是異步的,所以有一段時間你會看到名字空間處于 ?Terminating ?狀態(tài)。
查看名字空間
你可以使用以下命令列出集群中現(xiàn)存的名字空間:
kubectl get namespace
Kubernetes 會創(chuàng)建四個初始名字空間:
- ?
default?沒有指明使用其它名字空間的對象所使用的默認名字空間 - ?
kube-system? Kubernetes 系統(tǒng)創(chuàng)建對象所使用的名字空間 - ?
kube-public? 這個名字空間是自動創(chuàng)建的,所有用戶(包括未經(jīng)過身份驗證的用戶)都可以讀取它。 這個名字空間主要用于集群使用,以防某些資源在整個集群中應該是可見和可讀的。 這個名字空間的公共方面只是一種約定,而不是要求。 - ?
kube-node-lease? 此名字空間用于與各個節(jié)點相關的 租約(Lease)對象。 節(jié)點租期允許 kubelet 發(fā)送心跳,由此控制面能夠檢測到節(jié)點故障。
為請求設置名字空間
要為當前請求設置名字空間,請使用 ?--namespace? 參數(shù)。
例如:
kubectl run nginx --image=nginx --namespace=<名字空間名稱>
kubectl get pods --namespace=<名字空間名稱>設置名字空間偏好
你可以永久保存名字空間,以用于對應上下文中所有后續(xù) kubectl 命令。
kubectl config set-context --current --namespace=<名字空間名稱>
# 驗證之
kubectl config view | grep namespace:名字空間和 DNS
當你創(chuàng)建一個服務 時, Kubernetes 會創(chuàng)建一個相應的 DNS 條目。
該條目的形式是 ?<服務名稱>.<名字空間名稱>.svc.cluster.local?,這意味著如果容器只使用 ?<服務名稱>?,它將被解析到本地名字空間的服務。這對于跨多個名字空間(如開發(fā)、分級和生產(chǎn)) 使用相同的配置非常有用。如果你希望跨名字空間訪問,則需要使用完全限定域名(FQDN)。
因此,所有的名字空間名稱都必須是合法的 RFC 1123 DNS 標簽。
Warning:
通過創(chuàng)建與 公共頂級域名 同名的名字空間,這些名字空間中的服務可以擁有與公共 DNS 記錄重疊的、較短的 DNS 名稱。 所有名字空間中的負載在執(zhí)行 DNS 查找時,如果查找的名稱沒有 尾部句點, 就會被重定向到這些服務上,因此呈現(xiàn)出比公共 DNS 更高的優(yōu)先序。
為了緩解這類問題,需要將創(chuàng)建名字空間的權限授予可信的用戶。 如果需要,你可以額外部署第三方的安全控制機制,例如以 準入 Webhook 的形式,阻止用戶創(chuàng)建與公共 TLD 同名的名字空間。
并非所有對象都在名字空間中
大多數(shù) kubernetes 資源(例如 Pod、Service、副本控制器等)都位于某些名字空間中。 但是名字空間資源本身并不在名字空間中。而且底層資源,例如 節(jié)點 和持久化卷不屬于任何名字空間。
查看哪些 Kubernetes 資源在名字空間中,哪些不在名字空間中:
# 位于名字空間中的資源
kubectl api-resources --namespaced=true
# 不在名字空間中的資源
kubectl api-resources --namespaced=false自動打標簽
FEATURE STATE: Kubernetes 1.21 [beta]
Kubernetes 控制面會為所有名字空間設置一個不可變更的 標簽 ?kubernetes.io/metadata.name?,只要 ?NamespaceDefaultLabelName? 這一 特性門控 被啟用。標簽的值是名字空間的名稱。
名稱欄目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes名字空間
轉載來源:http://m.5511xx.com/article/cdjhdoh.html


咨詢
建站咨詢
