リソース制限なしの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マニフェストをレビューする。インフラ変更のコードレビュー時に重要。