K8S资源配置resources使用说明

147 阅读3分钟

Kubernetes 中的资源(Resource)配置是管理容器资源分配的核心机制,主要用于控制 CPU 和内存的使用。合理配置资源可以优化集群性能、避免资源争抢,并确保应用稳定性。以下是详细的介绍:


1. 资源类型

Kubernetes 支持两种核心资源类型:

  • CPU
    单位为毫核(millicores),例如 100m 表示 0.1 个 CPU 核心,1 表示 1 个完整的 CPU 核心。
  • 内存
    单位可以是字节(B)、千字节(Ki)、兆字节(Mi)、吉字节(Gi)等,例如 256Mi 表示 256 MiB。

2. 资源声明字段

在 Pod 的容器配置中,通过 resources 字段定义资源请求和限制:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: app-container
    image: nginx
    resources:
      requests:  # 资源请求(最低保障)
        cpu: "100m"
        memory: "128Mi"
      limits:    # 资源上限(不可超额使用)
        cpu: "200m"
        memory: "256Mi"

2.1 requests(资源请求)

  • 定义容器启动时所需的最小资源
  • Kubernetes 调度器根据 requests 选择满足条件的节点。
  • 若节点资源不足,Pod 会处于 Pending 状态。
  • 用途:确保容器有基本资源保障。

2.2 limits(资源限制)

  • 定义容器最大可用的资源
  • 超过 limits 的 CPU 会被限流(Throttled),内存超限则容器可能被终止(OOMKilled)。
  • 用途:防止单个容器耗尽节点资源。

3. 资源服务质量(QoS Classes)

根据资源配置,Kubernetes 为 Pod 分配不同的 QoS 等级,影响资源不足时的驱逐优先级:

QoS 等级条件驱逐优先级
Guaranteed所有容器的 requestslimits 相等(且显式设置 CPU 和内存)。最低
Burstable至少一个容器的 requests < limits(或仅设置 requests)。中等
BestEffort未设置任何 requestslimits最高

4. 资源配额(ResourceQuota)

在命名空间级别限制资源总量,防止资源滥用:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: dev
spec:
  hard:
    requests.cpu: "1"       # 所有 Pod 的 CPU 请求总和不超过 1 核
    requests.memory: 1Gi     # 内存请求总和不超过 1 GiB
    limits.cpu: "2"          # CPU 限制总和不超过 2 核
    limits.memory: 2Gi       # 内存限制总和不超过 2 GiB
    pods: "10"               # 命名空间最多 10 个 Pod

5. 限制范围(LimitRange)

为命名空间中的容器设置默认资源限制和合法范围:

apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
  namespace: dev
spec:
  limits:
  - type: Container
    default:         # 默认的 limits(若未显式设置)
      cpu: "100m"
      memory: "256Mi"
    defaultRequest:  # 默认的 requests(若未显式设置)
      cpu: "50m"
      memory: "128Mi"
    max:             # 最大值
      cpu: "500m"
      memory: "1Gi"
    min:             # 最小值
      cpu: "10m"
      memory: "64Mi"

6. 监控与调优

  • 查看资源使用情况
    kubectl top pods          # 查看 Pod 资源使用
    kubectl top nodes         # 查看节点资源使用
    
  • Horizontal Pod Autoscaler (HPA)
    根据 CPU/内存使用率自动扩缩 Pod 数量:
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: example-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: example-deployment
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    

7. 最佳实践

  1. 合理设置 requestslimits
    • requests 应接近容器的平均使用量。
    • limits 可根据峰值负载设置,但避免过高。
  2. 优先使用 Guaranteed QoS
    确保关键服务的稳定性。
  3. 监控资源使用
    使用 Prometheus + Grafana 或 Kubernetes Dashboard 持续观察。
  4. 避免内存超限
    内存无弹性,超限会导致容器重启。

通过合理配置资源,可以显著提高 Kubernetes 集群的稳定性和资源利用率。建议结合应用实际负载进行压测,逐步优化参数。