gpt4 book ai didi

kubernetes - 具有 1 个 CPU 不足错误的 GCloud kubernetes 集群

转载 作者:行者123 更新时间:2023-12-02 11:31:33 24 4
gpt4 key购买 nike

我使用以下方法在 Google Cloud 上创建了一个 Kubernetes 集群:

gcloud container clusters create my-app-cluster --num-nodes=1

然后我部署了我的 3 个应用程序(后端、前端和爬虫)并创建了一个负载均衡器。我使用了以下配置文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-server
image: gcr.io/my-app/server
ports:
- containerPort: 8009
envFrom:
- secretRef:
name: my-app-production-secrets
- name: my-app-scraper
image: gcr.io/my-app/scraper
ports:
- containerPort: 8109
envFrom:
- secretRef:
name: my-app-production-secrets
- name: my-app-frontend
image: gcr.io/my-app/frontend
ports:
- containerPort: 80
envFrom:
- secretRef:
name: my-app-production-secrets

---

apiVersion: v1
kind: Service
metadata:
name: my-app-lb-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- name: my-app-server-port
protocol: TCP
port: 8009
targetPort: 8009
- name: my-app-scraper-port
protocol: TCP
port: 8109
targetPort: 8109
- name: my-app-frontend-port
protocol: TCP
port: 80
targetPort: 80

输入时 kubectl get pods我得到:
NAME                                   READY     STATUS    RESTARTS   AGE
my-app-deployment-6b49c9b5c4-5zxw2 0/3 Pending 0 12h

在 Google Cloud 进行调查时,我在 pod 上看到“Unschedulable”状态和“insufficient cpu”错误:

Unschedulable state due to Insufficient cpu

当转到集群页面中我的集群下的节点部分时,我看到 681 mCPU 请求和 940 mCPU 分配:
enter image description here

怎么了?为什么我的 pod 没有启动?

最佳答案

每个容器都有一个默认的 CPU 请求(在 GKE 中我注意到它是 0.1 CPU 或 100m)。假设这些默认值,您在该 pod 中有三个容器,因此您请求另一个 0.3 CPU。

该节点有 0.68 个 CPU (680m) 由其他工作负载请求,并且该节点上的总限制(可分配)为 0.94 个 CPU (940m)。

如果您想查看哪些工作负载保留了 0.68 CPU,则需要检查节点上的 pod。在 GKE 上您可以看到每个节点的资源分配和限制的页面中,如果您单击该节点,它将带您进入提供此信息的页面。
就我而言,我可以看到 kube-dns 的 2 个 pod 其中每个占用 0.26 个 CPU。这些是正确操作集群所需的系统 pod。您看到的内容还取决于您选择了哪些附加服务,例如:HTTP 负载平衡 (Ingress)、Kubernetes 仪表板等。

对于超过 0.94 限制的节点,您的 pod 会将 CPU 占用到 0.98 CPU,这就是您的 pod 无法启动的原因。

请注意,调度基于为每个工作负载请求的 CPU 数量,而不是它实际使用的数量或限制。

您的选择:

  • 关闭任何占用您不需要的 CPU 资源的附加服务。
  • 向集群添加更多 CPU 资源。为此,您需要更改节点池以使用具有更多 CPU 的虚拟机,或者增加现有池中的节点数量。您可以在 GKE 控制台或通过 gcloud 执行此操作命令行。
  • 在您的容器中对更少的 CPU 发出显式请求,这将覆盖默认值。
  • apiVersion: apps/v1
    kind: Deployment
    ...
    spec:
    containers:
    - name: my-app-server
    image: gcr.io/my-app/server
    ...
    resources:
    requests:
    cpu: "50m"
    - name: my-app-scraper
    image: gcr.io/my-app/scraper
    ...
    resources:
    requests:
    cpu: "50m"
    - name: my-app-frontend
    image: gcr.io/my-app/frontend
    ...
    resources:
    requests:
    cpu: "50m"

    关于kubernetes - 具有 1 个 CPU 不足错误的 GCloud kubernetes 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698875/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com