达到内存限制后崩溃时 pod 不会自动重新启动

din*_*ina 2 kubernetes google-kubernetes-engine

我在 GKE 上运行我的 Elixir 应用

这是我的部署配置:

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
Run Code Online (Sandbox Code Playgroud)

正如您在图像中看到的,pod 达到了其内存限制并崩溃了 荚

这些是我最后的日志:

erl_child_setup closed

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

Shutting down..

Node is not running!
Run Code Online (Sandbox Code Playgroud)

然后我的应用程序被冻结,我在尝试请求应用程序时收到 502,

为了重新启动,我重新启动了 pod(kubectl delete pod),然后它再次运行,

我的问题是:当达到内存限制时,为什么 pod 不会自动重启?

Raw*_*ode 5

您需要添加探针来检查您的应用程序是否健康。

由于您提到了 a 502,我假设这是一个 Phoenix 应用程序,您可以添加一个运行状况检查端点:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3
Run Code Online (Sandbox Code Playgroud)

当此请求停止接收 时200,Kubernetes 控制器将重新启动您的 pod。