k8s學習記錄(三):Pod基礎-Node選擇

一、前言

在上一篇文章中我們學習了Pod的一些基本的知識,今天我們將繼續學習Pod。

二、K8S如何選擇節點來運行Pod

我們知道在一個K8S集群中,會有多個工作節點(Worker Node),那么k8s會選擇那個node呢?接下來我們將學習一下k8s是如何選擇適合的node來運行我們所需要的Pod。

1、NodeName

首先我們可以通過指定Node名稱來讓k8s將pod調度到指定的Node,目前筆者的環境里有1個Master和2個Worker節點,如下圖。

1、不指定NodeName

首先我們先什么都不指定,讓k8s自動為我們調度,看看會將Pod分配到那個Node上。我們編寫一個yaml

apiVersion: v2
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80

執行命令

 kubectl apply -f nginx.yaml

(這里先不用考慮STATUS 為 ImagePullBackOff 這個是因為筆者的網絡出了點小問題,導致拉取鏡像失敗),可以看到我們的Nginx被k8s調度到了node3 節點,那如果我們想指定pod調度到node2節點呢,接下來我們繼續實驗。

2、指定NodeName

1、我們先刪除之前創建的pod,使用命令

 kubectl delete pod my-nginx

2、修改之前的yaml資源清單

apiVersion: v1
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80nodeName: node2

3、執行命令

 kubectl apply -f nginx.yaml

4、創建完成后我們查看Pod使用命令

kubectl get pods -o wide

可以看到nginx這個pod已經被調度到了node2節點。

3、小結

使用NodeName可以手動指定Pod調度到那個Node上,那么這種操作適用于什么場景呢?

- 部署基礎設施Pod,一些k8s的基礎設施需要在指定節點運行,例如監控代理或者日志收集器等,這些Pod的部署和調度必須穩定和可靠,不能被k8s自動調度,這種情況下我們可以指定Node
- 管理節點資源:例如我們要維護某個節點,此時我們可以將當前節點的pod部署到其他我們指定的節點上,從而避免k8s自動分配到當前Node

2、nodeSelector

除了使用NameNode我們還可以使用nodeSelector來指定調度的Node。我們下看下NodeSelector的介紹,使用命令

kubectl explain pod.spec.nodeSelector

可以看到nodeSelector是一個Map結構,官網文檔地址https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector nodeSelector用于將Pod調度到包含指定label(標簽)的Node上

實驗步驟:

1、給兩個node添加上標簽,給node1打上標簽 cpu=high (CPU為高性能),給node2打上標簽cpu=low(CPU為低性能)

 kubectl label nodes node2 cpu=hgihkubectl label nodes node3 cpu=low

2、查看一下這個標簽

kubectl get nodes -L cpu

3、刪除剛才的pod

 kubectl delete pod my-nginx

4、編寫yaml

apiVersion: v1
kind: Pod
metadata:name: my-nginxlabels:run: my-nginx
spec:containers:- name: my-nginximage: nginxports:- containerPort: 80nodeSelector:cpu: high

5、執行創建命令

我們預期該pod會被創建在node1上,因為我們這里匹配的標簽的是cpu high,我們直接運行命令看一下結果。

kubectl apply -f nginx.yaml

但是預期的現象并沒有發生,pod一直處于pending狀態,仔細看一下yaml和標簽,結果發現是單詞拼錯了。node標簽是 cpu=high 而我們清單上寫的high導致匹配不到node,此時會一直pending住。直到有能匹配上的node。所以現在有兩種方案,改資源清單或者改node上的標簽,我們選擇后者。

kubectl label nodes node2 cpu=high --overwrite=true

再次查看node上的標簽

接著查看pod

至此Pod已經完成了調度

三、總結

今天我們學習了如何手動控制K8S調度Pod,分別可以通過NodeName和NodeSelector來指定,前者通過名稱來指定Node而后者是通過標簽來指定。接下來的文章我們會繼續學習Pod其他知識希望對你有所幫助。

四、未完待續

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915426.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3天功能開發→3小時:通義靈碼2.0+DEEPSEEK實測報告,單元測試生成準確率92%的秘密

活動鏈接:https://developer.aliyun.com/topic/lingma-aideveloper?spma2c6h.29979852.J_9593490300.2.49b8110eeymlF8 前言 隨著人工智能技術的迅猛發展,AI 賦能編程成為了必然趨勢。通義靈碼應運而生,它是阿里巴巴集團在人工智能與編程領…

【小沐學GIS】基于Rust繪制三維數字地球Earth(Rust、OpenGL、GIS)

🍺三維數字地球GIS系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第二期3【小沐學GI…

ARM 學習筆記(三)

參考文獻:《ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition》《ARM Cortex-A (ARMv7-A) Series Programmer’s Guide》1、內存類型 ARMv7-A 處理器中,將 Memory 定義為幾種類型(Memory Type): Strong…

Flask 框架(一):核心特性與基礎配置

