Kubernetes 叢集的版本一致性對於系統穩定性至關重要,kubectl 工具的版本需與叢集版本相符才能正常運作。檢查版本可以使用 kubectl version 命令,並搭配 --short 引數簡化輸出。節點管理方面,kubectl get nodes 可檢視節點狀態、角色和版本。cordon 和 uncordon 命令則分別用於將節點標記為不可排程和還原排程,方便進行維護作業。名稱空間的管理則使用 kubectl get namespaces、create 和 -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
圖表翻譯: 此圖表展示節點在不同狀態間的轉換流程:
- 節點初始狀態為 Ready 且可排程
- 使用 cordon 命令後進入不可排程狀態
- 可透過 uncordon 命令還原為可排程狀態
- 維護完成後節點還原正常運作
隨著 Kubernetes 技術的不斷進步,未來可能會出現更多高效的叢集管理功能,例如:
- 自動化節點管理
- 更完善的多叢集管理方案
- 增強的版本相容性檢查工具
這些發展將進一步簡化 Kubernetes 叢集的管理和維護工作。
Kubernetes 節點管理與名稱空間操作詳解
在 Kubernetes 叢集中,節點(Node)管理與名稱空間(Namespace)劃分是兩個至關重要的概念。本篇文章將探討如何在 Kubernetes 中進行節點管理,包括節點的標記、排空與維護,以及如何使用名稱空間來劃分和管理叢集資源。
節點管理
在 Kubernetes 中,節點是用於執行應用程式工作負載的機器。有效的節點管理對於確保叢集的高用性和可維護性至關重要。
檢查節點狀態
要檢查節點的狀態,可以使用 kubectl get nodes 命令,如下所示:
microk8s kubectl get nodes
內容解密:
microk8s kubectl get nodes:此命令用於取得叢集中所有節點的狀態。NAME:顯示節點的名稱。STATUS:顯示節點的當前狀態,如Ready或NotReady。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
內容解密:
apiVersion和kind:定義了資源的 API 版本和型別。metadata:包含了資源的後設資料,如名稱和標籤。spec:定義了資源的規格,如副本數量和容器映像。
使用 kubectl apply 命令可以建立或更新資源:
microk8s kubectl apply -f deployment.yaml
資源監控與除錯
Kubernetes 提供了多種工具和命令來監控和除錯資源。例如,可以使用 kubectl get 命令來取得資源的狀態:
microk8s kubectl get deployments
內容解密:
microk8s kubectl get deployments:此命令列出了當前名稱空間中的所有 Deployment。
此外,還可以使用 kubectl logs 和 kubectl 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[結束]
圖表翻譯:
此圖示展示了名稱空間劃分策略的流程。首先根據業務單元劃分名稱空間,然後根據環境進一步劃分,最後設定資源配額並監控和管理名稱空間中的資源,以確保叢集的穩定性和高效執行。