Ubuntu上Kubernetes資源調度策略
Kubernetes的資源調度策略是其核心功能之一,旨在將Pod高效、合理地分配到Ubuntu節點(或其他操作系統節點)上,確保資源充分利用、應用性能穩定及集群可靠性。這些策略涵蓋資源需求定義、節點選擇規則、調度階段流程、高級優化機制等多個維度,以下是具體內容:
Pod通過resources.requests
(資源請求)和resources.limits
(資源限制)明確其對計算資源(CPU、內存)的需求,是調度的基礎。
LimitRange
為命名空間設置默認的requests/limits,避免用戶未指定導致的資源混亂。Kubernetes調度器采用“預選+優選”的兩階段模型,確保Pod被分配到合適的Ubuntu節點:
nodeSelector.zone=us-west-1
,則只有帶該標簽的Ubuntu節點會被保留);NotReady
狀態;Taint
(污點,需Pod有對應Toleration
容忍)。通過**親和性(Affinity)和反親和性(Anti-Affinity)**規則,優化Pod在Ubuntu節點上的分布,提升性能或可靠性:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux # 選擇Ubuntu節點(Ubuntu通常標記為linux)
支持requiredDuringScheduling
(必須滿足)和preferredDuringScheduling
(優先滿足)兩種模式。通過污點和容忍機制,控制哪些Pod可以調度到Ubuntu節點:
kubectl taint nodes node1 key=value:NoSchedule
),表示該節點“拒絕”調度無對應容忍的Pod。tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoSchedule"
),允許Pod調度到帶對應污點的節點。通過ResourceQuota限制命名空間內所有Pod的資源使用總量,防止某個團隊或應用過度占用Ubuntu節點資源。例如:
apiVersion: v1
kind: ResourceQuota
metadata:
name: ubuntu-quota
spec:
hard:
requests.cpu: "4" # 命名空間內所有Pod的CPU總requests不超過4核
requests.memory: "16Gi" # 內存總requests不超過16Gi
limits.cpu: "8" # CPU總limits不超過8核
limits.memory: "32Gi" # 內存總limits不超過32Gi
pods: "20" # Pod數量不超過20個
需配合LimitRange
使用,確保Pod的資源請求在合理范圍內。
通過Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler實現資源動態調整:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # 當CPU利用率超過50%時,擴容Pod
Scheduler
接口,并通過schedulerName
字段讓Pod使用該調度器。priorityClassName
(優先級類),高優先級Pod在資源不足時可以搶占低優先級Pod的資源(需開啟Preemption
特性),確保關鍵業務運行。