namespace是k8s集群級別的資源,用於將集群分隔為多個隔離的邏輯分區以配置給不同的用戶、租戶、環境或項目使用,例如,可以為development、qa、和production應用環境分別創建各自的名稱空間。
k8s的絕大多數資源都隸屬於名稱空間級別(另一個是全局級別或集群級別),namespace為這類資源提供了隔離的作用域,同一名稱空間內的同一類資源名必須是唯一的,但跨名稱空間時並無此限制。k8s還有一些資源隸屬於集群級別的,如node、namespace、PersistentVolume等資源,它們不屬於任何名稱空間,因此資源對象的名稱必須全局唯一。
k8s的名稱空間資源不同於linux系統的名稱空間,它們是各自獨立的概念,另外,k8s的名稱空間並不能實現pod間的通信隔離,它僅用於限制資源對象名稱的作用域。
1、查看名稱空間及其資源對象
k8s集群默認提供了幾個名稱空間用於特定目的,例如,kube-system主要用於運行系統級資源,而default則為那些未指定名稱空間的資源操作提供一個默認值。
使用kubectl get namespace可以查看namespace資源,使用kubectl describe namespace $NAME可以查看特定的名稱空間的詳細信息。
2、管理namespace資源
namespace是k8sapi的標准資源類型之一,namespace資源屬性較少,通常只需要指定名稱即可創建,如“kubectl create namespace qa”。namespace資源的名稱僅能由字母、數字、下划線、連接線等字符組成。然而考慮到聲明式對象配置管理機制的強大功能,推薦使用apply和patch等命令進行資源創建及修改等一類的管理操作。而刪除namespace資源會級聯刪除其包含的所有其他資源對象:
命令格式 | 功能 |
kubectl delete TYPE RESOURCE -n NS | 刪除指定名稱空間內的指定資源 |
kubectl delete TYPE --all -n NS | 刪除指定名稱空間內的指定類型的所有資源 |
kubectl delete all -n -NS | 刪除指定名稱空間內的所有資源 |
kubectl delete all --all | 刪除所有名稱空間中的所有資源 |
PS:namespace對象僅用於資源對象名稱的隔離,它自身並不能隔絕跨名稱空間的pod間通信,那是網絡策略資源的功能