温馨提示×

centos k8s部署中资源如何分配

小樊
54
2025-09-18 02:39:28
栏目: 智能运维

CentOS上Kubernetes资源分配的关键策略与实践

在CentOS环境中部署Kubernetes(K8s)时,资源分配的核心目标是平衡资源利用率与业务稳定性,既要避免过度配置导致的成本浪费,又要防止资源不足引发的服务故障。以下是具体的资源分配框架与操作指南:

一、基础配置:Pod级别的资源请求与限制

资源请求(requests)和限制(limits)是K8s资源分配的基石,直接影响Pod的调度与运行稳定性。

  • 资源请求(Requests):定义Pod启动时所需的最小资源量,调度器会优先将Pod分配到满足请求的节点上。例如,一个Nginx Pod需要1核CPU和1Gi内存,可配置为:
    resources:
      requests:
        cpu: "1"
        memory: "1Gi"
    
  • 资源限制(Limits):定义Pod能使用的最大资源量,超过限制会触发系统干预(CPU限流、内存终止)。例如,限制Nginx Pod最多使用2核CPU和2Gi内存:
    limits:
      cpu: "2"
      memory: "2Gi"
    
  • QoS类别:根据requestslimits的关系,K8s自动划分QoS等级,决定资源优先级:
    • Guaranteedrequests == limits):优先级最高,适用于支付、数据库等核心服务,资源严格保障;
    • Burstablerequests < limits):允许借用闲置资源,适用于Web服务、API接口等普通业务;
    • BestEffort(未设置requests/limits):优先级最低,适用于日志处理、批处理等后台任务,随时可能被驱逐。

二、集群级管控:资源配额与限制范围

在多租户或混合业务场景下,需通过集群级机制控制资源分配,避免单个用户/团队占用过多资源。

  • 资源配额(ResourceQuotas):限制命名空间内的资源总量(如Pod数量、CPU、内存)。例如,限制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"
    
  • 限制范围(LimitRanges):为命名空间内的Pod/Container设置最小/最大资源边界,防止异常配置。例如,强制所有Container的内存请求不低于100Mi:
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-limit-range
    spec:
      limits:
      - default:
          memory: "200Mi"
        defaultRequest:
          memory: "100Mi"
        type: Container
    

三、弹性伸缩:动态适配业务负载

通过自动伸缩机制,让集群根据业务需求动态调整资源,兼顾性能与成本。

  • 水平Pod自动伸缩(HPA):根据CPU/内存利用率或自定义指标(如QPS)自动调整Pod副本数。例如,当Nginx的CPU利用率超过50%时,自动扩展副本数(1~10个):
    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
    
  • 垂直Pod自动伸缩(VPA):自动调整Pod的requestslimits,适配长期运行的Pod资源需求变化(如数据分析任务)。需注意:VPA与HPA不建议同时作用于同一个Pod的CPU/内存资源。

四、调度优化:精准分配节点资源

通过调度策略,将Pod分配到合适的节点,提高资源利用率与应用性能。

  • 节点亲和性与反亲和性
    • 亲和性(NodeAffinity):将Pod调度到带有特定标签的节点(如env=prod),确保关键服务运行在高性能节点上;
    • 反亲和性(PodAntiAffinity):避免将同一服务的多个Pod调度到同一节点,提高高可用性(如Redis主从副本分布在不同节点)。示例:
    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"
    
  • 资源拓扑感知调度:利用K8s的CPU Manager功能,根据节点NUMA拓扑结构分配CPU,减少CPU争用,提升关键应用的性能(如数据库)。

五、监控与持续优化

资源分配不是一次性工作,需通过监控持续调整,确保集群高效运行。

  • 监控工具:使用Prometheus采集集群资源使用数据(CPU、内存、磁盘I/O),通过Grafana可视化展示,设置告警规则(如CPU使用率超过80%时触发告警)。
  • 分析与调整:定期分析监控数据,识别资源瓶颈(如某Pod长期占用大量内存),调整requests/limits或Pod副本数;清理未使用的资源(如终止闲置的Pod、删除无用的PVC)。

通过以上策略,可在CentOS上构建一个高效、稳定的K8s集群,既能满足业务的动态需求,又能最大化利用资源,降低运营成本。

0