Kubernetes – Namespaces

wongchaofan發表於2024-06-05

Kubernetes 名稱空間是一種讓您能夠組織資源的機制。它就像叢集內的虛擬叢集。名稱空間將資源與其他名稱空間的資源隔離開來。例如,您需要在一個名稱空間中為部署/服務使用不同的名稱,但您可以在兩個不同的名稱空間中為部署使用相同的名稱。

初始名稱空間

  • kube-system: Master、kubectl 等系統程序都部署在此名稱空間中;因此建議不要建立或修改該名稱空間。
  • kube-public:此名稱空間包含可公開訪問的資料,例如包含叢集資訊的configMap 。
  • kube-node-lease:該名稱空間是節點的心跳。每個節點都有其關聯的租約物件。它決定了節點的可用性。
  • default:這是您預設用於建立資源的名稱空間。

雖然您建立的任何資源都將在預設名稱空間中建立,但您也可以建立自己的新名稱空間並在那裡建立資源。

注意:避免建立帶有字首 Kube- 的名稱空間,因為它是為 Kubernetes 系統名稱空間保留的,您不應嘗試修改它們。

使用名稱空間

kubernetes 中的名稱空間是一種在物理叢集中建立和組織虛擬叢集的方法,我們可以在其中隔離單個叢集中的一組資源。名稱空間有助於組織叢集中的資源,例如pod服務。可以使用 kubernetes 名稱空間來管理應用程式和授權的工作負載。

檢視名稱空間

檢視名稱空間時使用的命令有幾個,如下所示。

列出所有定義的名稱空間:

在實時情況下,您將發現用於不同應用程式的名稱空間數量,要列出叢集中存在的所有名稱空間,您可以使用以下命令。

kubectl get namespaces

描述名稱空間:

使用以下命令檢視有關特定名稱空間的更多具體資訊。

kubectl describe namespace my-namespace

要檢視名稱空間中存在的資源數量:

您可以使用以下命令檢視特定名稱空間中存在的所有資源。

kubectl get pods --namespace=my-namespace

標記名稱空間:

您可以將標籤新增到現有的名稱空間,以便在建立資源時進一步提供幫助。

kubectl label namespaces <namespace> <labelKey>=<value>

設定請求的名稱空間

在 kubernetes 中設定名稱空間可以透過兩種方式完成,一種是命令式方式,另一種是宣告式方式,即使用 kubectl 的命令列並編寫 yaml 檔案。如以下命令和程式碼所示

命令式或者kubectl的命令列:

kubectl get pods --namespace=my-namespace

此命令將從指定的名稱空間中獲取 pod。

宣告方式或者yaml檔案:

apiVersion: v1
kind: Namespace
metadata:
 name: <NameSpaceName>
 lables:           # Labels are key value pairs(Metadata)
   <key>: <value>
   <key>  <value>

設定名稱空間首選項

設定名稱空間首選項將使AP I 與叢集互動的預設名稱空間成為可能。設定名稱空間首選項後,您可以在該特定名稱空間中部署資源,在該名稱空間中管理所有資源而不會造成任何混淆。名稱空間首選項通常在 Kubernetes API 伺服器上配置,可以設定為以下選項之一:

  1. 叢集範圍的預設名稱空間。
  2. 使用者的預設名稱空間。

要使用命令列工具 kubectl 設定名稱空間首選項,可以使用以下命令。這將是 my-namespace 作為預設名稱空間。

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

名稱空間和 DNS

名稱空間將隔離需要有限授權的服務,DNS 將以容器的形式公開您部署的應用程式,在某些情況下,DNS 和名稱空間將協同工作。Kubernetes 將使用以下命名約定將 DNS 分配給需要公開資源的名稱空間。

<service-name>.<namespace-name>.svc.cluster.local

<service-name>:表示與資源關聯的服務的名稱。;<namespace-name>:資源所在的名稱空間的名稱。

Kubernetes 名稱空間 Yaml

Kubernetes 名稱空間 yaml 檔案用於在 Kubernetes 中建立名稱空間,您可以在其中隔離將要部署在 Kubernetes 叢集中的資源。

apiVersion: v1

kind: Namespace

metadata:

name: <NameSpaceName>

lables: # Labels are key value pairs(Metadata)

<key>: <value>

<key> <value>

例子:

透過以下 yaml,名稱空間的名稱將為“test-ns”,鍵值對將為“ team: testing team”

apiVersion: v1
kind: Namespace
metadata:
  name: test-ns
  labels:
    team: testingteam

建立新的名稱空間

$ kubectl create namespace your-namespace

在名稱空間中建立元件:

要在名稱空間中建立元件,您可以提供 –namespace 標誌或在配置檔案中指定名稱空間。

方法 1:使用 –namespace 標誌

$ kubectl apply -f your_config.yaml --namespace=your-namespace

然後您可以使用kubectl get檢查名稱空間中的資源並使用-n指定名稱空間

在每個名稱空間中建立 Pod

您不需要使用 –namespace 標誌來指定名稱空間,而只需在配置檔案中初始指定名稱空間即可。

然後使用該命令。

$ kubectl apply -f your_config_file.yaml

使用 Kubernetes 名稱空間的好處

  1. 不同團隊的資源隔離:名稱空間將隔離將在 Kubernetes 叢集中使用的資源。Kubernetes 中的名稱空間對於安全性、效能或組織原因非常有用。可以為將在 Kubernetes 叢集上工作的不同團隊(例如開發團隊、測試團隊和其他團隊)建立名稱空間。
  2. RBAC:名稱空間可以透過使用基於角色的訪問控制來提高部署的資源的安全性。例如,如果使用 RABAC 將資源部署在 dev 名稱空間中,我們可以在 Kubernetes 中控制該 dev 名稱空間中開發人員團隊成員的許可權。
  3. 資源組織:在 Kubernetes 叢集中,以有組織的方式維護部署在叢集中的資源非常重要,這可以透過使用 Kubernetes 名稱空間來實現,您可以在其中跟蹤和管理已部署的資源。
  4. 提高效能:部署在 Kubernetes 叢集中的資源彼此隔離,這將有助於減輕 CPU 和記憶體等資源的負擔。

Kubernetes 名稱空間常見問題解答

1. Kubernetes 中的名稱空間是什麼?

Namespace是kubernetes叢集內部的一個虛擬叢集。

2. 名稱空間的作用是什麼?

Namespace會在邏輯上隔離kubernets叢集的物件。

相關文章