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のリソースを掛けることで、リソースの有効利用やリソース間のリソースの奪い合いを防ぐことが可能になります。
実際の要件に合わせて、設計したほうがいいかと思います。
ここまで読んでいただいて、お疲れ様でした。
コメント