Kubernetes 叢集的版本一致性對於系統穩定性至關重要,kubectl 工具的版本需與叢集版本相符才能正常運作。檢查版本可以使用 kubectl version 命令,並搭配 --short 引數簡化輸出。節點管理方面,kubectl get nodes 可檢視節點狀態、角色和版本。cordonuncordon 命令則分別用於將節點標記為不可排程和還原排程,方便進行維護作業。名稱空間的管理則使用 kubectl get namespacescreate-n 引數進行檢視、建立和指定操作。

Kubernetes 版本管理與節點控制詳解

在 Kubernetes 叢集中,Cluster API 版本與 API Client Utility(kubectl)版本的管理至關重要。兩者的版本必須相符或接近,才能順利取得版本資訊。

檢查 Kubernetes 版本

使用 kubectl version 命令可以檢視 Kubernetes 的版本資訊。以下為詳細輸出範例:

microk8s kubectl version

輸出結果包含客戶端與伺服器端的詳細版本資訊:

Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4"}
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4"}

內容解密:

此輸出顯示客戶端與伺服器端的版本均為 v1.27.4。主要欄位說明如下:

  • Major:主要版本號,表示重大的架構變更
  • Minor:次要版本號,表示功能的增加或改進
  • GitVersion:完整的版本資訊,通常用於識別特定的建置版本
  • GitCommit:Git 提交的雜湊值,用於追蹤版本控制的變更
  • BuildDate:建置日期,顯示該版本的編譯時間
  • GoVersion:使用的 Go 語言版本
  • Platform:執行的平台資訊(例如 linux/amd64)

簡化版本資訊顯示

若只需簡略版本資訊,可使用 --short 選項:

microk8s kubectl version --short

輸出範例:

Client Version: v1.27.4
Server Version: v1.27.4

內容解密:

使用 --short 選項後,輸出僅顯示主要版本資訊,便於快速確認客戶端與伺服器端的版本是否一致。

版本相容性考量

一般而言,客戶端版本與伺服器端版本應保持在一到兩個次要版本之內,以確保相容性。在本例中,由於客戶端與伺服器端版本完全一致(v1.27.4),因此無相容性問題。

節點管理

Kubernetes 叢集由控制平面(control plane)和工作節點(nodes)組成。本文將探討節點的管理。

檢視節點資訊

使用 kubectl get nodes 命令可檢視節點資訊:

microk8s kubectl get nodes

輸出範例:

NAME   STATUS   ROLES   AGE   VERSION
wks01  Ready    <none>  43m   v1.27.4

欄位說明:

  • NAME:節點名稱,通常與主機名稱相同
  • STATUS:節點狀態,Ready 表示可接受工作負載
  • ROLES:節點角色,本例中未定義特定角色
  • AGE:節點加入叢集的時間長度
  • VERSION:節點執行的 Kubernetes 版本

節點維護:Cordon 與 Uncordon

將節點標記為不可排程(Cordon)

可使用 cordon 命令將節點標記為不可排程,以進行維護:

microk8s kubectl cordon wks01

輸出範例:

node/wks01 cordoned

再次檢視節點狀態:

microk8s kubectl get nodes

輸出結果:

NAME   STATUS                     ROLES   AGE   VERSION
wks01  Ready,SchedulingDisabled   <none>  44m   v1.27.4

內容解密:

節點狀態變更為 Ready,SchedulingDisabled,表示該節點仍在執行現有工作負載,但不再接受新的 Pod 排程。

測試 Pod 建立

嘗試在該節點上建立新的 Pod:

microk8s kubectl run mynginx02 --image=local/mynginx:01
microk8s kubectl get pods

輸出範例:

NAME        READY   STATUS    RESTARTS   AGE
mynginx02   0/1     Pending   0          6s

內容解密:

由於節點已被標記為不可排程,新建立的 Pod 處於 Pending 狀態,無法被排程到任何節點上。

將節點還原為可排程(Uncordon)

完成維護後,可使用 uncordon 命令將節點還原為可排程狀態:

microk8s kubectl uncordon wks01

輸出範例:

node/wks01 uncordoned

內容解密:

節點還原正常排程功能後,之前處於 Pending 狀態的 Pod 將被重新排程至該節點。

節點狀態轉換流程

  graph LR
    A[節點初始狀態] -->|Ready| B[可排程]
    B -->|cordon| C[不可排程]
    C -->|uncordon| B
    C -->|維護完成| B

