【问题标题】:Skaffold is not fully running all the servicesSkaffold 没有完全运行所有服务
【发布时间】:2021-11-20 19:27:30
【问题描述】:

我正在开发this dummy project 并尝试通过Skaffold 使其在本地工作。

我的项目中有 3 个服务(分别在端口 300130023003 上运行),通过 NATS server 连接。

问题是:我每次运行 skaffold debug 时都会遇到不同类型的错误,并且一个/多个服务不起作用。

有时,我没有收到任何错误,所有服务都按预期工作。以下是部分错误:

Waited for <...>s due to client-side throttling, not priority and fairness,
request: GET:https://kubernetes.docker.internal:6443/api/v1/namespaces/default/pods?labelSelector=app%!D(MISSING). <...>%!C(MISSING)app.kubernetes.io%!F(MISSING)managed-by%!D(MISSING)skaffold%!C(MISSING)skaffold.dev%!F(MISSING)run-id%!D(MISSING)<...>` (from `request.go:668`)
- `0/1 nodes are available: 1 Insufficient cpu.` (from deployments)
- `UnhandledPromiseRejectionWarning: NatsError: CONNECTION_REFUSED` (from apps)
- `UnhandledPromiseRejectionWarning: Error: getaddrinfo EAI_AGAIN nats-service` (from apps)

我不知所措,再也无法自拔。我希望这里的人能够帮助我。

提前致谢。

PS:下面是我机器的配置,以防是我机器的问题。

Processor: AMD Ryzen 7 1700 (8C/16T)
Memory: 2 x 8GB DDR4 2667MHz
Graphics: AMD Radeon RX 590 (8GB)
OS: Windows 10 Pro 21H1
$ docker version
Client:
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.12
 Git commit:        0ed913b8-
 Built:             07/28/2020 16:36:03
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:52:10 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:38:50Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.4", GitCommit:"3cce4a82b44f032d0cd1a1790e6d2f5a55d20aae", GitTreeState:"clean", BuildDate:"2021-08-11T18:10:22Z", GoVersion:"go1.16.7", Compiler:"gc", Platform:"linux/amd64"}

我使用 WSL2 (Debian),docker-desktop 是 Kubernetes 的上下文。

【问题讨论】:

  • 0/1 个节点可用:1 cpu 不足。 (来自部署)此错误显然意味着您的部署没有足够的资源来启动。
  • 能否粘贴kubernetes describe nodes 命令的输出?
  • @MikolajS。 pastebin.com/AZtfFSeQ
  • 谢谢,您的集群似乎可以处理此应用程序。您在 Harsh Manvar 的回答下提到重启后它正在工作。它仍然有效还是有问题?
  • @MikolajS。我还有问题。我不知道问题出在哪里。在构建这个虚拟项目时,我尽力遵循行业标准,所以请告诉我是否有可能改进布局和结构等。它适用于操作系统的全新启动,并在 2-3 次运行后不断崩溃(如 2-3 次重新启动部署)。从那以后我继续处理卷,并遇到了像stackoverflow.com/q/60774220 这样的问题。我仍在寻找解决方案,现在也添加了批量问题。

标签: kubernetes nestjs nats.io skaffold nats-streaming-server


【解决方案1】:

错误说明了一切:

- `0/1 nodes are available: 1 Insufficient cpu.` (from deployments)

您请求或部署的应用数量超出了您的节点可以处理的数量。
在您的部署单元(DeploymentStatefulSetDeamoSet 等)中,您可以定义应用程序所需的资源,例如在这个 pod 中:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
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: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

这是相关部分:

resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

检查您的节点资源并增加您的节点或资源,以便能够部署更多服务。


【讨论】:

    【解决方案2】:
    0/1 nodes are available: 1 Insufficient cpu. (from deployments)
    

    此错误显然意味着您的部署没有足够的资源来启动。

    我尝试在我的环境中部署相同的错误,2 CPU 不足以启动此映像。

    您可能需要更高的资源或大节点来测试

    https://github.com/msrumon/microservice-template/blob/master/k8s/nats.yaml

    【讨论】:

    • 我尝试重新启动我的电脑(因此被阻止的资源最少) - 并尝试运行 skaffold debug。你猜怎么着?所有服务都已启动并运行 - 没有任何问题。我认为这是我的 PC 配置的问题 - 也许我需要更多的 CPU 和内存。顺便说一句,您确定应该增加nats 的资源限制而不是其他任何东西吗?如果是,机器重启后一切正常吗?
    • 它工作正常不需要增加限制,但看起来它是一个高资源消耗的应用程序。
    • 好的,那么其他错误呢?你有他们的线索吗?
    • 看起来它来自应用程序,它自己可能无法连接到服务。
    • 我的意思是,如果你在你的机器上运行它,你会得到同样的错误吗?我需要找出问题所在,如果它来自 k8s 配置,我需要一个正确的指导方针。
    【解决方案3】:

    出现此类问题的主要原因是您设置了only CPU limit (without setting CPU request) so Kubernetes automatically assigns a CPU request which is equal to the CPU limit

    如果您为 Container 指定 CPU 限制但未指定 CPU 请求,Kubernetes 会自动分配与限制匹配的 CPU 请求。同样,如果一个Container指定了自己的内存限制,但没有指定内存请求,Kubernetes会自动分配一个匹配该限制的内存请求。

    因此,由于请求等于限制,您的节点无法满足这些要求(您有 16 个可用 CPU;要启动所有服务,您需要 24 个 CPU) - 这就是您收到 0/1 nodes are available: 1 Insufficient cpu 错误消息的原因。

    如何解决?

    但是……

    你写道:

    我是否也应该尝试设置requests 键并设置下限?或者完全忽略它呢? 我试过了,还是一样的问题。

    因此,如果您从所有部署中删除了所有 CPU 限制,但仍然存在与 CPU 不足相关的错误,这清楚地表明您的应用程序太耗资源了。我建议在资源利用方面优化应用程序。另一种选择是增加节点资源。

    【讨论】:

    • 是的,我都设置了 requestslimits 键,一切顺利。我接受了你的回答。感谢您的贡献。如果您有时间,我在同一个项目中遇到thisthis 问题。非常欢迎您也参与其中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2013-07-19
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多