限制资源

limit-result
在 Kubernetes 中,资源限制是指你为 Pod 中的容器设置的 CPU 和内存的上下文边界。这些资源限制可以影响 Pod 的调度、资源分配和性能。以下是资源限制如何影响 Pod 调度的一些关键点:

调度决策

Kubernetes Scheduler 在决定将 Pod 调度到哪个节点时,会考虑节点上的资源情况以及 Pod 的资源需求和限制。资源需求是指 Pod 最小需要的资源量,而资源限制是指 Pod 最大允许使用的资源量。调度器将尝试将 Pod 调度到满足其资源需求和限制的节点上。

节点选择

当 Pod 具有资源限制时,调度器倾向于选择具有足够资源的节点。如果节点的可用资源无法满足 Pod 的资源需求和限制,Pod 可能会在该节点上等待,直到有足够的资源可用。

资源不足时的处理

如果资源限制导致节点上没有足够的资源来容纳 Pod,Pod 可能会被阻塞,直到有足够的资源可用。这可能会导致 Pod 的启动时间延长。

Out of Resource (OOM) 事件

如果 Pod 的容器超出了其内存限制,内核可能会触发 Out of Memory(OOM)事件,导致容器被终止。这可能会影响整个 Pod,因为 Pod 中的所有容器共享相同的网络和文件系统命名空间。

预留资源

为了确保节点上的系统和其他关键进程能够正常运行,建议为节点预留一定量的资源(例如,通过 kube-reserved 和 system-reserved 配置)。这样,即使节点上的 Pod 使用了大部分可用资源,系统和其他关键进程仍然有足够的空间。

Pod 的资源限制配置

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

在上述示例中,requests 定义了 Pod 的资源需求,而 limits 定义了资源限制。这些配置可帮助调度器在进行调度决策时选择合适的节点。

deployment 的资源限制配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
  • requests 定义了 Pod 的资源需求,即 Pod 的最小资源要求。在这个例子中,每个 Pod 至少需要 64Mi 内存和 250m CPU。
  • limits 定义了 Pod 的资源限制,即 Pod 最多可以使用的资源量。在这个例子中,每个 Pod 的内存限制为 128Mi,CPU 限制为 500m。 这样的资源限制配置允许 Kubernetes 调度器在选择节点并部署 Pod 时考虑资源的约束。请注意,资源限制的配置可以根据应用程序的需求进行调整。确保根据实际使用情况配置合适的资源限制,以确保集群的可靠性和性能。
Last Updated:
Contributors: jobcher