広告

kubernetes – ResourceQuota

infrastructure as code

ResourceQuota

k8sでは、Namespaceという仮想環境を分けるための仕組みがあります。
Namespaceごとにリソースの制限を掛けれないと、Namespaceどうしがリソースの奪い合いをすることになってしまいます。
今回はNamespaceのリソース制限について、ご紹介していこうと思います。

ResourceQuotaとは

manifestのリソース指定:
kind: ResourceQuota
metadata.namespace

By 公式ドキュメント

A resource quota, defined by a ResourceQuota object, provides constraints that limit aggregate resource consumption per namespace. It can limit the quantity of objects that can be created in a namespace by type, as well as the total amount of compute resources that may be consumed by resources in that project.

ResourceQuotaは、Namespaceごとに、すべてのリソースに対して制限を事前に決めるためのリソースです。
ResourceQuotaがない場合、Namespaceに対して、リソースの制限はありません。

簡単な例というと、default Namespaceに対して、Podは最大15000個しか作れない

制限可能なものは大まか以下2種類

  • 作成可能なリソース数の制限
  • リソース使用量の制限

ResourceQuotaの例

GKEでは、defaultにはデフォルトで以下のResourceQuotaが定義されています。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: gke-resource-quotas
  namespace: default
spec:
  hard:
    count/ingresses.extensions: 100k  # count/<resource>.<group>に対しての上限値を定義
    count/jobs.batch: 50k
    pods: 15k  # リソースの数に対しての制限
    services: 5k

制限可能項目

k8sのResourceQuotaには、Namespaceに以下の制限を掛けることが可能です。

  • Namespaceのリソース数の制限
    • configmaps
    • persistentvolumeclaims
    • pods
    • replicationcontrollers
    • resourcequotas
    • services
    • services.loadbalancers
    • services.nodeports
    • secrets
  • Namespaceの合計Limit
    • limits.cpu
    • limits.memory
  • Namespaceの合計Request
    • requests.cpu
    • requests.memory
  • Namespaceのストレージ制限
    • requests.storage
    • persistentvolumeclaims
    • .storageclass.storage.k8s.io/requests.storage
    • .storageclass.storage.k8s.io/persistentvolumeclaims

また、k8sバージョン1.9 以降で、以下のような書き方もサポートするようになりました。

  • 新記法:count/.
    • count/persistentvolumeclaims
    • count/services
    • count/secrets
    • count/configmaps
    • count/replicationcontrollers
    • count/deployments.apps
    • count/replicasets.apps
    • count/statefulsets.apps
    • count/jobs.batch
    • count/cronjobs.batch
    • count/deployments.extensions

最後に

今回でk8sのリソース制限についての紹介が終わりました。
k8sのリソースを掛けることで、リソースの有効利用やリソース間のリソースの奪い合いを防ぐことが可能になります。
実際の要件に合わせて、設計したほうがいいかと思います。

ここまで読んでいただいて、お疲れ様でした。

コメント

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