限制资源
在 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 时考虑资源的约束。请注意,资源限制的配置可以根据应用程序的需求进行调整。确保根据实际使用情况配置合适的资源限制,以确保集群的可靠性和性能。