GCloud kubernetes кластер с 1 Недостаточная ошибка процессора - PullRequest
0 голосов
/ 14 февраля 2019

Я создал кластер Kubernetes в Google Cloud, используя:

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 я вижу состояние «Unschedulable» с ошибкой «недостаточно процессор»в модуле:

Unschedulable state due to Insufficient cpu

При переходе в раздел «Узлы» моего кластера на странице «Кластеры» я вижу 681 запрошенный mCPU и выделенное 940 mCPU: enter image description here

Что не так?Почему мой модуль не запускается?

1 Ответ

0 голосов
/ 15 февраля 2019

Каждый контейнер имеет запрос ЦП по умолчанию (в GKE я заметил, что это 0,1 ЦП или 100 м).Предполагая, что по умолчанию у вас есть три контейнера в этом модуле, вы запрашиваете еще 0,3 ЦП.

Узел имеет 0,68 ЦП (680 м), запрошенных другими рабочими нагрузками, и общий лимит (выделяемый) на этом узле 0,94 ЦП.(940 м).

Если вы хотите увидеть, какие рабочие нагрузки резервируют этот 0,68 ЦП, вам необходимо проверить модули на узле.На странице в GKE, где вы видите распределение ресурсов и лимиты на узел, если вы щелкнете по узлу, вы попадете на страницу, которая предоставляет эту информацию.
В моем случае я вижу 2 модуля kube-dns, принимающих 0,26Процессор каждый, среди других.Это системные модули, которые необходимы для правильной работы кластера.То, что вы увидите, также будет зависеть от того, какие дополнительные службы вы выбрали, например: балансировка нагрузки HTTP (Ingress), Kubernetes Dashboard и т. Д.

Ваш модуль будет поднимать CPU до 0,98 CPU для узла, которыйбольше лимита 0,94, поэтому ваш модуль не может запуститься.

Обратите внимание, что планирование основано на количестве ЦП , запрошенном для каждой рабочей нагрузки, а не на том, сколько он фактически использует,или предел.

Ваши параметры:

  1. Отключите любую дополнительную службу, которая потребляет ресурсы ЦП, которые вам не нужны.
  2. Добавление дополнительных ЦПресурс для вашего кластера.Для этого вам нужно либо изменить пул узлов, чтобы использовать виртуальные машины с большим количеством ЦП, либо увеличить количество узлов в существующем пуле.Вы можете сделать это в консоли GKE или через командную строку gcloud.
  3. Делать явные запросы в ваших контейнерах на меньшее количество ресурсов ЦП, которые переопределяют значения по умолчанию.
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"
...