当您指定一个 荚 ,您可以选择指定 每个容器需要大量的CPU和内存(RAM)。当容器有捕鱼大亨网络版时 指定请求后,调度程序可以更好地决定要节点 放置豆荚。当指定了容器的限制时,争用 节点上的捕鱼大亨网络版可以以指定的方式处理。有关更多详细信息 请求和限制之间的区别,请参阅 捕鱼大亨网络版QoS.
中央处理器 和 记忆 每个都是 捕鱼大亨网络版类型。捕鱼大亨网络版类型具有基本单位。 CPU以内核为单位指定,内存以字节为单位指定。 If you’重新使用Kubernetes v1.14或更高版本,您可以指定 大页面 resources. 庞大的页面是Linux特有的功能,节点内核在其中分配内存块 比默认页面大小大得多。
例如,在默认页面大小为4KiB的系统上,您可以指定一个限制,
hugepages-2Mi: 80Mi
。如果容器尝试分配40多个2MiB大页面(a
总共80 MiB),则分配失败。
笔记: You cannot overcommithugepages-*
resources. This is different from the记忆
和中央处理器
resources.
中央处理器 和内存统称为 计算捕鱼大亨网络版, 要不就 捕鱼大亨网络版。计算 捕鱼大亨网络版是可请求,分配和可测量的数量 消耗。它们与 API捕鱼大亨网络版。 API捕鱼大亨网络版,例如Pod 服务 是可以读取和修改的对象 通过Kubernetes API服务器。
荚 的每个容器可以指定以下一项或多项:
spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.limits.hugepages-<size>
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory
spec.containers[].resources.requests.hugepages-<size>
尽管只能在单个容器上指定请求和限制,但它 讨论Pod捕鱼大亨网络版请求和限制很方便。一种 荚 捕鱼大亨网络版请求/限制 对于特定的捕鱼大亨网络版类型,是 Pod中每个Container的该类型的捕鱼大亨网络版请求/限制。
中央处理器 捕鱼大亨网络版的限制和要求以 中央处理器 units. Kubernetes中的一个cpu等效于:
允许部分请求。一个带有
spec.containers[].resources.requests.cpu
of 0.5
is guaranteed half as much
CPU as one that asks for 1 CPU. The expression 0.1
is equivalent to the
expression 100m
, which can be read as “one hundred millicpu”. Some people say
“一百毫”,这被理解为是同一件事。一种
request with a decimal point, like 0.1
, is converted to 100m
by the API, and
precision finer than 1m
is not allowed. For this reason, the form 100m
might
be preferred.
始终要求CPU是绝对数量,而不是相对数量。 0.1与单核,双核或48核计算机上的CPU数量相同。
Limits and requests for 记忆
are measured in bytes. You can express memory as
使用以下后缀之一的纯整数或定点整数:
E,P,T,G,M,K。您还可以使用2的幂次方:Ei,Pi,Ti,Gi,
咪淇例如,以下内容表示大致相同的值:
128974848, 129e6, 129M, 123Mi
这里’s an example. 以下Pod具有两个容器。每个容器的要求为0.25 cpu and 64MiB (226 个字节)的内存。每个容器的限制为0.5 CPU和128MiB的内存。您可以说Pod的请求为0.5 cpu和128 MiB内存,限制为1 cpu和256MiB内存。
apiVersion: v1
kind: 荚
metadata:
name: 前端
spec:
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
捕鱼大亨网络版:
requests:
记忆: "64Mi"
中央处理器: "250m"
limits:
记忆: "128Mi"
中央处理器: "500m"
- name: wp
image: wordpress
捕鱼大亨网络版:
requests:
记忆: "64Mi"
中央处理器: "250m"
limits:
记忆: "128Mi"
中央处理器: "500m"
创建Pod时,Kubernetes调度程序会为Pod选择一个节点 运行。每个节点对于每种捕鱼大亨网络版类型都具有最大容量: 它可以为Pod提供的CPU和内存量。调度程序可确保 对于每种捕鱼大亨网络版类型,已调度捕鱼大亨网络版请求的总和 容器小于节点的容量。请注意,尽管实际内存 或节点上的CPU捕鱼大亨网络版使用率非常低,调度程序仍拒绝放置 如果容量检查失败,则为节点上的Pod。这样可以防止捕鱼大亨网络版 稍后捕鱼大亨网络版使用率增加时(例如,在 每日请求率高峰。
当kubelet启动Pod容器时,它会超过CPU和内存限制 到容器运行时。
使用Docker时:
这 spec.containers[].resources.requests.cpu
is converted to its core value,
可能是小数,然后乘以1024。此数字中的较大者
或2用作
--cpu-shares
flag in the docker run
command.
这 spec.containers[].resources.limits.cpu
is converted to its millicore value and
乘以100。结果是容器可以使用的CPU时间总量
每100ms。在此时间间隔内,容器使用的CPU时间不能超过其份额。
笔记: 默认配额期限为100毫秒。 CPU配额的最小分辨率为1ms。
spec.containers[].resources.limits.memory
is converted to an integer, and
用作
--memory
flag in the docker run
command.如果容器超出其内存限制,则可能会终止。如果是 可重新启动,与其他任何类型的运行时一样,kubelet将重新启动它 failure.
如果容器超出其内存请求,则其Pod可能会 每当节点内存不足时都会被逐出。
容器可能会或可能不会超出其CPU限制进行扩展 时间段。但是,它不会因CPU使用率过高而被杀死。
确定容器是否无法安排或由于以下原因而被杀死 捕鱼大亨网络版限制,请参阅 故障排除 section.
将Pod的捕鱼大亨网络版使用情况报告为Pod状态的一部分。
如果 可选监控 为您的集群配置,然后可以从中检索Pod捕鱼大亨网络版的使用情况 监控系统。
如果调度程序找不到适合Pod的任何节点,则Pod将保留 计划外直到找到一个地方。每次 调度程序无法为Pod找到位置,如下所示:
kubectl describe pod frontend | grep -A 3 Events
Events:
FirstSeen LastSeen Count From Subobject PathReason Message
36s 5s 6 {scheduler } FailedScheduling Failed for reason PodExceedsFreeCPU and possibly others
在前面的示例中,Pod名为“frontend”由于无法安排 节点上的CPU捕鱼大亨网络版不足。类似的错误消息也可以建议 因内存不足(PodExceedsFreeMemory)而失败。一般来说,如果是豆荚 暂挂此类消息,可以尝试以下几种方法:
中央处理器: 1
, then a Pod with a request of 中央处理器: 1.1
will
never be scheduled.您可以检查节点容量和通过
kubectl describe nodes
通讯。例如:
kubectl describe nodes e2e-test-node-pool-4lw4
Name: e2e-test-node-pool-4lw4
[ ... lines removed for clarity ...]
Capacity:
cpu: 2
memory: 7679792Ki
pods: 110
Allocatable:
cpu: 1800m
memory: 7474992Ki
pods: 110
[ ... lines removed for clarity ...]
Non-terminated Pods: (5 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits
--------- ---- ------------ ---------- --------------- -------------
kube-system fluentd-gcp-v1.38-28bv1 100m (5%) 0 (0%) 200Mi (2%) 200Mi (2%)
kube-system kube-dns-3297075139-61lj3 260m (13%) 0 (0%) 100Mi (1%) 170Mi (2%)
kube-system kube-proxy-e2e-test-... 100m (5%) 0 (0%) 0 (0%) 0 (0%)
kube-system monitoring-influxdb-grafana-v4-z1m12 200m (10%) 200m (10%) 600Mi (8%) 600Mi (8%)
kube-system node-problem-detector-v0.1-fj7m3 20m (1%) 200m (10%) 20Mi (0%) 100Mi (1%)
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
CPU Requests CPU Limits Memory Requests Memory Limits
------------ ---------- --------------- -------------
680m (34%) 400m (20%) 920Mi (12%) 1070Mi (14%)
在前面的输出中,您可以看到Pod请求的长度超过1120m CPU或6.23Gi的内存,它将不适合该节点。
By looking at the 豆荚
section, you can see which Pods are taking up space on
the node.
豆荚可用的捕鱼大亨网络版量少于节点容量,因为
system daemons use a portion of the available resources. The allocatable
field
节点状态
给出Pod可用的捕鱼大亨网络版量。有关更多信息,请参见
节点可分配捕鱼大亨网络版.
这 捕鱼大亨网络版配额 可以配置功能 限制可以消耗的捕鱼大亨网络版总量。如果结合使用 使用名称空间,它可以防止一个团队占用所有捕鱼大亨网络版。
您的容器可能因为捕鱼大亨网络版不足而被终止。去检查
容器是否由于达到捕鱼大亨网络版限制而被杀死,请致电
kubectl describe pod
在感兴趣的豆荚上:
kubectl describe pod simmemleak-hra99
Name: simmemleak-hra99
Namespace: default
Image(s): saadali/simmemleak
Node: kubernetes-node-tf0f/10.240.216.66
Labels: name=simmemleak
Status: Running
Reason:
Message:
IP: 10.244.2.75
Replication Controllers: simmemleak (1/1 replicas created)
Containers:
simmemleak:
Image: saadali/simmemleak
Limits:
cpu: 100m
memory: 50Mi
State: Running
Started: Tue, 07 Jul 2015 12:54:41 -0700
Last Termination State: Terminated
Exit Code: 1
Started: Fri, 07 Jul 2015 12:54:30 -0700
Finished: Fri, 07 Jul 2015 12:54:33 -0700
Ready: False
Restart Count: 5
Conditions:
Type Status
Ready False
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {scheduler } scheduled Successfully assigned simmemleak-hra99 to kubernetes-node-tf0f
Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-node-tf0f} implicitly required container POD pulled Pod container image "k8s.gcr.io/pause:0.8.0" already present on machine
Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-node-tf0f} implicitly required container POD created Created with docker id 6a41280f516d
Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-node-tf0f} implicitly required container POD started Started with docker id 6a41280f516d
Tue, 07 Jul 2015 12:53:51 -0700 Tue, 07 Jul 2015 12:53:51 -0700 1 {kubelet kubernetes-node-tf0f} spec.containers{simmemleak} created Created with docker id 87348f12526a
In the preceding example, the Restart Count: 5
indicates that the simmemleak
荚 中的容器已终止,然后重新启动了五次。
You can call kubectl get pod
with the -o go-template=...
option to fetch the status
先前终止的容器数量:
kubectl get pod -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}' simmemleak-hra99
Container Name: simmemleak
LastState: map[terminated:map[exitCode:137 reason:OOM Killed startedAt:2015-07-07T20:58:43Z finishedAt:2015-07-07T20:58:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]]
You can see that the Container was terminated because of reason:OOM Killed
, where OOM
stands for Out Of Memory.
Kubernetes v1.16
贝塔
Kubernetes 1.8版引入了一个新捕鱼大亨网络版, 临时存储 用于管理本地临时存储。在每个Kubernetes节点中,kubelet’根目录(默认为/ var / lib / kubelet)和日志目录(/ var / log)存储在节点的根分区上。 Pods还通过emptyDir卷,容器日志,图像层和容器可写层共享和使用此分区。
该分区是“临时”分区,应用程序无法从该分区获得任何性能SLA(例如,磁盘IOPS)。本地临时存储管理仅适用于根分区。图像层和可写层的可选分区超出范围。
笔记: 如果使用了可选的运行时分区,则根分区将不包含任何图像层或可写层。
荚 的每个容器可以指定以下一项或多项:
spec.containers[].resources.limits.ephemeral-storage
spec.containers[].resources.requests.ephemeral-storage
Limits and requests for 临时存储
are measured in bytes. You can express storage as
使用以下后缀之一的纯整数或定点整数:
E,P,T,G,M,K。您还可以使用2的幂次方:Ei,Pi,Ti,Gi,
咪淇例如,以下内容表示大致相同的值:
128974848, 129e6, 129M, 123Mi
例如,以下Pod具有两个容器。每个容器都有一个2GiB的本地临时存储请求。每个容器的本地临时存储限制为4GiB。因此,该Pod要求本地临时存储空间为4GiB,存储空间限制为8GiB。
apiVersion: v1
kind: 荚
metadata:
name: 前端
spec:
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
捕鱼大亨网络版:
requests:
临时存储: "2Gi"
limits:
临时存储: "4Gi"
- name: wp
image: wordpress
捕鱼大亨网络版:
requests:
临时存储: "2Gi"
limits:
临时存储: "4Gi"
创建Pod时,Kubernetes调度程序会为Pod选择一个节点 运行。每个节点都可以为Pod提供最大数量的本地临时存储。有关更多信息,请参见 “Node Allocatable”.
调度程序确保调度的容器的捕鱼大亨网络版请求的总和小于节点的容量。
对于容器级隔离,如果是容器’如果可写层和日志使用量超出其存储限制,则将驱逐Pod。对于Pod级隔离,如果来自所有容器以及Pod的本地临时存储使用之和’如果emptyDir的容量超过限制,则Pod将被驱逐。
当使用本地临时存储时,将对其进行持续监控 根据kubelet。通过扫描每个来执行监视 emptyDir卷,日志目录和定期的可写层 基础。从Kubernetes 1.15开始,emptyDir卷(但不记录 目录或可写层),可以在集群运营商处’s option, be managed by use of 项目 quotas. 项目配额最初是在XFS中实现的,并且还有更多 最近被移植到ext4fs。项目配额可同时用于 监督和执行;从Kubernetes 1.16开始,它们已经可用 作为仅用于监视的alpha功能。
配额比目录扫描更快,更准确。当一个 目录已分配给项目,所有文件都在 目录是在该项目中创建的,内核只需要 跟踪该项目中的文件正在使用多少个块。如果 创建和删除文件,但是使用打开的文件描述符,它 继续消耗空间。该空间将通过配额进行跟踪, 但无法通过目录扫描看到。
Kubernetes使用从1048576开始的项目ID。正在使用的ID是
registered in /etc/projects
和 /etc/projid
. If project IDs in
该范围用于系统上的其他目的,那些项目
IDs must be registered in /etc/projects
和 /etc/projid
to prevent
Kubernetes的使用。
要启用项目配额,群集操作员必须执行 following:
启用 LocalStorageCapacityIsolationFSQuotaMonitoring=true
kubelet配置中的特征门。默认为 false
在 Kubernetes 1.16, so must be explicitly set to true
.
确保根分区(或可选的运行时分区)为 在启用项目配额的情况下构建。所有XFS文件系统支持 项目配额,但是ext4文件系统必须专门构建。
确保根分区(或可选的运行时分区)为 在启用项目配额的情况下安装。
XFS文件系统在构建时不需要任何特殊操作;他们是 在启用项目配额的情况下自动构建。
Ext4fs文件系统必须在启用配额的情况下构建,然后它们必须 在文件系统中启用:
% sudo mkfs.ext4 other_ext4fs_args... -E quotatype=prjquota /dev/block_device
% sudo tune2fs -O project -Q prjquota /dev/block_device
要挂载文件系统,ext4fs和XFS都需要 prjquota
option set in /etc/fstab
:
/dev/block_device /var/kubernetes_data defaults,prjquota 0 0
扩展捕鱼大亨网络版是标准捕鱼大亨网络版名称,在
kubernetes.io
域。它们允许集群运营商做广告,用户可以
消耗非Kubernetes内置捕鱼大亨网络版。
使用扩展捕鱼大亨网络版需要两个步骤。一,集群 操作员必须播发扩展捕鱼大亨网络版。其次,用户必须要求 Pod中的扩展捕鱼大亨网络版。
节点级扩展捕鱼大亨网络版绑定到节点。
看 设备 Plugin 有关如何在每个节点上播发设备插件托管捕鱼大亨网络版的信息。
要播发新的节点级扩展捕鱼大亨网络版,集群运营商可以
submit a PATCH
HTTP request to the API server to specify the available
quantity in the status.capacity
for a node in the cluster. After this
operation, the node’s status.capacity
will include a new resource. The
status.allocatable
字段会使用新捕鱼大亨网络版自动更新
由kubelet异步进行。请注意,因为调度程序使用该节点
status.allocatable
评估Pod适合性时的价值,可能会短暂
在用新捕鱼大亨网络版修补节点容量和第一个Pod之间延迟
请求在该节点上调度捕鱼大亨网络版。
例子:
这里 is an example showing how to use curl
to form an HTTP request that
advertises five “example.com/foo” resources on node k8s-node-1
whose master
is k8s-master
.
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1foo", "value": "5"}]' \
http://k8s-master:8080/api/v1/nodes/k8s-node-1/status
笔记: In the preceding request,~1
is the encoding for the character/
在补丁路径中。 JSON-Patch中的操作路径值被解释为 JSON指针。有关更多详细信息,请参见 IETF RFC 6901第3节.
群集级别的扩展捕鱼大亨网络版未绑定到节点。他们通常被管理 由调度程序扩展程序处理,这些程序处理捕鱼大亨网络版消耗和捕鱼大亨网络版配额。
您可以指定由调度程序扩展程序处理的扩展捕鱼大亨网络版 in 调度策略 configuration.
例子:
调度程序策略的以下配置表明 集群级扩展捕鱼大亨网络版“example.com/foo”由调度程序处理 extender.
这 ignoredByScheduler
field specifies that the scheduler does not check
the “example.com/foo” resource in its 荚 FitsResources
predicate.
{
"kind": "Policy",
"apiVersion": "v1",
"extenders": [
{
"urlPrefix":"<extender-endpoint>",
"bindVerb": "bind",
"managedResources": [
{
"name": "example.com/foo",
"ignoredByScheduler": true
}
]
}
]
}
用户可以使用Pod规范中的扩展捕鱼大亨网络版,就像CPU和内存一样。 调度程序负责捕鱼大亨网络版核算,因此 可用数量同时分配给Pod。
API服务器将扩展捕鱼大亨网络版的数量限制为整数。
Examples of 有效 quantities are 3
, 3000m
和 3Ki
. Examples of
无效 quantities are 0.5
和 1500m
.
笔记: 扩展捕鱼大亨网络版取代了Opaque整数捕鱼大亨网络版。 Users can use any domain name prefix other thankubernetes.io
which is reserved.
要使用Pod中的扩展捕鱼大亨网络版,请包含捕鱼大亨网络版名称作为键
in the spec.containers[].resources.limits
map in the container spec.
笔记: 扩展捕鱼大亨网络版不能过量使用,因此请求和限制 如果两者都在容器规范中,则必须相等。
仅当满足所有捕鱼大亨网络版请求(包括
CPU, memory and any extended resources. The Pod remains in the PENDING
state
只要不能满足捕鱼大亨网络版请求。
例子:
以下Pod要求2个CPU和1个“example.com/foo”(扩展捕鱼大亨网络版)。
apiVersion: v1
kind: 荚
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: myimage
捕鱼大亨网络版:
requests:
中央处理器: 2
example.com/foo: 1
limits:
example.com/foo: 1
获得在线体验 将内存捕鱼大亨网络版分配给容器和Pod.
获得在线体验 将CPU捕鱼大亨网络版分配给容器和Pod.
此页面是否有帮助?
感谢您的反馈。如果您对如何使用Kubernetes有一个特定的,可回答的问题,请在 Stack Overflow. 如果您想在GitHub仓库中打开一个问题 report a problem or 建议改善.