2026年7月10日
2026年7月10日
Kubernetesのリソース制限(requests/limits)を設定する方法
はじめに
Kubernetesでは、Podのリソース利用を制御するためにrequestsとlimitsという2つの概念が用いられます。これらは、クラスター全体のリソース管理やパフォーマンス最適化に重要で、特に高度な負荷状況下でも安定したサービス提供を可能にします。
症状・背景
このテーマが必要になる主な場面:
- リソース競合が発生し、一部のPodが不正にリソースを使用している。
- クラスターのパフォーマンスが低下し、サービスの可用性や一貫性が確保できていない。
- デプロイメントを自動化する際、適切なリソース要求と制限を設定したい。
手順・設定方法
ステップ1: リソース要件を定義
# まず、Podが必要とする最低限のリソース量と最大利用可能リソース量を決定します。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
cpu: "200m"
memory: 512Mi
requests:
cpu: "100m"
memory: 256Mi
ステップ2: デプロイメントにリソース制限を適用
# DeploymentでPodのリソース制限を設定します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
cpu: "200m"
memory: 512Mi
requests:
cpu: "100m"
memory: 256Mi
ステップ3: ノードのリソース制限を設定
# 設定したリソース制限がノードに適切に適用されるよう、必要に応じてノードレベルでの制限も考慮します。
apiVersion: node.k8s.io/v1
kind: ResourceQuota
metadata:
name: cpu-memory-quota
spec:
hard:
pods/limit: "3"
requests.cpu: "200m"
limits.cpu: "400m"
requests.memory: 512Mi
limits.memory: 1Gi
ステップ4: 実践とトラブルシュート
# デプロイメントを適用し、Podが正常に起動していることを確認します。
kubectl apply -f pod.yaml
kubectl get pods
# リソース制限の効果を監視するために、kube-state-metricsやPrometheusなどのツールを利用します。
kubectl top pod nginx-pod
注意事項
requestsはPodが最低でもどの程度のリソースを必要とするかを定義し、システムがPodをスケジューリングする際の参考となります。limitsはPodが最大でどの程度のリソースを使用できるかを制限します。これにより、不正なリソース消費を防止できます。requestsとlimitsの差(余裕)が大きい場合は、システムのパフォーマンス管理に優れた柔軟性を提供します。
まとめ
1. リソース制限の設定: PodやDeploymentでresourcesセクションを使ってrequestsとlimitsを定義します。
2. ノードレベルでの制約: ノード全体のリソース利用を制御するために、ResourceQuotaオブジェクトを使用します。
3. 監視とトラブルシュート: kubectl top podコマンドやPrometheusなどのツールを使ってリソース使用状況を定期的に確認します。
関連記事: