Kubernetes节点上内存不足的原因

103次阅读
没有评论

问题描述

在Kubernetes集群中有一个Elasticsearch集群。他将数据Pod部署到内存优化的节点上,并对这些节点进行了标记,以便只有Elasticsearch数据Pod可以被调度到这些节点上。目前,他有3个内存优化的EC2实例用于这些数据Pod。这些实例是r5.2Xlarge,具有64G的内存。以下是其中一个r5节点的输出(它们都是相同的):

Capacity:  attachable-volumes-aws-ebs:  25  cpu:                         8  ephemeral-storage:           32461564Ki  hugepages-1Gi:               0  hugepages-2Mi:               0  memory:                      65049812Ki  pods:                        110
Allocatable:  attachable-volumes-aws-ebs:  25  cpu:                         8  ephemeral-storage:           29916577333  hugepages-1Gi:               0  hugepages-2Mi:               0  memory:                      64947412Ki  pods:                        110
System Info:  Machine ID:                 ec223b5ea23ea6bd5b06e8ed0a733d2d  System UUID:                ec223b5e-a23e-a6bd-5b06-e8ed0a733d2d  Boot ID:                    798aca5f-d9e1-4c9f-b75d-e16f7ba2d514  Kernel Version:             5.4.0-1024-aws  OS Image:                   Ubuntu 20.04.1 LTS  Operating System:           linux  Architecture:               amd64  Container Runtime Version:  docker://19.3.11  Kubelet Version:            v1.18.10  Kube-Proxy Version:         v1.18.10
Non-terminated Pods:          (5 in total)
  Namespace                   Name                                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                                        ------------  ----------  ---------------  -------------  ---
  amazon-cloudwatch           fluentd-cloudwatch-tzsv4                                    100m (1%)     0 (0%)      200Mi (0%)       400Mi (0%)     21d
  default                     prometheus-prometheus-node-exporter-tvmd4                   100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d
  es                          elasticsearch-data-0                                        500m (6%)     1 (12%)     8Gi (12%)        8Gi (12%)      14m
  kube-system                 calico-node-dhxg5                                           100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d
  kube-system                 kube-proxy-ip-10-1-12-115.us-gov-west-1.compute.internal    100m (1%)     0 (0%)      0 (0%)           0 (0%)         21d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         900m (11%)    1 (12%)
  memory                      8392Mi (13%)  8592Mi (13%)
  ephemeral-storage           0 (0%)        0 (0%)
  hugepages-1Gi               0 (0%)        0 (0%)
  hugepages-2Mi               0 (0%)        0 (0%)
  attachable-volumes-aws-ebs  0             0

用户的集群如下所示:

kubectl get pods -n es
NAME                                                 READY   STATUS    RESTARTS   AGE
elasticsearch-client-0                               1/1     Running   0          77m
elasticsearch-client-1                               1/1     Running   0          77m
elasticsearch-data-0                                 1/1     Running   0          77m
elasticsearch-data-1                                 1/1     Running   0          77m
elasticsearch-data-2                                 1/1     Running   0          77m
elasticsearch-data-3                                 0/1     Pending   0          77m
elasticsearch-data-4                                 0/1     Pending   0          77m
elasticsearch-data-5                                 0/1     Pending   0          77m
elasticsearch-data-6                                 0/1     Pending   0          77m
elasticsearch-data-7                                 0/1     Pending   0          77m
elasticsearch-master-0                               2/2     Running   0          77m
elasticsearch-master-1                               2/2     Running   0          77m
prometheus-elasticsearch-exporter-6d6c5d49cf-4w7gc   1/1     Running   0          22h

当用户描述Pod时,以下是事件:

Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  56s (x5 over 3m35s)  default-scheduler  0/11 nodes are available: 3 Insufficient memory, 3 node(s) didn't match pod affinity/anti-affinity, 3 node(s) didn't satisfy existing pods anti-affinity rules, 5 node(s) didn't match node selector.

用户还提供了数据Pod的资源限制和请求:

Limits:
  cpu:     1
  memory:  8Gi
Requests:
  cpu:      500m
  memory:   8Gi

用户还提供了节点亲和性和容忍度的配置。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为nodeSelector
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

方案2

根据用户提供的信息,问题可能是由于节点的内存不足导致的。以下是解决方案的步骤:
1. 检查节点的内存使用情况。确保节点上的内存使用率没有超过限制。
2. 检查Pod的资源请求和限制。确保Pod的资源请求和限制与节点的资源匹配。
3. 如果节点的内存不足,可以考虑增加更多的节点或调整Pod的资源请求和限制。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案3

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案4

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案5

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案6

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案7

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案8

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案9

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案10

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案11

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案12

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

方案13

根据用户提供的信息,问题可能是由于节点亲和性和容忍度的配置导致的。以下是解决方案的步骤:
1. 检查节点亲和性的配置。确保节点亲和性的配置允许多个相同的Pod在同一个节点上运行。如果配置为requiredDuringSchedulingIgnoredDuringExecution,则只能在每个节点上运行一个Pod。如果需要在同一个节点上运行多个相同的Pod,可以将配置更改为preferredDuringSchedulingIgnoredDuringExecution
2. 检查容忍度的配置。确保容忍度的配置允许Pod在节点上运行。如果容忍度的配置不正确,可能会导致Pod无法调度到节点上。
3. 根据需要更改节点亲和性和容忍度的配置,并重新部署Pod。

请注意,以上解决方案仅供参考。根据实际情况和需求,可能需要进行进一步的调整和优化。

正文完