CentOS上Kubernetes資源分配的關鍵策略與實踐
在CentOS環境中部署Kubernetes(K8s)時,資源分配的核心目標是平衡資源利用率與業務穩定性,既要避免過度配置導致的成本浪費,又要防止資源不足引發的服務故障。以下是具體的資源分配框架與操作指南:
資源請求(requests
)和限制(limits
)是K8s資源分配的基石,直接影響Pod的調度與運行穩定性。
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "2"
memory: "2Gi"
requests
與limits
的關系,K8s自動劃分QoS等級,決定資源優先級:
requests == limits
):優先級最高,適用于支付、數據庫等核心服務,資源嚴格保障;requests < limits
):允許借用閑置資源,適用于Web服務、API接口等普通業務;requests/limits
):優先級最低,適用于日志處理、批處理等后臺任務,隨時可能被驅逐。在多租戶或混合業務場景下,需通過集群級機制控制資源分配,避免單個用戶/團隊占用過多資源。
rq-test
命名空間最多運行50個Pod、1核CPU、1Gi內存:apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
spec:
hard:
pods: "50"
requests.cpu: "1"
requests.memory: "1Gi"
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: "200Mi"
defaultRequest:
memory: "100Mi"
type: Container
通過自動伸縮機制,讓集群根據業務需求動態調整資源,兼顧性能與成本。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
requests
和limits
,適配長期運行的Pod資源需求變化(如數據分析任務)。需注意:VPA與HPA不建議同時作用于同一個Pod的CPU/內存資源。通過調度策略,將Pod分配到合適的節點,提高資源利用率與應用性能。
env=prod
),確保關鍵服務運行在高性能節點上;affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- prod
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: "kubernetes.io/hostname"
資源分配不是一次性工作,需通過監控持續調整,確保集群高效運行。
requests/limits
或Pod副本數;清理未使用的資源(如終止閑置的Pod、刪除無用的PVC)。通過以上策略,可在CentOS上構建一個高效、穩定的K8s集群,既能滿足業務的動態需求,又能最大化利用資源,降低運營成本。