Kubernetes中资源管理
Kubernetes的资源管理是一个多层次、由声明式配置驱动的体系,核心目标是在多租户的集群环境中,高效、公平、稳定地分配和隔离计算资源(如CPU、内存)。
默认情况下, Kubernetes 集群上的容器运行使用的计算资源没有限制,因此在使用Kubernetes集群中的容器时,管理员需要考虑如何分配计算资源。
使用 Kubernetes 资源配额, 管理员(也称为集群操作者)可以在一个指定的命名空间内限制集群资源的使用与创建。 在命名空间中,一个 Pod 最多能够使用命名空间的资源配额所定义的 CPU 和内存用量。 作为集群操作者或命名空间级的管理员,你可能也会担心如何确保一个 Pod 不会垄断命名空间内所有可用的资源。
LimitRange 是限制命名空间内可为每个适用的对象类别 (例如 Pod 或 PersistentVolumeClaim) 指定的资源分配量(限制和请求)的策略对象。
在 Kuberentes 中对资源的管理
K8s层面
- LimitRange 管理多个不同对象类别的资源分配约束。
- ResourceQuota 限制名字空间的资源消耗。
机器层面
- CPU
- 内存
📦 容器与Pod层:资源请求与限制 这是资源管理的基础。你需要在Pod的容器规范中明确声明资源需求。
资源请求(requests):容器保证能获得的最小资源量。调度器使用此值决定将Pod放在哪个有足够空闲资源的节点上。
资源限制(limits):容器允许使用的最大资源量。超过内存限制的容器可能被终止重启;超过CPU限制则会被限制使用,但通常不会被终止。
- 默认情况下,Kubernetes会为每个Pod分配1MiB的CPU资源,即1m CPU。
- 默认情况下,Kubernetes会为每个Pod分配64MiB的内存资源。
- Node 中的资源状态查看,describe node的3个维度
- Pod 中资源使用情况查看,request
资源使用配置
resources:
limits:
cpu: "2"
memory: 4000Mi
requests:
cpu: "1"
memory: 2000Mi
ubectl describe node local-node
......(省略)
Capacity:
cpu: 4
ephemeral-storage: 61614020Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8139660Ki
pods: 110
Allocatable:
cpu: 4
ephemeral-storage: 59938118609
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8139660Ki
pods: 110
System Info:
Machine ID:
System UUID: 000c67e7-bee6-0000-000b-db2600a4e0de
Boot ID: 421c59ed-2c11-4757-a43b-1835f1ba87f3
Kernel Version: 6.8.0-55-generic
OS Image: SUSE Linux Enterprise Server 15 SP7
Operating System: linux
Architecture: amd64
Container Runtime Version: containerd://2.0.5-k3s1
Kubelet Version: v1.33.1+k3s1
Kube-Proxy Version:
PodCIDR: 10.42.0.0/24
PodCIDRs: 10.42.0.0/24
ProviderID: k3s://local-node
Non-terminated Pods: (10 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
cattle-fleet-local-system fleet-agent-cc99dcf58-s9wz2 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-fleet-system fleet-controller-65bb448f69-87nst 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-fleet-system gitjob-568578f896-wvgqx 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-fleet-system helmops-645d5cb775-gq8kq 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-provisioning-capi-system capi-controller-manager-5b679bbdbd-lr5cn 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-system api-extension-5fcff647d5-g68vm 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-system dashboard-shell-zqhkx 0 (0%) 0 (0%) 0 (0%) 0 (0%) 21s
cattle-system rancher-webhook-8fb8d9545-h5mjg 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
cattle-system system-upgrade-controller-794fb55fc8-prjmb 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13d
kube-system coredns-697968c856-qrx6z 100m (2%) 0 (0%) 70Mi (0%) 170Mi (2%) 13d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 100m (2%) 0 (0%)
memory 70Mi (0%) 170Mi (2%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>