リソース制限なしのDeployment

コンテナにCPUとメモリのリソースリクエストと制限が設定されていないKubernetes Deploymentマニフェストを検証します。リソース制限が重要な理由を学びます。

Resource Management

詳細な説明

Kubernetesでリソース制限が重要な理由

最も一般的なKubernetesの設定ミスの1つは、リソースリクエストと制限なしでコンテナをデプロイすることです。これらのフィールドを省略すると、コンテナはノード上のCPUとメモリを無制限に消費でき、他のワークロードを劣化させる「ノイジーネイバー」問題を引き起こします。

リソース制限のないマニフェスト例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:1.25
          ports:
            - containerPort: 80

バリデーターが検出する問題

  • 警告: コンテナ 'web' にリソースリクエストと制限が定義されていません
  • 警告: livenessProbeが定義されていません
  • 情報: readinessProbeが定義されていません
  • 警告: securityContext.runAsNonRootが設定されていません

修正方法

すべてのコンテナにresourcesを追加します:

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: 500m
    memory: 256Mi

リソース制限なしの影響

シナリオ 制限なし 制限あり
メモリリーク 他のPodをOOMKill リークしているPodのみ終了
CPUスパイク 隣接Podのリソースを枯渇 制限まで抑制
スケジューリング リソース保証なし スケジューラが正しく配置
クラスターオートスケーリング 必要容量を計算不能 正確なスケーリング判断

適切なリクエストと制限の設定は本番ワークロードに不可欠です。リクエストはスケジューリングを決定し、制限はリソース枯渇を防止します。

ユースケース

すべてのコンテナに適切なリソース制約があることを確認するために、本番クラスターに適用する前にDeploymentマニフェストをレビューする。インフラ変更のコードレビュー時に重要。

試してみる — K8s Manifest Validator

フルツールを開く