1. 程式人生 > 其它 >03-Kubernetes名稱空間

03-Kubernetes名稱空間

1、什麼是名稱空間

Kubernetes支援多個虛擬叢集,它們底層依賴於同一個物理叢集。這些虛擬叢集被稱為名稱空間。

名稱空間(namespace)是Kubernetes叢集級別的資源,可以給不同的使用者、租戶、環境或者專案建立對應的名稱空間,例如,可以給testdevlomentproduction環境分別建立各自的名稱空間。

2、名稱空間的應用場景

名稱空間適用於存在很多跨多個團隊或專案的使用者的場景。對於只有幾到幾十個使用者的叢集,根本不需要建立或考慮名稱空間。

2.1 檢視名稱空間及其資源物件

k8s叢集預設提供了幾個名稱空間用於特定目的,例如,kube-system主要用於執行系統級資源,存放k8s一些元件的。而default則為那些未指定名稱空間的資源操作提供一個預設值。

使用kubectl get namespaces可以檢視namespace資源,使用kubectl describe namespace $NAME可以檢視特定的名稱空間的詳細資訊。

kubectl get ns
kubectl get namespaces

kubectl describe namespaces kube-system
kubectl describe ns kubernetes-dashboard

2.2 管理名稱空間資源

  • namespace資源屬性較少,通常只需要指定名稱即可建立,如kubectl create namespace qa

  • namespace資源的名稱僅能由字母、數字、下劃線、連線線等字元

    組成。

  • 刪除namespace資源會級聯刪除其包含的所有其他資源物件。

3、名稱空間使用案例

3.1 建立名稱空間

kubectl create namespace test

3.2 切換名稱空間

kubectl config set-context --current --namespace=test

切換後kubeconfig檔案也會自動改變:

3.3 檢視哪些資源屬於名稱空間級別

kubectl api-resources --namespaced=true

名稱空間級別的資源有:

3.4 名稱空間資源限額

namespace是名稱空間,裡面有很多資源,那麼我們可以對名稱空間資源做個限制,防止該名稱空間部署的資源超過限制。

我們可以在建立名稱空間的時候就對該名稱空間的資源進行限額。

通過資源清單對名稱空間進行資源限額:

# namespace-test.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test
spec:
  finalizers:
    - kubernetes

---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: test
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi

建立的ResourceQuota物件將在test名字空間中新增以下限制:

  • 每個容器必須設定記憶體請求(memory request),記憶體限額(memory limit),cpu請求(cpu request)和cpu限額(cpu limit)。
  • 所有容器的記憶體請求總額不得超過2GiB。
  • 所有容器的記憶體限額總額不得超過4 GiB。
  • 所有容器的CPU請求總額不得超過2 CPU。
  • 所有容器的CPU限額總額不得超過4CPU。

更新資源配置清單:

kubectl apply -f namespace-test.yaml

Kubernetes會自動建立名稱空間並設定資源限額:

在有資源限額的名稱空間中建立Pod必須設定資源限額,否則建立Pod會失敗!

# pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    name: pod-test
spec:
  containers:
    - name: pod-test
      image: tomcat:8.5-jre8-alpine
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent

更新資源配置檔案:

kubectl apply -f pod-test.yaml

由於沒有設定資源限額,所以報錯如下:

修改之後的資源配置檔案:

# pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    name: pod-test
spec:
  containers:
    - name: pod-test
      image: tomcat:8.5-jre8-alpine
      resources:
        requests:
          memory: "128Mi"
          cpu: "500m"
        limits:
          memory: "256Mi"
          cpu: "1000m"
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent

更新資源配置清單:

kubectl apply -f pod-test.yaml

kubectl get pods -n test -o wide

Pod成功建立: