一文搞懂K8S中的NodeSelector
NodeSelector是什么?
NodeSelector 是 Kubernetes 中的一個(gè)概念,它允許用戶通過標(biāo)簽選擇器(label selectors)來指定 Pod 應(yīng)該被調(diào)度到哪些節(jié)點(diǎn)上運(yùn)行。這一機(jī)制為Pod的調(diào)度提供了靈活性,使得用戶可以根據(jù)節(jié)點(diǎn)的標(biāo)簽屬性來控制Pod的分布。
為什么使用NodeSelector?
- 通過NodeSelector,我們可以指定固定節(jié)點(diǎn)運(yùn)行服務(wù)
- 解決PV ReadWriteOnce情況下,不影響項(xiàng)目運(yùn)行情況下,實(shí)現(xiàn)節(jié)點(diǎn)調(diào)度
怎么用NodeSelector?
- 在使用NodeSelector之前,首先需要在目標(biāo)節(jié)點(diǎn)上設(shè)置標(biāo)簽。標(biāo)簽是鍵值對(duì),用于描述節(jié)點(diǎn)的特征
- 在Pod的定義文件(YAML或JSON)中,可以通過.spec.nodeSelector字段來設(shè)置NodeSelector。
- Pod將會(huì)被調(diào)度到至少有一個(gè)標(biāo)簽滿足NodeSelector中所有指定條件的節(jié)點(diǎn)上。
POD配置示例
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
nodeSelector:
kubernetes.io/hostname: uat-xxxxx # 關(guān)鍵代碼
containers:
- name: my-container
image: my-imageyaml配置示例
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é)點(diǎn)選擇器
kubernetes.io/hostname: uat-xxxxx # 關(guān)鍵代碼
containers:
- name: my-container
image: my-image如何知道K8S上面有哪些節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都有什么信息呢?
1. 使用kubectl命令行工具查看所有節(jié)點(diǎn)及其標(biāo)簽
使用以下命令可以列出集群中所有節(jié)點(diǎn)的信息,并顯示它們的標(biāo)簽:
kubectl get nodes --show-labels
這條命令會(huì)返回一個(gè)表格,列出每個(gè)節(jié)點(diǎn)的名稱、狀態(tài)以及它們所攜帶的所有標(biāo)簽。
2. 使用kubectl命令行工具查看特定節(jié)點(diǎn)的標(biāo)簽
kubectl describe node NODE_NAME
代碼舉例
假設(shè)你想要查看名為k8s-node-1的節(jié)點(diǎn)標(biāo)簽,可以執(zhí)行:
kubectl describe node k8s-node-1
常見的NodeSelector節(jié)點(diǎn)標(biāo)簽有哪些?
區(qū)域和可用區(qū)標(biāo)簽:
- failure-domain.beta.kubernetes.io/zone: 表示節(jié)點(diǎn)所在的可用區(qū)(AZ),用于實(shí)現(xiàn)高可用性和容災(zāi)策略。
- topology.kubernetes.io/zone: (推薦的新標(biāo)簽,逐步替代上面的beta標(biāo)簽)同樣表示節(jié)點(diǎn)的可用區(qū)信息。
地區(qū)標(biāo)簽:
- failure-domain.beta.kubernetes.io/region: 表示節(jié)點(diǎn)所屬的地理區(qū)域,用于跨區(qū)域的高可用部署。
- topology.kubernetes.io/region: (推薦的新標(biāo)簽)表示節(jié)點(diǎn)的地理區(qū)域信息。
硬件和能力標(biāo)簽:
- beta.kubernetes.io/instance-type: 指示節(jié)點(diǎn)上實(shí)例的類型,如云提供商的實(shí)例規(guī)格。
- kubernetes.io/hostname: 節(jié)點(diǎn)的主機(jī)名,每個(gè)節(jié)點(diǎn)都會(huì)自動(dòng)添加此標(biāo)簽。
- node-role.kubernetes.io/: 表示節(jié)點(diǎn)的角色,如控制平面節(jié)點(diǎn)(control-plane)、worker節(jié)點(diǎn)等,其中 可以是具體角色名稱。
硬件類型:
- beta.kubernetes.io/instance-type: 實(shí)例類型,如m5.large,適用于云提供商。
特性標(biāo)簽:
- kubernetes.io/os: 表示節(jié)點(diǎn)的操作系統(tǒng)類型,如 linux。
- kubernetes.io/arch: 表示節(jié)點(diǎn)的CPU架構(gòu),如 amd64、arm64。
- node.kubernetes.io/lifecycle: 表示節(jié)點(diǎn)的生命周期狀態(tài),如 shutdown,但這個(gè)標(biāo)簽并不常用。
自定義標(biāo)簽:
- 用戶可以根據(jù)需要自定義標(biāo)簽,如 disktype: ssd 或 gpu: true,來標(biāo)識(shí)節(jié)點(diǎn)是否具備SSD硬盤或GPU等特定硬件。
其他常見問題
與親和性與反親和性區(qū)別是什么呢?
- NodeSelector 提供了基本的調(diào)度控制
- 節(jié)點(diǎn)親和性(nodeAffinity)和反親和性(nodeAntiAffinity)是更高級(jí)的調(diào)度規(guī)則,它們不僅支持基于標(biāo)簽的選擇,還支持更復(fù)雜的邏輯表達(dá),比如集合操作、硬軟限制等,提供了更細(xì)粒度的控制。
到此這篇關(guān)于一文搞懂K8S中的NodeSelector的文章就介紹到這了,更多相關(guān)K8S NodeSelector內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
KubeSphere中部署Wiki系統(tǒng)wiki.js并啟用中文全文檢索
這篇文章主要為大家介紹了KubeSphere中部署Wiki系統(tǒng)wiki.js并啟用中文全文檢索實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
k8s編排之StatefulSet知識(shí)點(diǎn)詳解一
這篇文章主要為大家介紹了k8s編排之StatefulSet知識(shí)點(diǎn)的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解
這篇文章主要為大家介紹了Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
使用k8tz解決pod內(nèi)的時(shí)區(qū)問題(坑的解決)
時(shí)區(qū)的不一致,會(huì)帶來很多困擾。即使代碼與時(shí)區(qū)無關(guān),但容器日志與系統(tǒng)日志時(shí)間相關(guān)聯(lián)排查問題也會(huì)讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時(shí)區(qū)問題,需要的朋友可以參考下2022-10-10

