модуль не перезапускается автоматически при сбое после достижения предела памяти - PullRequest
0 голосов
/ 17 декабря 2018

Я запускаю мое приложение elixir на GKE

. Вот моя конфигурация развертывания:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp
  namespace: production
spec:
  replicas: 1
  revisionHistoryLimit: 1
  strategy:
      type: RollingUpdate
  template:
    metadata:
      labels:
        app: myapp
        tier: backend
    spec:
      securityContext:
        runAsUser: 0
        runAsNonRoot: false
      containers:
      - name: myapp
        image: myimage
        resources:
          limits:
            cpu: 3000m
            memory: 2000Mi
          requests:
            cpu: 2500m
            memory: 1000Mi
        ports:
        - containerPort: 80
        args:
          - foreground

, как вы можете видеть на изображении, модуль достиг своего предела памяти и потерпел крах pod

это мои последние журналы:

erl_child_setup closed

Crash dump is being written to: erl_crash.dump...done

Shutting down..

Node is not running!

и затем мое приложение зависло, я получаю 502 при попытке запросить приложение,

Чтобы перезапустить, я перезапускаю модуль (модуль удаления kubectl), а затем он запускается снова,

У меня вопрос: почему модуль не перезапускается автоматически, когда достигает предела памяти?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вы также можете использовать триггер памяти или процессора, как подробно описано здесь: https://blog.powerupcloud.com/autoscaling-based-on-cpu-memory-in-kubernetes-part-ii-fe2e495bddd4

См. Также https://medium.com/retailmenot-engineering/what-happens-when-a-kubernetes-pod-uses-too-much-memory-or-too-much-cpu-82165022f489.

0 голосов
/ 17 декабря 2018

Вам нужно будет добавить пробники, которые будут проверять работоспособность вашего приложения.

Поскольку вы упомянули 502, я предполагаю, что это приложение Phoenix, и вы можете добавить проверку работоспособностиконечная точка:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3

Когда этот запрос перестает получать 200, контроллер Kubernetes перезапустит ваш модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...