kubernetes资源对象之limitrange
kubernetes(k8s)资源对象limitrange详解
kubernetes资源对象之limitrange
limitrange简述
当定义 pod
时可以选择性地为每个 container
设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存(RAM)大小;此外还有其他类型的资源。当你为 Pod
中的 Container
指定了资源 请求 时,kube-scheduler
就利用该信息决定将 Pod
调度到哪个节点上。 当你还为 Container
指定了资源 约束时,kubelet
就可以确保运行的容器不会使用超出所设约束的资源。 kubelet
还会为容器预留所 请求数量的系统资源,供其使用。
kubernetes中的资源单位
CPU 资源单位
CPU 资源的约束和请求以 “cpu” 为单位。 在 Kubernetes 中,一个 CPU 等于1 个物理 CPU 核或者 一个虚拟核, 取决于节点是一台物理主机还是运行在某物理主机上的虚拟机。也可以表达带小数 CPU 的请求。 当定义一个容器,将其 spec.containers.resources.requests.cpu
设置为 0.5 时, 你所请求的 CPU 是你请求 1.0
CPU 时的一半。 对于 CPU 资源单位,数量表达式 0.1
等价于表达式 100m
,可以看作 “100 millicpu”。
CPU 资源总是设置为资源的绝对数量而非相对数量值。 例如,无论容器运行在单核、双核或者 48-核的机器上,500m
CPU 表示的是大约相同的计算能力。
Kubernetes 不允许设置精度小于 1m
的 CPU 资源。 因此,当 CPU 单位小于 1
或 1000m
时,使用毫核的形式是有用的; 例如 5m
而不是 0.005
。
内存资源单位
memory
的约束和请求以字节为单位。你可以使用普通的证书,或者带有以下数量后缀 的定点数字来表示内存:E、P、T、G、M、k。 你也可以使用对应的 2 的幂数:Ei、Pi、Ti、Gi、Mi、Ki。 例如,以下表达式所代表的是大致相同的值:
128974848、129e6、129M、128974848000m、123Mi
请注意后缀的大小写。如果你请求 400m
内存,实际上请求的是 0.4 字节。 如果有人这样设定资源请求或限制,可能他的实际想法是申请 400 兆字节(400Mi
) 或者 400M 字节。
limitrange资源清单解析
apiVersion: v1
kind: LimitRange
metadata:
name: limitrange
namespace: test
spec:
limits:
- type: Container #限制的资源类型
max:
cpu: "2" #限制单个容器的最大CPU
memory: "2Gi" #限制单个容器的最大内存
min:
cpu: "500m" #限制单个容器的最小CPU
memory: "512Mi" #限制单个容器的最小内存
default:
cpu: "500m" #默认单个容器的CPU限制
memory: "512Mi" #默认单个容器的内存限制
defaultRequest:
cpu: "500m" #默认单个容器的CPU创建请求
memory: "512Mi" #默认单个容器的内存创建请求
maxLimitRequestRatio:
cpu: 2 #限制CPU limit/request比值最大为2
memory: 2 #限制内存limit/request比值最大为1.5
- type: Pod
max:
cpu: "4" #限制单个Pod的最大CPU
memory: "4Gi" #限制单个Pod最大内存
- type: PersistentVolumeClaim
max:
storage: 50Gi #限制PVC最大的requests.storage
min:
storage: 30Gi #限制PVC最小的requests.storage
创建limitrange
[root@master test]# kubectl describe -n test limitrange
Name: limitrange
Namespace: test
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 500m 2 500m 500m 2
Container memory 512Mi 2Gi 512Mi 512Mi 2
Pod cpu - 4 - - -
Pod memory - 4Gi - - -
PersistentVolumeClaim storage 30Gi 50Gi - - -
在test空间命令下创建一个pod并查看,发现使用设置默认的limit属性值
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 500m
memory: 512Mi
Pod 和 容器的资源请求和约束
针对每个容器,都可以指定其资源约束和请求,包括如下选项:
spec.containers.resources.limits.cpu
spec.containers.resources.limits.memory
spec.containers.resources.limits.hugepages-
spec.containers.resources.requests.cpu
spec.containers.resources.requests.memory
spec.containers.resources.requests.hugepages-
尽管只能逐个容器地指定请求和限制值,考虑 Pod 的总体资源请求和约束也是有用的。 对特定资源而言,Pod 的资源请求/约束值是 Pod 中各容器对该类型资源的请求/约束值的总和。
apiVersion: v1
kind: Pod
metadata:
name: test1
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: log-aggregator
image: images.my-company.example/log-aggregator:v6
resources:
requests:
memory: "100Mi"
cpu: "300m"
limits:
memory: "128Mi"
cpu: "500m"
查看pod详情
Containers:
app:
Container ID:
Image: images.my-company.example/app:v4
Limits:
cpu: 500m
memory: 128Mi
Requests:
cpu: 250m
memory: 64Mi
log-aggregator:
Container ID:
Image: images.my-company.example/log-aggregator:v6
Limits:
cpu: 500m
memory: 128Mi
Requests:
cpu: 300m
memory: 100Mi
更多推荐
所有评论(0)