新聞中心
名字空間演練
Kubernetes 名字空間 有助于不同的項(xiàng)目、團(tuán)隊(duì)或客戶去共享 Kubernetes 集群。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比中山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式中山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋中山地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
名字空間通過(guò)以下方式實(shí)現(xiàn)這點(diǎn):
- 為名字設(shè)置作用域。
- 為集群中的部分資源關(guān)聯(lián)鑒權(quán)和策略的機(jī)制。
使用多個(gè)名字空間是可選的。
此示例演示了如何使用 Kubernetes 名字空間細(xì)分集群。
在開(kāi)始之前
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
要檢查版本,請(qǐng)輸入 kubectl version。
環(huán)境準(zhǔn)備
此示例作如下假設(shè):
- 你已擁有一個(gè)配置好的 Kubernetes 集群。
- 你已對(duì) Kubernetes 的 Pods、 Services 和 Deployments 有基本理解。
理解默認(rèn)名字空間
默認(rèn)情況下,Kubernetes 集群會(huì)在配置集群時(shí)實(shí)例化一個(gè)默認(rèn)名字空間,用以存放集群所使用的默認(rèn) Pod、Service 和 Deployment 集合。
假設(shè)你有一個(gè)新的集群,你可以通過(guò)執(zhí)行以下操作來(lái)檢查可用的名字空間:
kubectl get namespaces
NAME STATUS AGE
default Active 13m創(chuàng)建新的名字空間
在本練習(xí)中,我們將創(chuàng)建兩個(gè)額外的 Kubernetes 名字空間來(lái)保存我們的內(nèi)容。
我們假設(shè)一個(gè)場(chǎng)景,某組織正在使用共享的 Kubernetes 集群來(lái)支持開(kāi)發(fā)和生產(chǎn):
開(kāi)發(fā)團(tuán)隊(duì)希望在集群中維護(hù)一個(gè)空間,以便他們可以查看用于構(gòu)建和運(yùn)行其應(yīng)用程序的 Pod、Service 和 Deployment 列表。在這個(gè)空間里,Kubernetes 資源被自由地加入或移除, 對(duì)誰(shuí)能夠或不能修改資源的限制被放寬,以實(shí)現(xiàn)敏捷開(kāi)發(fā)。
運(yùn)維團(tuán)隊(duì)希望在集群中維護(hù)一個(gè)空間,以便他們可以強(qiáng)制實(shí)施一些嚴(yán)格的規(guī)程, 對(duì)誰(shuí)可以或誰(shuí)不可以操作運(yùn)行生產(chǎn)站點(diǎn)的 Pod、Service 和 Deployment 集合進(jìn)行控制。
該組織可以遵循的一種模式是將 Kubernetes 集群劃分為兩個(gè)名字空間:?development ?和 ?production?。
讓我們創(chuàng)建兩個(gè)新的名字空間來(lái)保存我們的工作。
文件 ?namespace-dev.json? 描述了 ?development ?名字空間:
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
使用 kubectl 創(chuàng)建 ?development ?名字空間。
kubectl create -f https://K8S.io/examples/admin/namespace-dev.json
將下列的內(nèi)容保存到文件 ?namespace-prod.json? 中, 這些內(nèi)容是對(duì) ?production ?名字空間的描述:
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "production",
"labels": {
"name": "production"
}
}
}
讓我們使用 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
development Active 29s name=development
production Active 23s name=production 在每個(gè)名字空間中創(chuàng)建 pod
Kubernetes 名字空間為集群中的 Pod、Service 和 Deployment 提供了作用域。
與一個(gè)名字空間交互的用戶不會(huì)看到另一個(gè)名字空間中的內(nèi)容。
為了演示這一點(diǎn),讓我們?cè)?nbsp;development 名字空間中啟動(dòng)一個(gè)簡(jiǎn)單的 Deployment 和 Pod。
我們首先檢查一下當(dāng)前的上下文:
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://130.211.122.180
name: lithe-cocoa-92103_kubernetes
contexts:
- context:
cluster: lithe-cocoa-92103_kubernetes
user: lithe-cocoa-92103_kubernetes
name: lithe-cocoa-92103_kubernetes
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
user:
password: h5M0FtUUIflBSdI7
username: adminkubectl config current-context
lithe-cocoa-92103_kubernetes
下一步是為 kubectl 客戶端定義一個(gè)上下文,以便在每個(gè)名字空間中工作。 "cluster" 和 "user" 字段的值將從當(dāng)前上下文中復(fù)制。
kubectl config set-context dev --namespace=development \
--cluster=lithe-cocoa-92103_kubernetes \
--user=lithe-cocoa-92103_kubernetes
kubectl config set-context prod --namespace=production \
--cluster=lithe-cocoa-92103_kubernetes \
--user=lithe-cocoa-92103_kubernetes默認(rèn)情況下,上述命令會(huì)添加兩個(gè)上下文到 ?.kube/config? 文件中。 你現(xiàn)在可以查看上下文并根據(jù)你希望使用的名字空間并在這兩個(gè)新的請(qǐng)求上下文之間切換。
查看新的上下文:
kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https://130.211.122.180
name: lithe-cocoa-92103_kubernetes
contexts:
- context:
cluster: lithe-cocoa-92103_kubernetes
user: lithe-cocoa-92103_kubernetes
name: lithe-cocoa-92103_kubernetes
- context:
cluster: lithe-cocoa-92103_kubernetes
namespace: development
user: lithe-cocoa-92103_kubernetes
name: dev
- context:
cluster: lithe-cocoa-92103_kubernetes
namespace: production
user: lithe-cocoa-92103_kubernetes
name: prod
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
user:
password: h5M0FtUUIflBSdI7
username: admin讓我們切換到 ?development ?名字空間進(jìn)行操作。
kubectl config use-context dev
你可以使用下列命令驗(yàn)證當(dāng)前上下文:
kubectl config current-context
dev
此時(shí),我們從命令行向 Kubernetes 集群發(fā)出的所有請(qǐng)求都限定在 ?development ?名字空間中。
讓我們創(chuàng)建一些內(nèi)容。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: snowflake
name: snowflake
spec:
replicas: 2
selector:
matchLabels:
app: snowflake
template:
metadata:
labels:
app: snowflake
spec:
containers:
- image: k8s.gcr.io/serve_hostname
imagePullPolicy: Always
name: snowflake
應(yīng)用清單文件來(lái)創(chuàng)建 Deployment。
我們創(chuàng)建了一個(gè)副本大小為 2 的 Deployment,該 Deployment 運(yùn)行名為 ?snowflake ?的 Pod, 其中包含一個(gè)僅提供主機(jī)名服務(wù)的基本容器。
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
snowflake 2/2 2 2 2mkubectl get pods -l app=snowflake
NAME READY STATUS RESTARTS AGE
snowflake-3968820950-9dgr8 1/1 Running 0 2m
snowflake-3968820950-vgc4n 1/1 Running 0 2m這很棒,開(kāi)發(fā)人員可以做他們想要的事情,而不必?fù)?dān)心影響 ?production ?名字空間中的內(nèi)容。
讓我們切換到 ?production ?名字空間,展示一個(gè)名字空間中的資源如何對(duì)另一個(gè)名字空間不可見(jiàn)。
kubectl config use-context prod
?production? 名字空間應(yīng)該是空的,下列命令應(yīng)該返回的內(nèi)容為空。
kubectl get deployment
kubectl get pods生產(chǎn)環(huán)境需要以放牛的方式運(yùn)維,讓我們創(chuàng)建一些名為 ?cattle ?的 Pod。
kubectl create deployment cattle --image=k8s.gcr.io/serve_hostname --replicas=5
kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGE
cattle 5/5 5 5 10skubectl get pods -l run=cattle
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此時(shí),應(yīng)該很清楚的展示了用戶在一個(gè)名字空間中創(chuàng)建的資源對(duì)另一個(gè)名字空間是不可見(jiàn)的。
隨著 Kubernetes 中的策略支持的發(fā)展,我們將擴(kuò)展此場(chǎng)景,以展示如何為每個(gè)名字空間提供不同的授權(quán)規(guī)則。
網(wǎng)站名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 名字空間演練
網(wǎng)址分享:http://fisionsoft.com.cn/article/dghhhjg.html


咨詢
建站咨詢
