GKE Недостаточный процессор для небольших модулей приложения Node.js - PullRequest
3 голосов
/ 17 мая 2019

Итак, в GKE у меня есть Node.js app, который для каждого модуля использует: CPU(cores): 5m, MEMORY: 100Mi

Однако я могу развернуть только 1 модуль на каждый узел. Я использую кластер GKE n1-standard-1, который имеет 1 vCPU, 3.75 GB на узел.

Таким образом, чтобы получить 2 пакета app всего = CPU(cores): 10m, MEMORY: 200Mi, для его работы требуется еще один целый +1 узел = 2 узла = 2 vCPU, 7.5 GB. Если я пытаюсь развернуть эти 2 модуля на одном узле, я получаю ошибку insufficient CPU.

У меня такое чувство, что я действительно должен иметь возможность запускать несколько реплик pod (например, 3 реплики и более) на 1 узле f1-micro (1 vCPU, 0,6 ГБ) или f1-small (1 vCPU, 1,7 ГБ ), и что я здесь слишком переобеспечен и трачу свои деньги.

Но я не уверен, почему я так ограничен insufficient CPU. Есть ли какой-то конфиг, который мне нужно изменить? Любое руководство будет оценено.


Allocatable:
 cpu:                940m
 ephemeral-storage:  47093746742
 hugepages-2Mi:      0
 memory:             2702216Ki
 pods:               110
Non-terminated Pods:         (7 in total)
  Namespace                  Name                                                CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                                ------------  ----------  ---------------  -------------
  default                    mission-worker-5cf6654687-fwmk4                     100m (10%)    0 (0%)      0 (0%)           0 (0%)
  default                    mission-worker-5cf6654687-lnwkt                     100m (10%)    0 (0%)      0 (0%)           0 (0%)
  kube-system                fluentd-gcp-v3.1.1-5b6km                            100m (10%)    1 (106%)    200Mi (7%)       500Mi (18%)
  kube-system                kube-dns-76dbb796c5-jgljr                           260m (27%)    0 (0%)      110Mi (4%)       170Mi (6%)
  kube-system                kube-proxy-gke-test-cluster-pool-1-96c6d8b2-m15p    100m (10%)    0 (0%)      0 (0%)           0 (0%)
  kube-system                metadata-agent-nb4dp                                40m (4%)      0 (0%)      50Mi (1%)        0 (0%)
  kube-system                prometheus-to-sd-gwlkv                              1m (0%)       3m (0%)     20Mi (0%)        20Mi (0%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource  Requests     Limits
  --------  --------     ------
  cpu       701m (74%)   1003m (106%)
  memory    380Mi (14%)  690Mi (26%)
Events:     <none>

1 Ответ

2 голосов
/ 21 мая 2019

После развертывания проверьте емкость узла с помощью kubectl describe nodes. Например, в примере кода внизу ответа:

Выделенный процессор: 1800 м

Уже используется модулями в пространстве имен системы kube: 100 м + 260 м + + 100 м + 200 м + 20 м = 680 м

Это означает, что вам осталось использовать 1800 м - 680 м = 1120 м

Таким образом, если ваши блоки или модули запрашивают более 1120 м процессоров, они не поместятся на этом узле

Таким образом, чтобы получить всего 2 модуля приложения = CPU (ядра): 10m, MEMORY: 200Mi, требуется еще целый узел +1 = 2 узла = 2 vCPU, 7,5 ГБ заставить это работать. Если я попытаюсь развернуть эти 2 модуля на одном и том же узел, я получаю недостаточную ошибку процессора.

Если вы выполните упражнение, описанное выше, вы найдете свой ответ. В случае, если процессоров достаточно для использования вашими модулями, и все же вы получаете недостаточную ошибку ЦП, проверьте, правильно ли вы устанавливаете запрос процессора и ограничиваете параметры. Смотрите здесь

Если вы делаете все вышеперечисленное, но проблема остается. Затем, я думаю, что в вашем случае может случиться так, что вы выделяете 5-10 миллионов процессорных ресурсов для приложения узла, которое слишком мало для выделения ресурсов. Попробуйте увеличить его до 50 м.

У меня такое чувство, что я действительно смогу запустить горсть стручка реплики (например, 3 реплики и более) на 1 узле f1-micro (1 vCPU, 0,6 ГБ) или f1-small (1 vCPU, 1,7 ГБ), и это слишком сверхпредвиденное здесь и тратить мои деньги.

Опять же, выполните описанное выше упражнение, чтобы сделать вывод , что

Name:            e2e-test-minion-group-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%)
...