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

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


咨詢
建站咨詢
