任務:在沒有調度程式的情況下手動調度 Pod
在此任務中,我們將探索如何透過直接將 pod 指派到叢集中的特定節點來繞過 Kubernetes 調度程式。對於需要 pod 在特定節點上運行而無需執行通常的調度過程的特定場景,這可能是一種有用的方法。
先決條件
我們假設您有一個正在運行的 Kubernetes 集群,該集群是使用類似於先前文章中描述的 KIND(Docker 中的 Kubernetes)配置創建的。在這裡,我們建立了一個名為 kind-cka-cluster 的叢集:
kind create cluster --name kind-cka-cluster --config config.yml
由於我們已經在先前的文章中介紹了使用 KIND 進行叢集創建,因此我們不會再次討論這些細節。
步驟 1:驗證叢集節點
要查看此新叢集中可用的節點,請執行:
kubectl get nodes
您應該會看到與此類似的輸出:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
對於此任務,我們將在 kind-cka-cluster-control-plane 上調度我們的 pod。
步驟 2:定義 Pod 清單 (node.yml)
現在,讓我們建立一個 YAML 格式的 pod 清單。使用 pod 配置中的 nodeName 字段,我們可以為 pod 指定確切的節點,完全繞過 Kubernetes 調度程式。
node.yml:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
在此清單中:
- 我們將 nodeName 設為 kind-cka-cluster-control-plane,這意味著調度程序將跳過分配節點,而該特定節點上的 Kubelet 將處理放置。
這種方法是一種直接選擇節點的方法,重寫了其他方法,例如nodeSelector或親和性規則。
根據 Kubernetes 文件:
更多詳細信息,請參閱 Kubernetes 節點分配文件。「nodeName是比affinity或nodeSelector更直接的節點選擇形式。nodeName是Pod規格中的一個欄位。如果nodeName欄位不為空,則排程器會忽略該Pod,而命名節點上的kubelet會嘗試放置該節點上的Pod 會否決使用nodeSelector 或親和性和反親和性規則。
第 3 步:應用 Pod 清單
準備好清單後,將其套用到叢集:
kubectl apply -f node.yml此指令建立 nginx pod 並直接指派給 kind-cka-cluster-control-plane 節點。
第 4 步:驗證 Pod 放置位置
最後,檢查 pod 是否在指定節點上運作:
kubectl get pods -o wide輸出應確認 nginx pod 確實在 kind-cka-cluster-control-plane 上運作:
kind create cluster --name kind-cka-cluster --config config.yml
這驗證了透過設定nodeName字段,我們成功繞過了Kubernetes調度程式並直接將我們的pod調度到控制平面節點上。
任務:登入控制平面節點,進入預設靜態 Pod 清單目錄,嘗試重新啟動控制平面元件。
要存取我們新建立的叢集的控制平面節點,請使用以下命令:
kubectl get nodes
導覽至包含靜態 pod 清單的目錄:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
驗證目前清單:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
要重新啟動 kube-controller-manager,請暫時移動其清單檔案:
kubectl apply -f node.yml
確認重啟後,將manifest檔恢復到原來的位置:
kubectl get pods -o wide
透過這些步驟,我們成功示範如何存取控制平面並操作靜態 pod 清單來管理控制平面組件的生命週期。
確認 kube-controller-manager 重啟
將 kube-controller-manager.yaml 清單檔案暫時移至 /tmp 後,我們可以驗證 kube-controller-manager 是否已重新啟動。正如之前的文章中提到的,我使用的是 k9s,它確實清楚地顯示了重啟,但是對於沒有 k9s 的讀者,請嘗試以下命令
檢查事件:
要收集更多信息,請使用:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none> </none></none>
在輸出末尾尋找事件。成功重啟將顯示類似以下內容的事件:
docker exec -it kind-cka-cluster-control-plane bash
出現「Killing」、「Created」和「Started」事件表明 kube-controller-manager 已停止並重新啟動成功。
清理
完成任務並確認 pod 的行為後,清理不再需要的所有資源非常重要。這有助於維護整潔的環境並釋放叢集中的資源。
列出 Pod:
首先,您可以檢查叢集中目前運行的 Pod:
cd /etc/kubernetes/manifests
您可能會看到以下輸出:
ls
描述 Pod:
要獲取有關特定 pod 的更多信息,請使用描述命令:
mv kube-controller-manager.yaml /tmp
這將為您提供有關 pod 的詳細信息,例如其名稱、命名空間、節點和其他配置:
mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/
刪除 Pod:
如果您發現不再需要該 pod,可以使用以下命令安全地將其刪除:
kubectl describe pod kube-controller-manager-kind-cka-cluster-control-plane -n kube-system
驗證刪除:
執行刪除指令後,您可以再次列出 pod 來驗證 pod 是否已被刪除:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Killing 4m12s (x2 over 8m32s) kubelet Stopping container kube-controller-manager Normal Pulled 3m6s (x2 over 7m36s) kubelet Container image "registry.k8s.io/kube-controller-manager:v1.31.0" already present on machine Normal Created 3m6s (x2 over 7m36s) kubelet Created container kube-controller-manager Normal Started 3m6s (x2 over 7m36s) kubelet Started container kube-controller-manager
確保 nginx pod 不再出現在清單中。
透過執行這些清理步驟,您可以協助確保 Kubernetes 叢集保持組織有序且有效率。
建立具有特定標籤的多個 Pod
在本節中,我們將基於 nginx 鏡像建立三個 pod,每個 pod 都有唯一的名稱和指示不同環境的特定標籤:env:test、env:dev 和 env:prod。
第 1 步:建立腳本
首先,我們將建立一個腳本,其中包含產生 pod 的命令。使用以下命令建立腳本檔案:
kind create cluster --name kind-cka-cluster --config config.yml
接下來,將以下程式碼貼到檔案中:
kubectl get nodes
第 2 步:使腳本可執行
儲存檔案後,使用以下指令使腳本可執行:
NAME STATUS ROLES AGE VERSION kind-cka-cluster-control-plane Ready control-plane 7m v1.31.0
第 3 步:執行腳本
運行腳本來建立 Pod:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kind-cka-cluster-control-plane
您應該看到指示 Pod 建立的輸出:
kubectl apply -f node.yml
第 4 步:驗證建立的 Pod
然後腳本將顯示建立的 Pod 的狀態:
kubectl get pods -o wide
此時,您可以根據 pod 的標籤來過濾它們。例如,要尋找帶有 env=dev 標籤的 pod,請使用下列指令:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 28s 10.244.0.5 kind-cka-cluster-control-plane <none> <none> </none></none>
您應該看到確認 pod 正在運行的輸出:
docker exec -it kind-cka-cluster-control-plane bash
標籤和提及
- @piyushsachdeva
- 第 13 天:影片教學
以上是CKA 全日課程 Kubernetes 中的靜態 Pod、手動排程、標籤和選擇器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

將矩陣電影特效帶入你的網頁!這是一個基於著名電影《黑客帝國》的酷炫jQuery插件。該插件模擬了電影中經典的綠色字符特效,只需選擇一張圖片,插件就會將其轉換為充滿數字字符的矩陣風格畫面。快來試試吧,非常有趣! 工作原理 插件將圖片加載到畫布上,讀取像素和顏色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地讀取圖片的矩形區域,並利用jQuery計算每個區域的平均顏色。然後,使用

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

數據集對於構建API模型和各種業務流程至關重要。這就是為什麼導入和導出CSV是經常需要的功能。在本教程中,您將學習如何在Angular中下載和導入CSV文件


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能