概念

Kubernetes v1.16 文档不再得到积极维护。您当前正在查看的版本是静态快照。有关最新文档,请参见 最新版本。

Edit This Page

管理容器的计算捕鱼大亨网络版

当您指定一个 ,您可以选择指定 每个容器需要大量的CPU和内存(RAM)。当容器有捕鱼大亨网络版时 指定请求后,调度程序可以更好地决定要节点 放置豆荚。当指定了容器的限制时,争用 节点上的捕鱼大亨网络版可以以指定的方式处理。有关更多详细信息 请求和限制之间的区别,请参阅 捕鱼大亨网络版QoS.

捕鱼大亨网络版类型

中央处理器 记忆 每个都是 捕鱼大亨网络版类型。捕鱼大亨网络版类型具有基本单位。 CPU以内核为单位指定,内存以字节为单位指定。 If you’重新使用Kubernetes v1.14或更高版本,您可以指定 大页面 resources. 庞大的页面是Linux特有的功能,节点内核在其中分配内存块 比默认页面大小大得多。

例如,在默认页面大小为4KiB的系统上,您可以指定一个限制, hugepages-2Mi: 80Mi。如果容器尝试分配40多个2MiB大页面(a 总共80 MiB),则分配失败。

笔记: You cannot overcommit hugepages-* resources. This is different from the 记忆中央处理器 resources.

中央处理器 和内存统称为 计算捕鱼大亨网络版, 要不就 捕鱼大亨网络版。计算 捕鱼大亨网络版是可请求,分配和可测量的数量 消耗。它们与 API捕鱼大亨网络版。 API捕鱼大亨网络版,例如Pod 服务 是可以读取和修改的对象 通过Kubernetes API服务器。

捕鱼大亨网络版请求和Pod和容器的限制

荚 的每个容器可以指定以下一项或多项:

  • 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等效于:

  • 1个AWS vCPU
  • 1个GCP核心
  • 1个Azure vCore
  • 1个IBM vCPU
  • 1 超线程 在具有超线程功能的裸机英特尔处理器上

允许部分请求。一个带有 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

创建Pod时,Kubernetes调度程序会为Pod选择一个节点 运行。每个节点对于每种捕鱼大亨网络版类型都具有最大容量: 它可以为Pod提供的CPU和内存量。调度程序可确保 对于每种捕鱼大亨网络版类型,已调度捕鱼大亨网络版请求的总和 容器小于节点的容量。请注意,尽管实际内存 或节点上的CPU捕鱼大亨网络版使用率非常低,调度程序仍拒绝放置 如果容量检查失败,则为节点上的Pod。这样可以防止捕鱼大亨网络版 稍后捕鱼大亨网络版使用率增加时(例如,在 每日请求率高峰。

具有捕鱼大亨网络版限制的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将保留 计划外直到找到一个地方。每次 调度程序无法为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)而失败。一般来说,如果是豆荚 暂挂此类消息,可以尝试以下几种方法:

  • 将更多节点添加到群集。
  • 终止不需要的Pod,以便为未完成的Pod腾出空间。
  • 检查Pod是否不大于所有节点。例如,如果所有 nodes have a capacity of 中央处理器: 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 贝塔
该功能当前位于 贝塔 state, meaning:

  • 版本名称包含beta(例如v2beta3)。
  • 代码已经过测试。启用该功能被认为是安全的。默认启用。
  • 尽管细节可能会更改,但不会放弃对整体功能的支持。
  • 对象的架构和/或语义可能会在随后的Beta或稳定版本中以不兼容的方式更改。发生这种情况时,我们将提供有关迁移到下一个版本的说明。这可能需要删除,编辑和重新创建API对象。编辑过程可能需要一些思考。对于依赖该功能的应用程序,可能需要停机。
  • 建议仅用于非关键业务用途,因为在后续版本中可能会发生不兼容的更改。如果您有多个可以独立升级的群集,则可以放宽此限制。
  • 请尝试使用我们的Beta功能,并提供有关它们的反馈!他们退出测试版后,对我们进行更多更改可能不切实际。

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

创建Pod时,Kubernetes调度程序会为Pod选择一个节点 运行。每个节点都可以为Pod提供最大数量的本地临时存储。有关更多信息,请参见 “Node Allocatable”.

调度程序确保调度的容器的捕鱼大亨网络版请求的总和小于节点的容量。

具有临时存储限制的Pod如何运行

对于容器级隔离,如果是容器’如果可写层和日志使用量超出其存储限制,则将驱逐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.

  • 仅当Pod请求时,调度程序才将Pod发送到调度程序扩展程序 “example.com/foo”.
  • 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, 3000m3Ki. Examples of 无效 quantities are 0.51500m.

笔记: 扩展捕鱼大亨网络版取代了Opaque整数捕鱼大亨网络版。 Users can use any domain name prefix other than kubernetes.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

什么's next

反馈