??The Begin??點點關(guān)注,收藏不迷路??
|
在Kubernetes(K8s)中,Namespace是一種用于在集群中創(chuàng)建多個虛擬集群的方式。它將集群資源進行邏輯分組,使得不同的團隊或項目可以獨立地使用資源,避免資源沖突和混亂。本篇博客將詳細介紹Kubernetes的Namespace概念、用法和實戰(zhàn)應(yīng)用場景。
一、Namespace簡介
1.1 什么是Namespace
Namespace是Kubernetes中的一種資源對象,用于將集群中的資源進行邏輯分組和隔離。它可以看作是一個虛擬的集群,擁有自己的資源配額、網(wǎng)絡(luò)和存儲等。不同的Namespace之間是完全隔離的,各自擁有自己的資源和配置,(默認不隔離網(wǎng)絡(luò)
)。
1.2 Namespace的作用
Namespace的主要作用是將集群資源進行分組,使得不同團隊或項目可以在同一個Kubernetes集群上獨立使用資源,避免資源沖突和混亂。它提供了一種邏輯隔離的方式,有助于管理和監(jiān)控不同項目的資源使用情況。
1.3 命名空間的分類
Kubernetes中的Namespace可以分為三種類型:
1、默認命名空間(default):
集群中的默認命名空間,用于存放沒有指定Namespace的資源對象。
2、系統(tǒng)命名空間:
用于存放Kubernetes自帶的系統(tǒng)組件,如kube-system、kube-public等。
3、用戶自定義命名空間:
用戶可以創(chuàng)建自己的Namespace,用于部署和管理自己的應(yīng)用程序。
##獲取當前Kubernetes集群中的所有命名空間的信息
[root@k8s-01 ~]# kubectl get ns
NAME STATUS AGE
default Active 21h
kube-node-lease Active 21h
kube-public Active 21h
kube-system Active 21h
kubernetes-dashboard Active 20h
[root@k8s-01 ~]#
輸出信息顯示了當前集群中存在的命名空間。每個命名空間都有一個狀態(tài)和一個年齡。
以下是輸出信息的解釋:
default:默認的命名空間,用于存放沒有指定命名空間的資源。
kube-node-lease:用于存放節(jié)點租約信息的命名空間。
kube-public:用于存放公共資源的命名空間,任何人都可以訪問。
kube-system:用于存放集群的核心組件和控制器的命名空間。
kubernetes-dashboard:用于存放Kubernetes儀表板的命名空間。
my-namespace:自定義的命名空間,用戶創(chuàng)建的命名空間。
二、創(chuàng)建和管理Namespace
2.1 創(chuàng)建Namespace
在Kubernetes中創(chuàng)建一個Namespace非常簡單,可以通過kubectl命令行工具或者YAML文件進行創(chuàng)建。
使用kubectl命令創(chuàng)建Namespace的語法如下:
kubectl create namespace <namespace-name>
或者
kubectl create ns <namespace-name>
例如,創(chuàng)建一個名為”my-namespace”的Namespace:
kubectl create namespace my-namespace
或者
kubectl create ns my-namespace
使用YAML文件創(chuàng)建Namespace的示例:
touch my-namespace.yaml文件。再使用命令kubectl apply -f my-namespace.yaml,創(chuàng)建Namespace。
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
通過kubectl命令創(chuàng)建Namespace的方式更為常用,因為它更直觀且方便管理。
2.2 管理Namespace
管理Namespace主要涉及到查看、切換和刪除Namespace。
查看所有Namespace的命令如下:
kubectl get namespaces
查看指定命名空間的詳細信息,可以使用以下命令:
kubectl get namespace <namespace-name>
例如,要查看名為”my-namespace”的命名空間的詳細信息,可以運行以下命令:
kubectl get namespace my-namespace
此命令將顯示有關(guān)該命名空間的詳細信息,包括名稱、狀態(tài)、創(chuàng)建時間等。
如果要查看命名空間中的所有資源(如Pod、Deployment等),可以使用以下命令:
kubectl get all -n <namespace-name>
例如,要查看命名空間”my-namespace”中的所有資源,可以運行以下命令:
kubectl get all -n my-namespace
此命令將顯示命名空間中的所有資源的詳細信息,包括資源類型、名稱、狀態(tài)等。
切換到指定Namespace的命令如下:
kubectl config set-context --current --namespace=<namespace-name>
查看當前使用的 namespace 命令如下:
kubectl describe sa default | grep Namespace
刪除指定Namespace的命令如下:
kubectl delete namespace <namespace-name>
需要注意的是,刪除Namespace會將其下的所有資源對象一并刪除,請謹慎操作。
三、Namespace的實戰(zhàn)應(yīng)用
3.1 部署多個項目
Namespace可以用于在同一個Kubernetes集群上部署多個項目,實現(xiàn)資源的復用和共享。不同的項目可以在各自的Namespace中進行部署,相互之間不會產(chǎn)生沖突。
例如,我們可以創(chuàng)建兩個Namespace,分別用于部署”project-A”和”project-B”:
apiVersion: v1
kind: Namespace
metadata:
name: project-a
---
apiVersion: v1
kind: Namespace
metadata:
name: project-b
這樣,”project-A”和”project-B”就可以在各自的Namespace中獨立進行部署和管理。
3.2 環(huán)境隔離
Namespace還可以實現(xiàn)不同環(huán)境之間的隔離,例如開發(fā)、測試和生產(chǎn)環(huán)境。通過為每個環(huán)境創(chuàng)建獨立的Namespace,可以確保不同環(huán)境之間的資源和配置相互隔離,避免因為環(huán)境問題導致的不可預(yù)期的故障。
例如,可以創(chuàng)建三個Namespace分別用于開發(fā)、測試和生產(chǎn)環(huán)境:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Namespace
metadata:
name: test
---
apiVersion: v1
kind: Namespace
metadata:
name: prod
這樣,開發(fā)團隊可以在dev Namespace中進行開發(fā)和測試,測試團隊可以在test Namespace中進行測試,而生產(chǎn)環(huán)境則部署在prod Namespace中。
3.3 資源配額控制
Namespace還可以用于控制資源的配額和使用情況。通過設(shè)置資源配額,可以限制每個Namespace中的資源使用量,避免資源被某個團隊或項目獨占,確保公平和合理的資源分配。
例如,可以為每個Namespace設(shè)置資源配額,限制CPU和內(nèi)存的使用量:
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: my-namespace
spec:
hard:
requests.cpu: "1"
requests.memory: "1Gi"
limits.cpu: "2"
limits.memory: "2Gi"
這樣,my-namespace Namespace中的資源使用量將受到限制。
3.4 訪問控制
Namespace還可以用于實現(xiàn)訪問控制,限制不同團隊或項目對資源的訪問權(quán)限。通過RBAC(Role-Based Access Control)機制,可以為每個Namespace分配不同的角色和權(quán)限,實現(xiàn)細粒度的訪問控制。
例如,可以為每個Namespace創(chuàng)建不同的ServiceAccount,并根據(jù)需要為其分配不同的角色和權(quán)限。
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
namespace: my-namespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: my-role
namespace: my-namespace
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "create", "delete"]
#verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # 可讀寫
#verbs: ["get", "watch", "list"] # 只讀權(quán)限
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-rolebinding
namespace: my-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: my-role
subjects:
- kind: ServiceAccount
name: my-serviceaccount
namespace: my-namespace
這樣,my-serviceaccount就擁有了在my-namespace Namespace中對pods資源進行g(shù)et、list、create和delete操作的權(quán)限。
1、獲取指定命名空間(my-namespace)中的所有ServiceAccount(SA)的列表
kubectl get sa -n my-namespace
2、獲取指定命名空間(my-namespace)中的角色(role)對象的信息
kubectl get role -n my-namespace
3、獲取指定命名空間中的角色(Role)的詳細信息,包括角色名稱、命名空間、創(chuàng)建時間、標簽、規(guī)則等。
kubectl describe role -n my-namespace my-role
4、獲取指定命名空間中的所有角色綁定(rolebinding)的命令
kubectl get rolebinding -n my-namespace
四、Namespace的最佳實踐
4.1 命名規(guī)范
為了方便管理和維護,建議為Namespace使用一致的命名規(guī)范。可以根據(jù)團隊、項目或環(huán)境等進行命名,例如team-a、project-b或dev等。
4.2 資源限制
在創(chuàng)建Namespace時,可以根據(jù)實際需求設(shè)置資源限制。合理的資源限制可以避免資源被獨占,確保公平和合理的資源分配。
4.3 監(jiān)控和日志
對于每個Namespace,建議設(shè)置監(jiān)控和日志系統(tǒng),及時了解資源使用情況和應(yīng)用程序運行狀態(tài)??梢允褂肞rometheus、Grafana等工具進行監(jiān)控,ELK等工具進行日志收集和分析。
4.4 清理和維護
定期清理不再使用的Namespace和資源對象,避免資源浪費和集群混亂。可以設(shè)置自動清理策略,例如使用TTL Controller進行自動刪除過期的Namespace。文章來源:http://www.zghlxwxcb.cn/news/detail-776557.html
總結(jié):希望本篇博客能夠幫助讀者更好地理解和應(yīng)用Kubernetes的Namespace功能。如果有任何問題或建議,歡迎留言討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-776557.html
??The End??點點關(guān)注,收藏不迷路??
|
到了這里,關(guān)于Kubernetes(k8s):Namespace詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!