一文搞懂K8S中的NodeSelector
NodeSelector是什么?
NodeSelector 是 Kubernetes 中的一個概念,它允許用戶通過標簽選擇器(label selectors)來指定 Pod 應該被調度到哪些節(jié)點上運行。這一機制為Pod的調度提供了靈活性,使得用戶可以根據(jù)節(jié)點的標簽屬性來控制Pod的分布。
為什么使用NodeSelector?
- 通過NodeSelector,我們可以指定固定節(jié)點運行服務
- 解決PV ReadWriteOnce情況下,不影響項目運行情況下,實現(xiàn)節(jié)點調度
怎么用NodeSelector?
- 在使用NodeSelector之前,首先需要在目標節(jié)點上設置標簽。標簽是鍵值對,用于描述節(jié)點的特征
- 在Pod的定義文件(YAML或JSON)中,可以通過.spec.nodeSelector字段來設置NodeSelector。
- Pod將會被調度到至少有一個標簽滿足NodeSelector中所有指定條件的節(jié)點上。
POD配置示例
apiVersion: v1 kind: Pod metadata: name: my-pod spec: nodeSelector: kubernetes.io/hostname: uat-xxxxx # 關鍵代碼 containers: - name: my-container image: my-image
yaml配置示例
yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: nodeSelector: # 節(jié)點選擇器 kubernetes.io/hostname: uat-xxxxx # 關鍵代碼 containers: - name: my-container image: my-image
如何知道K8S上面有哪些節(jié)點,每個節(jié)點都有什么信息呢?
1. 使用kubectl命令行工具查看所有節(jié)點及其標簽
使用以下命令可以列出集群中所有節(jié)點的信息,并顯示它們的標簽:
kubectl get nodes --show-labels
這條命令會返回一個表格,列出每個節(jié)點的名稱、狀態(tài)以及它們所攜帶的所有標簽。
2. 使用kubectl命令行工具查看特定節(jié)點的標簽
kubectl describe node NODE_NAME
代碼舉例
假設你想要查看名為k8s-node-1的節(jié)點標簽,可以執(zhí)行:
kubectl describe node k8s-node-1
常見的NodeSelector節(jié)點標簽有哪些?
區(qū)域和可用區(qū)標簽:
- failure-domain.beta.kubernetes.io/zone: 表示節(jié)點所在的可用區(qū)(AZ),用于實現(xiàn)高可用性和容災策略。
- topology.kubernetes.io/zone: (推薦的新標簽,逐步替代上面的beta標簽)同樣表示節(jié)點的可用區(qū)信息。
地區(qū)標簽:
- failure-domain.beta.kubernetes.io/region: 表示節(jié)點所屬的地理區(qū)域,用于跨區(qū)域的高可用部署。
- topology.kubernetes.io/region: (推薦的新標簽)表示節(jié)點的地理區(qū)域信息。
硬件和能力標簽:
- beta.kubernetes.io/instance-type: 指示節(jié)點上實例的類型,如云提供商的實例規(guī)格。
- kubernetes.io/hostname: 節(jié)點的主機名,每個節(jié)點都會自動添加此標簽。
- node-role.kubernetes.io/: 表示節(jié)點的角色,如控制平面節(jié)點(control-plane)、worker節(jié)點等,其中 可以是具體角色名稱。
硬件類型:
- beta.kubernetes.io/instance-type: 實例類型,如m5.large,適用于云提供商。
特性標簽:
- kubernetes.io/os: 表示節(jié)點的操作系統(tǒng)類型,如 linux。
- kubernetes.io/arch: 表示節(jié)點的CPU架構,如 amd64、arm64。
- node.kubernetes.io/lifecycle: 表示節(jié)點的生命周期狀態(tài),如 shutdown,但這個標簽并不常用。
自定義標簽:
- 用戶可以根據(jù)需要自定義標簽,如 disktype: ssd 或 gpu: true,來標識節(jié)點是否具備SSD硬盤或GPU等特定硬件。
其他常見問題
與親和性與反親和性區(qū)別是什么呢?
- NodeSelector 提供了基本的調度控制
- 節(jié)點親和性(nodeAffinity)和反親和性(nodeAntiAffinity)是更高級的調度規(guī)則,它們不僅支持基于標簽的選擇,還支持更復雜的邏輯表達,比如集合操作、硬軟限制等,提供了更細粒度的控制。
到此這篇關于一文搞懂K8S中的NodeSelector的文章就介紹到這了,更多相關K8S NodeSelector內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
玩客云內置EMMC存儲刷入Armbian系統(tǒng)(圖文詳解)
Armbian是其他項目可以信賴的單板計算機(SBC)的基本操作系統(tǒng)平臺,接下來通過本文給大家介紹玩客云內置EMMC存儲刷入Armbian系統(tǒng),需要的朋友可以參考下2022-05-05