kubernetesのよくわからんところをわかるようにしていく | リソース管理
RequestとLimitの違いがわからん
Kubernetes best practices: Resource requests and limits
Requests and limits are the mechanisms Kubernetes uses to control resources such as CPU and memory. Requests are what the container is guaranteed to get. If a container requests a resource, Kubernetes will only schedule it on a node that can give it that resource. Limits, on the other hand, make sure a container never goes above a certain value. The container is only allowed to go up to the limit, and then it is restricted.
そもそもノードのリソースの仕組みとしてはこうなっていて、podで使えるのはallocatable resource である
Node Capacity |
---|
kube-reserved |
system-reserved |
eviction-threshold |
allocatable (available for pods) |
podは起動すると負荷に応じてノード側のallocatableなリソースを使えるだけ使おうとする。
そうすると、ノード内に複数のpodがあるとき、pod間でリソースを奪い合い、ノードに余分な負荷がかかる。困ったぞ~~
そこでpodが使えるリソースを制限する仕組みとしてRequestsとLimitsを導入する。
- Requests: podに最低限割り当てられるリソース量。つまりminimum requirement
- Limits: podが使えるリソースの最大値。つまりmaximum
それならminとmaxという名称にすればいいのに
現在の設定の確認方法
ノードの詳細を出力し、Allocated resourcesを確認する
出力例
$ kubectl describe nodes {node} -n {namespace}
:
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1000m (50%) 2 (103%)
memory 512Mi (25%) 1024Mi (50%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
attachable-volumes-aws-ebs 0 0