1. 程式人生 > 實用技巧 >Kubernetes & Namespace

Kubernetes & Namespace

Kubernetes & Namespace

Namespace(名稱空間)是Kubernetes系統中的另一個非常重要的概念。

Namespace在很多情況下用於實現多租戶的資源隔離。Namespace通過將叢集內部的資源物件“分配”到不同的Namespace中,形成邏輯上分組的不同專案、小組或使用者組,便於不同的分組在共享使用整個叢集的資源的同時還能被分別管理。

Kubernetes叢集在啟動後會建立一個名為default的Namespace,通過kubectl可以檢視。

roverliang@roverliangdeMac-mini study % kubectl get namespaces
NAME                   STATUS   AGE
default                Active   45h
kube-node-lease        Active   45h
kube-public            Active   45h
kube-system            Active   45h
kubernetes-dashboard   Active   44h

接下來,如果不特別指明Namespace,則使用者建立的Pod、RC、Service都將被系統建立到這個預設的名為default的Namespace中。

Namespace的定義很簡單。如下所示的YAML定義了名為development的Namespace。

apiVersion: v1
kind: Namespace
metadata:
  name: development

一旦建立了Namespace,我們在建立資源物件時就可以指定這個資源物件屬於哪個Namespace。比如在下面的例子中定義了一個名為busybox的Pod,並將其放入development這個Namespace

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: development
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    name: busybox

建立Namespace

overliang@roverliangdeMac-mini study % kubectl create -f development.yaml
namespace/development created

建立busybox-pod

roverliang@roverliangdeMac-mini study % kubectl create -f developement-pod.yaml
pod/busybox created

檢視所有的pods

roverliang@roverliangdeMac-mini study % kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-64b64df8c9-x6gzz   1/1     Running   0          45h
mysql-frrfx                       1/1     Running   0          27h
myweb-9jv2z                       1/1     Running   0          27h
myweb-jcjpz                       1/1     Running   0          27h
myweb-t5hc6                       1/1     Running   0          27h

如果不加引數,則kubectl get命令將僅顯示屬於default名稱空間的資源物件。

可以在kubectl命令中加入--namespace引數來檢視某個名稱空間中的物件:

roverliang@roverliangdeMac-mini study % kubectl get pods --namespace=development
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          32s

當給每個租戶建立一個Namespace來實現多租戶的資源隔離時,還能結合Kubernetes的資源配額管理,限定不同租戶能佔用的資源,例如CPU使用量、記憶體使用量等。