目錄 一、為什么選擇 Flask? 二、Flask 核心概念與初始化 2.1 程序實例初始化 2.2 運行配置:app.run () 參數詳解 2.3 應用配置:三種參數設置方式 1. 字典直接配置(簡單臨時場景) 2. 配置文件導入(生…

社交圈子系統開源社交源碼 / 小程序+H5+APP 多端互通的底層技術分析

伴隨社交產品向“圈子化”、“內容驅動”發展方向演進,打造一套支持小程序、H5、APP 互通的社交圈子系統,已經成為構建垂直社區的基礎架構能力要求。本文圍繞一套典型的多端社交興趣平臺(即友貓社區平臺)的設計實踐,對…

gitlab-runner配置問題記錄

引言 筆者曾通過2種方式部署過 gitlab-runner,在 gitlab 中使用這個 runner 拉起 ci job 的過程中或多或少遇到些問題,主要都是 job 中無法訪問宿主機的docker 等組件。本篇文檔主要記錄 gitlab-runner 安裝及相關配置。 二進制部署 gitlab-runner 部署 …

每日面試題10:令牌桶

令牌桶算法:優雅的流量控制藝術在現代分布式系統中,流量控制如同交通信號燈般重要——它既不能讓請求"堵死"系統,也不能放任流量"橫沖直撞"。令牌桶算法(Token Bucket Algorithm)正是這樣一種精妙…

【java】消息推送

文章目錄Java網頁消息推送解決方案 短輪詢、長輪詢、SSE、Websocket

STM32 | 有源蜂鳴器響,無源蜂鳴器播音樂

目錄 Overview 有源蜂鳴器 無源蜂鳴器 有源蜂鳴器控制 GPIO配置 控制程序 無源蜂鳴器控制 反轉GPIO控制 GPIO配置 控制接口 PWM控制 GPIO配置 控制函數 改變頻率播音樂 原理 1. 頻率決定音調 2. 占空比決定音量 GPIO初始化 結構體定義和音符頻率表 播放接口 …

第十四章 gin基礎

文章目錄Gin快速搭建一個web服務Gin數據交互JSON串內容規范Gin使用結構體返回數據給前端Gin配置POST類型的路由Gin獲取GET請求參數Gin獲取POST請求參數-form-data類型Gin獲取POST請求參數-JSON類型Gin獲取參數綁定至結構體Gin快速搭建一個web服務 下載包 \\新建一個文件&…

Baumer工業相機堡盟工業相機如何通過YoloV8的深度學習模型實現PCB的缺陷檢測(C#代碼,UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8的深度學習模型實現PCB的缺陷檢測(C#代碼,UI界面版)工業相機使用YoloV8模型實現PCB的缺陷檢測工業相機實現YoloV8模型實現PCB的缺陷檢測的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖…

【Vivado那些事兒】AMD-XILINX 7系列比特流加密

前提:加密有風險,操作需謹慎前言在許多項目中,經過漫長的等待,我們的 FPGA 設計終于可以投入現場部署了。前期的資金的投入及知識產權的保護,我們需要對現場部署的 FPGA 進行比特流保護以防止逆向工程和未經授權的重復…

RK3588 安卓adb操作

adb(Android Debug Bridge)是一個用于與安卓設備進行通信和控制的工具。adb可以通過USB或無線網絡連接安卓設備,執行各種命令,如安裝和卸載應用,傳輸文件,查看日志,運行shell命令等。adb是安卓開…

【華為機試】70. 爬樓梯

文章目錄70. 爬樓梯描述示例 1示例 2提示解題思路核心分析問題建模算法實現方法1:動態規劃(標準解法)方法2:空間優化動態規劃(最優解)方法3:遞歸 記憶化方法4:數學公式(…

山東大學軟件學院面向對象期末復習

面向對象 文章目錄面向對象04 類封裝接口 抽象類05 消息,實例化,靜態變量方法消息動/靜態類型語言對象創建類及實例具有下面特征對象數組的創建靜態數據成員構造函數06_0 繼承繼承是向下傳遞的JAVA為什么不支持多重繼承繼承的形式特殊化繼承替換原則規范…

讓 Windows 用上 macOS 的系統下載與保姆級使用教程

模擬蘋果桌面軟件下載:https://xpan.com.cn/s/8NFAGT 還記得 Windows 11剛發布時,很多人就說“果里果氣"的,但界面確實做的漂亮。 不知道現在有多少小伙伴正用著macOS,不過我敢確定,喜歡macOS的人絕對不少&#…

嵌入式硬件篇---繼電器

繼電器是一種通過小電流控制大電流的電磁開關,廣泛應用于自動化控制、電力系統和電子設備中。以下從工作原理、應用場景和電路特點三個方面詳細介紹:一、工作原理繼電器本質是電磁控制的機械式開關,核心部件包括:線圈(…

鴻蒙網絡編程系列58-倉頡版TLS數字證書查看及驗簽示例

1. TLS數字證書驗簽簡介 數字證書的簽名驗證是網絡編程中一個重要的功能,它保證了數字證書是由可信任的簽發方簽署的,在此基礎上,我們才可以信任該證書,進而信任基于該證書建立的安全通道,所以說,數字證書…

【React Native】安裝配置 Expo Router

過去開發React Native,所使用的路由都是React Navigation。但是這個東西使用起來非常困難,配置無比繁瑣。Expo,為了簡化操作,就基于React Navigation開發了Expo Router。 Expo Router用起來就要簡單的多了,配置也相對…

美國VPS服務器Linux內核參數調優的實踐與驗證

美國vps服務器Linux內核參數調優的實踐與驗證在云計算和虛擬化技術日益普及的今天,美國VPS服務器因其穩定的網絡環境和優越的性價比,成為眾多企業和開發者的首選。Linux內核參數的默認配置往往無法充分發揮VPS的性能潛力。本文將深入探討美國VPS服務器上…