文章目录
所有操作均在 killercoda 环境上完成
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane 7d9h v1.31.0
node01 Ready <none> 7d9h v1.31.0
$ kubectl version
Client Version: v1.31.0
Kustomize Version: v5.4.2
Server Version: v1.31.0
参考
kubernetes QOS
kubernetes resources manage
资源限制 (Resource Limits)
Kubernetes 通过资源请求(Requests)和限制(Limits)来管理 Pod 的资源使用
- 请求(Requests):定义 Pod 需要的最小资源量,用于调度决策。如果节点上的可用资源不能满足请求,Pod 将不会被调度到该节点。
- 限制(Limits):定义 Pod 可以使用的最大资源量。如果 Pod 试图使用超过限制的资源,Kubernetes 会采取行动(例如,限制 CPU 使用或 OOMKilled)。
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
单位
CPU
CPU 资源的单位是核(cores)。
表示方法
整数或小数:例如,0.5 表示半个 CPU 核,1 表示一个 CPU 核。
毫核(millicpu 或 m):例如,100m 表示 0.1 个 CPU 核,500m 表示 0.5 个 CPU 核。
示例
- requests.cpu: 100m 表示请求 0.1 个 CPU 核。
- requests.cpu: 2 表示请求 2 个 CPU 核。
内存
内存资源的单位是字节(bytes)。
表示方法
- E 或 Ei:Exbibytes
- P 或 Pi:Pebibytes
- T 或 Ti:Tebibytes
- G 或 Gi:Gibibytes
- M 或 Mi:Mebibytes
- K 或 Ki:Kibibytes
示例
- requests.memory: 64Mi 表示请求 64 兆比字节(64 * 2^20 字节)。
- requests.memory: 512Mi 表示请求 512 兆比字节。
- requests.memory: 2Gi 表示请求 2 吉比字节(2 * 2^30 字节)。
总结
- CPU:使用 CPU 核或毫核(m)表示,例如 100m 或 2。
- 内存:使用字节表示,并可以使用后缀 E, P, T, G, M, K 及其二进制版本 Ei, Pi, Ti, Gi, Mi, Ki,例如 64Mi 或 2Gi。
仅有限制没有请求
CPU
如果只有 limits.cpu 而没有 requests.cpu,Kubernetes 会将 requests.cpu 自动设置为 limits.cpu 的值。这意味着 Pod 可以使用最多 limits.cpu 指定的 CPU 资源,但调度时会考虑这个值作为其最小需求。
apiVersion: v1
kind: Pod
metadata:
name: limits-cpu-only
spec:
containers:
- name: limits-only-container
image: busybox
resources:
limits:
cpu: 500m
command: ['sh', '-c', 'echo "Limits Only" && sleep 3600']
$ kubectl get pod limits-cpu-only -o go-template='
Pod Name: {
{ .metadata.name }}
QoS Class: {
{ .status.qosClass }}
Containers:
{
{- range .spec.containers }}
- Name: {
{ .name }}
Requests:
CPU: {
{ .resources.requests.cpu }}
Memory: {
{ .resources.requests.memory }}
Limits:
CPU: {
{ .resources.limits.cpu }}
Memory: {
{ .resources.limits.memory }}
{
{- end }}
'
Pod Name: limits-cpu-only
QoS Class: Burstable
Containers:
- Name: limits-only-container
Requests:
CPU: 500m
Memory: <no value>
Limits:
CPU: 500m
Memory: <no value>
Memory
如果只有 limits.memory 而没有 requests.memory,Kubernetes 会将 requests.memory 自动设置为 limits.memory 的值。这意味着 Pod 可以使用最多 limits.memory 指定的 memory 资源,但调度时会考虑这个值作为其最小需求。如果 Pod 请求的内存超过了设置的限制,可能会被终止(OOM Killed)。
apiVersion: v1
kind: Pod