W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本頁展示如何查看、使用和刪除名字空間。 本頁同時展示如何使用 Kubernetes 名字空間來劃分集群。
kubectl get namespaces
NAME STATUS AGE
default Active 11d
kube-system Active 11d
kube-public Active 11d
初始狀態(tài)下,Kubernetes 具有三個名字空間:
default
?無名字空間對象的默認名字空間kube-system
? 由 Kubernetes 系統(tǒng)創(chuàng)建的對象的名字空間kube-public
? 自動創(chuàng)建且被所有用戶可讀的名字空間(包括未經(jīng)身份認證的)。此名字空間通常在某些資源在整個集群中可見且可公開讀取時被集群使用。此名字空間的公共方面只是一個約定,而不是一個必要條件。你還可以通過下列命令獲取特定名字空間的摘要:
kubectl get namespaces <name>
或用下面的命令獲取詳細信息:
kubectl describe namespaces <name>
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
Resource Limits
Type Resource Min Max Default
---- -------- --- --- ---
Container cpu - - 100m
請注意,這些詳情同時顯示了資源配額(如果存在)以及資源限制區(qū)間。
資源配額跟蹤并聚合 Namespace 中資源的使用情況,并允許集群運營者定義 Namespace 可能消耗的 Hard 資源使用限制。
限制區(qū)間定義了單個實體在一個 Namespace 中可使用的最小/最大資源量約束。
名字空間可以處于下列兩個階段中的一個:
Active
?名字空間正在被使用中。Terminating
?名字空間正在被刪除,且不能被用于新對象。Note: 避免使用前綴 ?
kube-
? 創(chuàng)建名字空間,因為它是為 Kubernetes 系統(tǒng)名字空間保留的。
my-namespace.yaml
? 的 YAML 文件,并寫入下列內(nèi)容:apiVersion: v1
kind: Namespace
metadata:
name: <insert-namespace-name-here>
然后運行:
kubectl create -f ./my-namespace.yaml
kubectl create namespace <insert-namespace-name-here>
請注意,名字空間的名稱必須是一個合法的 DNS 標(biāo)簽。
可選字段 ?finalizers
?允許觀察者們在名字空間被刪除時清除資源。記住如果指定了一個不存在的終結(jié)器,名字空間仍會被創(chuàng)建,但如果用戶試圖刪除它,它將陷入 ?Terminating
?狀態(tài)。
刪除名字空間使用命令:
kubectl delete namespaces <insert-some-namespace-name>
Warning: 這會刪除名字空間下的 所有內(nèi)容 !
刪除是異步的,所以有一段時間你會看到名字空間處于 ?Terminating
?狀態(tài)。
默認情況下,Kubernetes 集群會在配置集群時實例化一個 default 名字空間,用以存放集群所使用的默認 Pods、Services 和 Deployments 集合。
假設(shè)你有一個新的集群,你可以通過執(zhí)行以下操作來內(nèi)省可用的名字空間
kubectl get namespaces
NAME STATUS AGE
default Active 13m
在本練習(xí)中,我們將創(chuàng)建兩個額外的 Kubernetes 名字空間來保存我們的內(nèi)容。
在某組織使用共享的 Kubernetes 集群進行開發(fā)和生產(chǎn)的場景中:
開發(fā)團隊希望在集群中維護一個空間,以便他們可以查看用于構(gòu)建和運行其應(yīng)用程序的 Pods、Services 和 Deployments 列表。在這個空間里,Kubernetes 資源被自由地加入或移除, 對誰能夠或不能修改資源的限制被放寬,以實現(xiàn)敏捷開發(fā)。
運維團隊希望在集群中維護一個空間,以便他們可以強制實施一些嚴格的規(guī)程, 對誰可以或不可以操作運行生產(chǎn)站點的 Pods、Services 和 Deployments 集合進行控制。
該組織可以遵循的一種模式是將 Kubernetes 集群劃分為兩個名字空間:development 和 production。
讓我們創(chuàng)建兩個新的名字空間來保存我們的工作。
使用 kubectl 創(chuàng)建 ?development
?名字空間。
kubectl create -f https://k8s.io/examples/admin/namespace-dev.json
讓我們使用 kubectl 創(chuàng)建 ?production
?名字空間。
kubectl create -f https://k8s.io/examples/admin/namespace-prod.json
為了確保一切正常,列出集群中的所有名字空間。
kubectl get namespaces --show-labels
NAME STATUS AGE LABELS
default Active 32m <none>
development Active 29s name=development
production Active 23s name=production
Kubernetes 名字空間為集群中的 Pods、Services 和 Deployments 提供了作用域。
與一個名字空間交互的用戶不會看到另一個名字空間中的內(nèi)容。
為了演示這一點,讓我們在 ?development
?名字空間中啟動一個簡單的 Deployment 和 Pod。
kubectl create deployment snowflake --image=k8s.gcr.io/serve_hostname -n=development
kubectl scale deployment snowflake --replicas=2 -n=development
我們創(chuàng)建了一個副本個數(shù)為 2 的 Deployment,運行名為 ?snowflake
?的 Pod,其中包含一個負責(zé)提供主機名的基本容器。
kubectl get deployment -n=development
NAME READY UP-TO-DATE AVAILABLE AGE
snowflake 2/2 2 2 2m
kubectl get pods -l app=snowflake -n=development
NAME READY STATUS RESTARTS AGE
snowflake-3968820950-9dgr8 1/1 Running 0 2m
snowflake-3968820950-vgc4n 1/1 Running 0 2m
看起來還不錯,開發(fā)人員能夠做他們想做的事,而且他們不必擔(dān)心會影響到 ?production
?名字空間下面的內(nèi)容。
讓我們切換到 ?production
?名字空間,展示一下一個名字空間中的資源是如何對 另一個名字空間隱藏的。
名字空間 ?production
?應(yīng)該是空的,下面的命令應(yīng)該不會返回任何東西。
kubectl get deployment -n=production
kubectl get pods -n=production
生產(chǎn)環(huán)境下一般以養(yǎng)牛的方式運行負載,所以讓我們創(chuàng)建一些 Cattle(牛)Pod。
kubectl create deployment cattle --image=k8s.gcr.io/serve_hostname -n=production
kubectl scale deployment cattle --replicas=5 -n=production
kubectl get deployment -n=production
NAME READY UP-TO-DATE AVAILABLE AGE
cattle 5/5 5 5 10s
kubectl get pods -l app=cattle -n=production
NAME READY STATUS RESTARTS AGE
cattle-2263376956-41xy6 1/1 Running 0 34s
cattle-2263376956-kw466 1/1 Running 0 34s
cattle-2263376956-n4v97 1/1 Running 0 34s
cattle-2263376956-p5p3i 1/1 Running 0 34s
cattle-2263376956-sxpth 1/1 Running 0 34s
此時,應(yīng)該很清楚的展示了用戶在一個名字空間中創(chuàng)建的資源對另一個名字空間是隱藏的。
隨著 Kubernetes 中的策略支持的發(fā)展,我們將擴展此場景,以展示如何為每個名字空間提供不同的授權(quán)規(guī)則。
單個集群應(yīng)該能滿足多個用戶及用戶組的需求(以下稱為 “用戶社區(qū)”)。
Kubernetes 名字空間 幫助不同的項目、團隊或客戶去共享 Kubernetes 集群。
名字空間通過以下方式實現(xiàn)這點:
使用多個名字空間是可選的。
每個用戶社區(qū)都希望能夠與其他社區(qū)隔離開展工作。
每個用戶社區(qū)都有自己的:
集群運營者可以為每個唯一用戶社區(qū)創(chuàng)建名字空間。
名字空間為下列內(nèi)容提供唯一的作用域:
用例包括:
當(dāng)你創(chuàng)建服務(wù)時,Kubernetes 會創(chuàng)建相應(yīng)的 DNS 條目。 此條目的格式為 ?<服務(wù)名稱>.<名字空間名稱>.svc.cluster.local
?。 這意味著如果容器使用 ?<服務(wù)名稱>
?,它將解析為名字空間本地的服務(wù)。 這對于在多個名字空間(如開發(fā)、暫存和生產(chǎn))中使用相同的配置非常有用。 如果要跨名字空間訪問,則需要使用完全限定的域名(FQDN)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: