Kubernetesでのコンテナリソース制限の仕組み

Sep 04 2020

ここの公式ドキュメントでは、pod.spec.container.resources.limitsは次のように定義されています。「制限は、許可されるコンピューティングリソースの最大量を表します。」

k8sは、ポッドが制限で指定されているよりも多くのリソースを消費することを禁止していることを理解しています。ドキュメントには、制限で指定されたリソースの量がないノードでポッドがスケジュールされていないとは記載されていません。

たとえば、クラスター内の各ノードに2つのCPUがあり、CPU制限を3に定義するポッドをデプロイしようとすると、ポッドは実行されず、ステータスになりますPending。

テンプレートの例を次に示します:mypod.yml

apiVersion: v1
kind: Pod
metadata:
  name: secondbug
spec:
  containers:
  - name: container
    image: nginx
    resources:
      limits:
        cpu: 3

この動作は意図されたものであり、その理由は何ですか?

回答

3 paltaa Sep 04 2020 at 01:02

3種類のポッド、リクエスト定義のないポッド、制限とリクエストがあるバースト可能なポッド、制限またはリクエストのみが定義されている3番目の種類のポッドがあります。

3番目のケースでは、制限または要求のみを定義する場合、もう1つは、最初の1つが意味するものによって定義されます。

resources:
  limits:
    cpu: 3

実際には:

resources:
  limits:
    cpu: 3
  requests:
    cpu: 3

したがって、実際には、一方だけを他方なしで定義することはできません。したがって、あなたの場合、制限によって定義されないように、その要求を定義する必要があります。