KubernetesにおけるLimitRangeによるリソース制御

LimitRangeによるリソース制約の管理

KubernetesではデフォルトでPodにCPUやメモリの制限を設けていないため、ノードの全リソースを消費可能です。多数のPodが存在する環境で個別にリソース制限を設定しない場合、クラスター全体で以下のような制約を適用できます:

  • 2GBメモリのノードで単一Podが2GBを超えないように制限
  • 異なるNamespaceで開発環境(512MB上限)と本番環境(8GB上限)を分離
  • リソース分散のためPodごとに平均20%以上のリソース使用を強制

LimitRange設定例

1. Namespace作成

kubectl create namespace resource-constraints

2. LimitRange定義

apiVersion: v1
kind: LimitRange
metadata:
  name: resource-limiter
spec:
  limits:
  - type: Pod
    max:
      cpu: "2"
      memory: 1Gi
    min:
      cpu: 100m
      memory: 4Mi
    maxLimitRequestRatio:
      cpu: 4
      memory: 3
  - type: Container
    default:
      cpu: 250m
      memory: 150Mi
    defaultRequest:
      cpu: 150m
      memory: 75Mi
    max:
      cpu: "1.5"
      memory: 800Mi
    min:
      cpu: 50m
      memory: 2Mi
    maxLimitRequestRatio:
      cpu: 6
      memory: 5

設定パラメータの解釈

スコープ パラメータ 意味
Container min 全コンテナのRequests下限値
max 全コンテナのLimits上限値
defaultRequest 未指定時のデフォルトRequests
default 未指定時のデフォルトLimits
maxLimitRequestRatio Limits/Requests比率上限
Pod min 全コンテナRequests合計の下限
max 全コンテナLimits合計の上限
maxLimitRequestRatio 合計値の比率上限

パラメータ間の関係: min ≤ defaultRequest ≤ default ≤ max

検証動作

制約違反Podの作成例:

apiVersion: v1
kind: Pod
metadata:
  name: invalid-resource-pod
spec:
  containers:
  - name: web-server
    image: nginx:latest
    resources:
      limits:
        cpu: "2.0"
        memory: 900Mi

エラーメッセージ:

Error: Pod "invalid-resource-pod" is forbidden:
[Maximum cpu usage per Container is 1.5, but limit is 2.0]

タグ: Kubernetes LimitRange ResourceQuota namespace ContainerResources

6月10日 21:07 投稿