圖表翻譯: 此圖表展示節點在不同狀態間的轉換流程:

  1. 節點初始狀態為 Ready 且可排程
  2. 使用 cordon 命令後進入不可排程狀態
  3. 可透過 uncordon 命令還原為可排程狀態
  4. 維護完成後節點還原正常運作

隨著 Kubernetes 技術的不斷進步,未來可能會出現更多高效的叢集管理功能,例如:

  • 自動化節點管理
  • 更完善的多叢集管理方案
  • 增強的版本相容性檢查工具

這些發展將進一步簡化 Kubernetes 叢集的管理和維護工作。

Kubernetes 節點管理與名稱空間操作詳解

在 Kubernetes 叢集中,節點(Node)管理與名稱空間(Namespace)劃分是兩個至關重要的概念。本篇文章將探討如何在 Kubernetes 中進行節點管理,包括節點的標記、排空與維護,以及如何使用名稱空間來劃分和管理叢集資源。

節點管理

在 Kubernetes 中,節點是用於執行應用程式工作負載的機器。有效的節點管理對於確保叢集的高用性和可維護性至關重要。

檢查節點狀態

要檢查節點的狀態,可以使用 kubectl get nodes 命令,如下所示:

microk8s kubectl get nodes

內容解密:

  • microk8s kubectl get nodes:此命令用於取得叢集中所有節點的狀態。
  • NAME:顯示節點的名稱。
  • STATUS:顯示節點的當前狀態,如 ReadyNotReady
  • ROLES:顯示節點的角色,通常用於區分工作節點和控制平面節點。
  • AGE:顯示節點加入叢集的時間。
  • VERSION:顯示節點上執行的 Kubernetes 版本。

範例如下:

NAME     STATUS   ROLES    AGE   VERSION
wks01    Ready    <none>   47m   v1.27.4

標記節點為不可排程

當需要對節點進行維護時,首先需要將節點標記為不可排程,以防止新的 Pod 被排程到該節點上。可以使用 kubectl cordon 命令實作:

microk8s kubectl cordon wks01

內容解密:

  • microk8s kubectl cordon wks01:此命令將節點 wks01 標記為不可排程,防止新的 Pod 被排程到該節點。

排空節點

排空節點涉及將正在執行的 Pod 遷移到其他節點,以進行維護或升級。使用 kubectl drain 命令可以實作:

microk8s kubectl drain wks01

內容解密:

  • microk8s kubectl drain wks01:此命令嘗試將 wks01 節點上的所有 Pod 驅逐到其他節點。
  • 如果叢集中只有一個節點,則無法成功排空,因為沒有其他節點可以接收這些 Pod。

範例如下:

node/wks01 cordoned
error: unable to drain node "wks01" due to error:[cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-dn5pc, cannot delete Pods declare no controller (use --force to override): default/mynginx02], continuing command...

將節點還原為可排程狀態

維護完成後,可以使用 kubectl uncordon 命令將節點還原為可排程狀態:

microk8s kubectl uncordon wks01

內容解密:

  • microk8s kubectl uncordon wks01:此命令將 wks01 節點還原為可排程狀態,使其能夠再次接收新的 Pod。

名稱空間管理

名稱空間是用於在 Kubernetes 叢集中劃分資源和物件的邏輯隔離機制。

檢視現有名稱空間

要檢視叢集中的現有名稱空間,可以使用以下命令:

microk8s kubectl get namespaces

內容解密:

  • microk8s kubectl get namespaces:此命令列出叢集中的所有名稱空間。
  • NAME:顯示名稱空間的名稱。
  • STATUS:顯示名稱空間的狀態,通常為 Active
  • AGE:顯示名稱空間的存活時間。

範例如下:

NAME              STATUS   AGE
kube-system       Active   87d
kube-public       Active   87d
kube-node-lease   Active   87d
default           Active   87d

建立新的名稱空間

可以根據業務需求建立新的名稱空間,例如為不同的業務單元(BU)建立獨立的名稱空間。

microk8s kubectl create namespace bu01
microk8s kubectl create namespace bu02
microk8s kubectl create namespace bu03

內容解密:

  • microk8s kubectl create namespace <namespace-name>:此命令用於建立一個新的名稱空間。

檢視特定名稱空間中的資源

要檢視特定名稱空間中的資源,可以使用 -n--namespace 選項:

microk8s kubectl get deployments -n default

內容解密:

  • microk8s kubectl get deployments -n default:此命令列出 default 名稱空間中的所有佈署。

隨著 Kubernetes 的不斷發展,未來將有更多新功能和改進出現。掌握 Kubernetes 的基礎和進階功能,將使您能夠更好地應對日益複雜的應用佈署和管理挑戰。

參考資料

Kubernetes 節點管理流程

  graph LR
    C[C]
    A[開始] --> B[檢查節點狀態]
    B --> C{節點狀態是否為Ready?}
    C -->|是| D[執行節點維護]
    C -->|否| E[標記節點為不可排程]
    E --> F[排空節點]
    F --> G[執行維護操作]
    G --> H[將節點還原為可排程狀態]
    D --> H
    H --> I[結束]

圖表翻譯:

此圖示展示了 Kubernetes 節點管理的流程。首先檢查節點狀態,如果節點狀態為 Ready,則直接進行維護操作;如果不是,則先將節點標記為不可排程,然後排空節點並執行維護操作,最後將節點還原為可排程狀態。整個流程確保了節點維護的順利進行和叢集的穩定執行。

Kubernetes 資源管理與名稱空間劃分策略詳解

在前面的章節中,我們探討了 Kubernetes 中的節點管理,包括節點的標記、排空與維護等操作。同時,我們也介紹瞭如何使用名稱空間來劃分和管理叢集資源。本章節將進一步探討 Kubernetes 中的資源管理和名稱空間劃分策略,幫助讀者更好地理解和應用這些概念。

資源管理

Kubernetes 中的資源管理是指對叢集中的各種資源(如 Pod、Deployment、Service 等)進行建立、更新、刪除和監控的過程。有效的資源管理對於確保叢集的穩定性和高效執行至關重要。

資源建立與管理

在 Kubernetes 中,可以使用 YAML 或 JSON 檔案來定義資源。以下是一個簡單的 Deployment YAML 檔案範例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mydeployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: mycontainer
        image: nginx:latest
        ports:
        - containerPort: 80

內容解密:

  • apiVersionkind:定義了資源的 API 版本和型別。
  • metadata:包含了資源的後設資料,如名稱和標籤。
  • spec:定義了資源的規格,如副本數量和容器映像。

使用 kubectl apply 命令可以建立或更新資源:

microk8s kubectl apply -f deployment.yaml

資源監控與除錯

Kubernetes 提供了多種工具和命令來監控和除錯資源。例如,可以使用 kubectl get 命令來取得資源的狀態:

microk8s kubectl get deployments

內容解密:

  • microk8s kubectl get deployments:此命令列出了當前名稱空間中的所有 Deployment。

此外,還可以使用 kubectl logskubectl exec 命令來檢視容器日誌和進入容器內部進行除錯:

microk8s kubectl logs <pod-name>
microk8s kubectl exec -it <pod-name> -- /bin/bash

名稱空間劃分策略

名稱空間是 Kubernetes 中用於隔離資源的重要機制。合理的名稱空間劃分策略可以提高叢集的管理效率和安全性。

根據業務單元劃分

可以根據不同的業務單元(BU)來劃分名稱空間,每個 BU 擁有獨立的名稱空間,以便於管理和隔離資源:

microk8s kubectl create namespace bu01
microk8s kubectl create namespace bu02

根據環境劃分

也可以根據不同的環境(如開發、測試、生產)來劃分名稱空間,以便於管理和隔離不同環境中的資源:

microk8s kubectl create namespace dev
microk8s kubectl create namespace test
microk8s kubectl create namespace prod

資源配額管理

為了防止某個名稱空間中的資源過度使用叢集資源,可以為名稱空間設定資源配額(ResourceQuota):

apiVersion: v1
kind: ResourceQuota
metadata:
  name: resourcequota
  namespace: bu01
spec:
  hard:
    cpu: "2"
    memory: 4Gi

內容解密:

  • spec.hard:定義了名稱空間中允許的最大資源使用量。

名稱空間劃分策略

  graph LR
    A[開始] --> B[根據業務單元劃分名稱空間]
    B --> C[根據環境劃分名稱空間]
    C --> D[設定資源配額]
    D --> E[監控和管理名稱空間資源]
    E --> F[結束]

圖表翻譯:

此圖示展示了名稱空間劃分策略的流程。首先根據業務單元劃分名稱空間,然後根據環境進一步劃分,最後設定資源配額並監控和管理名稱空間中的資源,以確保叢集的穩定性和高效執行。