kubernetes pod limit requestリソース制限


一、kubernetersにおけるRequestとLimit制限方式の説明
Request:コンテナ使用の最小リソース需要は,コンテナスケジューリング時のリソース割当の判断に依存する.コンテナをノードにスケジュールできるのは、ノードに割り当て可能なリソース量>=コンテナリソース要求数のみです.ただし、Requestパラメータはコンテナの最大使用可能リソースを制限しません.
Limit:コンテナがリソースを使用できるリソースの最大値を0に設定すると、使用リソースに上限がないことを示します.
RequestはPodが実行するのに十分なリソースがあることを保証し、LimitはあるPodが無制限にリソースを使用し、他のPodがクラッシュすることを防止する.両者の間には、0<=Request<=Limit<=Infinity(Limitが0の場合はリソースを制限しない場合、Requestより小さくすることができます)の関係を満たす必要があります.
リソース要件(Requests)と制限(Limits)
各リソースについてcontainerは、0からnodeノードの最大構成であるリクエストおよび制限(limits)を指定し、limitsのリクエスト範囲はrequestsから無限、すなわち0<=requests<=Node Allocatable、requests<=limits<=Infinityです.
CPUの場合、podのサービスでCPUが設定したlimitsを超えた場合、podはkillに落とされないが制限される.limitsが設定されていない場合、podはすべての空きcpuリソースを使用できます.
メモリの場合、podが設定したlimitsを超えてメモリを使用すると、podのcontainerのプロセスはkernelによってOOM killによって削除されます.containerがOOMのためにkillによって削除されると、システムは、元のマシン上でcontainerまたはネイティブまたは他のpodを再起動する傾向があります.
QoS分類
KubeletはQoSサービス品質管理を提供し、システムレベルのOOM制御をサポートする.Kubernetesでは、podのQoSレベルは、Guaranteed、Burstable、Best-Effortを含む.各レベルについて説明します.
Guaranteed:podのすべてのコンテナはcpuとmemoryに対してlimitsを同時に設定する必要があります.requestsを設定するコンテナがある場合、すべてのコンテナが設定され、設定パラメータがlimitsと一致すると、このpodのQoSはGuaranteedレベルになります.注意:1つのコンテナがlimitのみを指定し、requestが設定されていない場合、requestの値はlimitの値に等しくなります.
Guaranteed例1:コンテナはlimitsのみを示し、requestsは示さない).
containers:
name: foo
resources:
  limits:
    cpu: 10m
    memory: 1Gi
name: bar
resources:
  limits:
    cpu: 100m
    memory: 100Mi

Guaranteedの例2:requestsとlimitはいずれも指定され、値は等しい.
containers:
name: foo
resources:
  limits:
    cpu: 10m
    memory: 1Gi
  requests:
    cpu: 10m
    memory: 1Gi

name: bar
resources:
  limits:
    cpu: 100m
    memory: 100Mi
  requests:
    cpu: 100m
    memory: 100Mi

Burstable:podには1つの容器のrequestsとlimitsの設定が異なる限り、そのpodのQoSはBurstableとなる.例を次に示します.
Container barはresourcesを指定していません
containers:
name: foo
resources:
  limits:
    cpu: 10m
    memory: 1Gi
  requests:
    cpu: 10m
    memory: 1Gi

name: bar

Burstableの例2:podでは、cpuまたはmemoryのrequestおよびlimitsに対して明示的に指定されていないコンテナが1つある限り.
containers:
name: foo
resources:
  limits:
    memory: 1Gi

name: bar
resources:
  limits:
    cpu: 100m

Burstable例3:Container fooはlimitsを設定していないが、bar requestsとlimitsは設定していない.
containers:
name: foo
resources:
  requests:
    cpu: 10m
    memory: 1Gi  
name: bar

Best-Effort:requestsとlimitsがすべてのresourcesに対して設定されていない場合、podのQoSはBest-Effortとなります.例を次に示します.
containers:
name: foo
resources:
name: bar
resources:

圧縮可能リソースと非圧縮リソース
Kubernetesは,資源が伸縮できるか否かによって分類され,圧縮可能資源と非圧縮可能資源の2種類に分類される.CPUリソースは現在サポートされている圧縮可能なリソースであり、メモリリソースとディスクリソースは現在サポートされている非圧縮リソースである.
QoS優先度
3種類のQoS優先度が低いから高い(左から右へ):
Best-Effort pods -> Burstable pods -> Guaranteed pods
静的pod
Kubernetesには、api serverの介入を必要とせずにノード上で実行できるDaemonSetタイプpodがあります.静的podはRCを関連付ける必要もなく、完全にkubeletサービスによって監視され、kubeletが静的podの停止を発見すると、kubeletは静的podを再起動します.
この文書はリンクから作成されます.https://www.jianshu.com/p/4c0763967b3c
Kubernetesリソース割り当てのRequestとLimit解析リンクを参照https://www.cnblogs.com/robinunix/articles/11413059.html
例:
Containers:
  cloud-gateway:
    Container ID:   docker://3ea58021ffef1416d508008a606e601234fe436ed600b36db4eb7b5fe729e861
    Image:          registry.cn-hangzhou.aliyuncs.com/fugle/cloud_gateway:2004101448
    Image ID:       docker-pullable://registry.cn-hangzhou.aliyuncs.com/fugle/cloud_gateway@sha256:c304c42e65dc3503131eda462ea05c49a7726ca1028c7b087419b87146496801
    Port:           
    Host Port:     
    State:          Running
      Started:      Thu, 30 Jul 2020 15:08:09 +0800
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:  4
    Requests:
      cpu:  1
    Environment:
      JAVA_OPTS:  -Xms1024m -Xmx1024m -Xmn512m -XX:+UseConcMarkSweepGC -Dahas.namespace=default -Dproject.name=gateway-test -Drap.redis.server=r-bp1usanbbv4xldesxy.redis.rds.aliyuncs.com:6379 -Drap.redis.auth.password=GqdLSFUhnm6MpyeVKIu3 -Dspring.cloud.nacos.config.endpoint=addr-hz-internal.edas.aliyun.com -Dspring.cloud.nacos.config.access-key=LTAI4FouGjrhSaYJQx8v1icq -Dspring.cloud.nacos.config.secret-key=1zoLwDHTojELEVWmHaCzQFD58NcsIJ -Dspring.cloud.nacos.config.namespace=49e95a77-24e3-4b2a-b657-4d51463da9d0 -Dspring.cloud.nacos.config.file-extension=yaml -Dspring.application.name=gateway-test -Dspring.security.user.password=chrdwhdhxt -Dspring.profiles.active=test -Drap.cloud.gateway.test.enable=true -Drap.cloud.gateway.test.server=https://grafana-test.dingtax.cn -Dfile.encoding=utf-8
    Mounts:
     /var/run/secrets/kubernetes.io/serviceaccount from default-token-56rxd (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-56rxd:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-56rxd
    Optional:    false
QoS Class:       Burstable
Node-Selectors: 
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events: