広告

kubernetes – RequestsとLimits

infrastructure as code

k8sクラスタのcpuやmemoryなどが使われすぎないように、制限を掛ける必要があります。
今回からはリソースの制限方法について、説明していきたいと思います。

リソース制限の概要

k8sでは、制限を掛けられる方法は以下2つです。

  • RequestsとLimits
    • Containerに対するリソース制限
    • リソースのmanifestで定義(spec.containers[].resources)
  • LimitRangeで定義(Namespaceごと)
    • type: Container
    • type: Pod
    • type: PresistentVolumeClaim

RequestsとLimits

Containerの設定項目に、リソース制限するための項目として。RequestsとLimitsがあります。

  • spec.containers[].resources.requests:使用するリソースの下限を指定する
    • 省略した場合、Requestの値はLimitの値と同じようになる
  • spec.containers[].resources.limits:使用するリソースの上限を指定する

リソース作成する時に、Nodeの残りのリソース量がRequestsより小さい場合、そのNodeには作成されません。
Limitsは違って、リソースが足りなくても、作成されてしまいます。
そのため、RequestsとLimitsの差が大きくなると、Nodeにリソースが足りないのに、Podが作成されてしまい、
結果として、パフォーマンスが悪くなる可能性があります。

k8sでは、RequestsとLimitsの差をできれば小さくするのが推奨しています。

リソースの単位

数値で制限値を定義する場合、制限の単位を知る必要があります。
k8sではmemoryはG(GB)、M(MB)やGi(GiB)、Mi(MiB)など一般的な単位を使っています。
CPUは1vCPUを1/1000にする単位mが用意されています。

リソースの種類 単位
CPU 1 = 1000m
Memory 1G = 1000M
Memory 1Gi = 1024Mi

リソースのmanifestで定義

manifestのコンテナの設定内容の部分で、コンテナそれぞれのリソース制限を掛けることができます。

RequestsとLimitsのmanifest例:

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:  # コンテナの設定
  - name: db  # 1個目のコンテナ
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
    resources:  # 制限の設定
      requests:  # 最小リソース
        memory: "64Mi"  # 注意:設定値は文字列
        cpu: "250m"
      limits:  # 最大リソース
        memory: "128Mi"
        cpu: "500m"
  - name: wp  # 2個目のコンテナ
    image: wordpress
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

※GCPの場合GPUも指定できます。

コメント

タイトルとURLをコピーしました