0
0

More than 1 year has passed since last update.

EKS PodがOOMKilledでクラッシュする

Posted at

はじめに

AWS EKSでk8sの勉強用でクラスタを立て、マイクロサービスアプリをデプロイした時に遭遇したエラー。

忙しい人用

ソース:ノードよりも大きいメモリー要求を指定する
要約してもそのままな気がするが、OOM(Out Of Memory)によってPodが不健全な状態のため強制終了と再起動が繰り返される。
そのためPodのリソースリクエスト量を増やす必要があるが、ノードのキャパシティを超えるようなリクエストをしてしまうとPodがスケジュールされないので要注意!

このエラーの見つけ方

kubectl describe pod xxxxxxを実行したときにReason:に表示される。
kubectl get pod実行時のSTATUS列を見る。
この辺りで十分かなと思います。

スペック

EKSをEC2でホストし、podのマニフェストは以下のようになっています。
このくらいでいいかー。とてきとうにリソースリクエストを書いたのが悪かったです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample
  labels:
    app: react
spec:
  replicas: 1
  selector:
    matchLabels:
      app:react
    spec:
      container:
      - name: react
        image: xxxxxxxxx:tag
        ports:
        - containerPort: 8000
        resources:
          requests:
            memory: 256Mi
            cpu: 250m
          limits:
            memory: 512Mi
            cpu: 500m

対策

  • Podのスペックをあげる(足りなければノードに追加のリソースを与える or ノードの追加)
  • 今回EKSをEC2でホストしているが、Fargateに変える。(limitを設けるなどすればコストの急増を抑制できる気が。)
    予測可能なキャパシティであれば、ResourceQuotasを使うと管理面で便利かも。

今回は練習のためリクエスト量を直に増やす。
ノードのスペックとサービスに必要なスペックを考慮する。(過剰なリクエストは控える。)

~~~~~~~~~~~~~~
~~~~~~~~~~~~~~
    spec:
      container:
      - name: react
        image: xxxxxxxxx:tag
        ports:
        - containerPort: 8000
        resources:
          requests:
            memory: 1024Mi   # 256Mi -> 1024Mi
            cpu: 500m        # 250m  -> 500m
          limits:
            memory: 2048Mi   # 512Mi -> 2048
            cpu: 1000m       # 500m  -> 1000m
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0