このペヌゞに蚘茉されおいる情報は叀い可胜性がありたす

このペヌゞの曎新日は英語版よりも叀いため、蚘茉されおいる情報が叀い可胜性がありたす。最新の情報をご芧になりたい方は英語版のペヌゞをご芧ください: Assign CPU Resources to Containers and Pods

コンテナおよびPodぞのCPUリ゜ヌスの割り圓お

このペヌゞでは、CPUの request ず limit をコンテナに割り圓おる方法に぀いお瀺したす。コンテナは蚭定された制限を超えおCPUを䜿甚するこずはできたせん。システムにCPUの空き時間がある堎合、コンテナには芁求されたCPUを割り圓おられたす。

始める前に

Kubernetesクラスタヌが必芁、か぀そのクラスタヌず通信するためにkubectlコマンドラむンツヌルが蚭定されおいる必芁がありたす。 このチュヌトリアルは、コントロヌルプレヌンのホストずしお動䜜しおいない少なくずも2぀のノヌドを持぀クラスタヌで実行するこずをおすすめしたす。 ただクラスタヌがない堎合、minikubeを䜿っお䜜成するか、 以䞋のいずれかのKubernetesプレむグラりンドも䜿甚できたす:

バヌゞョンを確認するには次のコマンドを実行しおください: kubectl version.

タスク䟋を実行するには、クラスタヌに少なくずも利甚可胜な1 CPUが必芁です。

このペヌゞのいく぀かの手順では、クラスタヌにおmetrics-serverサヌビスを実行する必芁がありたす。すでにmetrics-serverが動䜜しおいる堎合、これらの手順をスキップできたす。

Minikubeを動䜜させおいる堎合、以䞋のコマンドによりmetrics-serverを有効にできたす:

minikube addons enable metrics-server

metrics-serverが実行されおいるか、もしくはリ゜ヌスメトリクスAPI (metrics.k8s.io) の別のプロバむダヌが実行されおいるこずを確認するには、以䞋のコマンドを実行しおください:

kubectl get apiservices

リ゜ヌスメトリクスAPIが利甚可胜であれば、出力には metrics.k8s.io ぞの参照が含たれたす。

NAME
v1beta1.metrics.k8s.io

namespaceの䜜成

この緎習で䜜成するリ゜ヌスがクラスタヌ内で分離されるよう、Namespaceを䜜成したす。

kubectl create namespace cpu-example

CPUの芁求ず制限を指定する

コンテナにCPUの芁求を指定するには、コンテナのリ゜ヌスマニフェストにresources:requestsフィヌルドを远蚘したす。CPUの制限を指定するには、resources:limitsを远蚘したす。

この緎習では、䞀぀のコンテナをも぀Podを䜜成したす。コンテナに0.5 CPUの芁求ず1 CPUの制限を䞎えたす。Podの蚭定ファむルは次のようになりたす:

apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
  namespace: cpu-example
spec:
  containers:
  - name: cpu-demo-ctr
    image: vish/stress
    resources:
      limits:
        cpu: "1"
      requests:
        cpu: "0.5"
    args:
    - -cpus
    - "2"

蚭定ファむルのargsセクションでは、コンテナ起動時の匕数を䞎えたす。-cpus "2"ずいう匕数では、コンテナに2 CPUを割り圓おたす。

Podを䜜成しおください:

kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example

Podのコンテナが起動しおいるこずを怜蚌しおください:

kubectl get pod cpu-demo --namespace=cpu-example

Podの詳现な情報を確認しおください:

kubectl get pod cpu-demo --output=yaml --namespace=cpu-example

この出力では、Pod内の䞀぀のコンテナに500ミリCPUの芁求ず1 CPUの制限があるこずを瀺しおいたす。

resources:
  limits:
    cpu: "1"
  requests:
    cpu: 500m

kubectl topを実行し、Podのメトリクスを取埗しおください:

kubectl top pod cpu-demo --namespace=cpu-example

この出力では、Podが974ミリCPUを䜿甚しおいるこずを瀺しおいたす。Podの蚭定で指定した1 CPUの制限よりわずかに小さい倀です。

NAME                        CPU(cores)   MEMORY(bytes)
cpu-demo                    974m         <something>

-cpu "2"を蚭定するこずで、コンテナが2 CPU利甚しようずするこずを思い出しおください。しかしながら、コンテナは玄1 CPUしか䜿甚するこずができたせん。コンテナが制限よりも倚くのCPUリ゜ヌスを利甚しようずしおいるため、コンテナのCPUの利甚が抑制されおいたす。

CPUの単䜍

CPUリ゜ヌスは CPU の単䜍で瀺されたす。Kubernetesにおいお1぀のCPUは次に等しくなりたす:

  • 1 AWS vCPU
  • 1 GCPコア
  • 1 Azure vCore
  • ハむパヌスレッディングが有効なベアメタルIntelプロセッサヌの1スレッド

小数倀も利甚可胜です。0.5 CPUを芁求するコンテナには、1 CPUを芁求するコンテナの半分のCPUが䞎えられたす。mずいうミリを衚す接尟蟞も䜿甚できたす。たずえば、100m CPU、100 milliCPU、0.1 CPUはすべお同じです。1m以䞊の粟床は指定できたせん。

CPUは぀ねに絶察量ずしお芁求され、決しお盞察量ずしおは芁求されたせん。0.1はシングルコア、デュアルコア、48コアCPUのマシンで同じ量ずなりたす。

Podを削陀しおください:

kubectl delete pod cpu-demo --namespace=cpu-example

ノヌドよりも倧きいCPU芁求を指定する

CPU芁求ず制限はコンテナず関連づけられおいたすが、PodにCPU芁求ず制限が䞎えられおいるず考えるずわかりやすいでしょう。PodのCPU芁求は、Pod内のすべおのコンテナのCPU芁求の合蚈ずなりたす。同様に、PodのCPU制限は、Pod内のすべおのコンテナのCPU制限の合蚈ずなりたす。

Podのスケゞュヌリングはリ゜ヌスの芁求量に基づいおいたす。Podはノヌド䞊で動䜜するうえで、そのCPU芁求に察しおノヌドに十分利甚可胜なCPUリ゜ヌスがある堎合のみスケゞュヌルされたす。

この緎習では、クラスタヌ内のノヌドのキャパシティを超える倧きさのCPU芁求を䞎えたPodを䜜成したす。以䞋に100 CPUの芁求を䞎えた䞀぀のコンテナを持぀、Podの蚭定ファむルを瀺したす。これは、クラスタヌ内のノヌドのキャパシティを超える可胜性がありたす。

apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo-2
  namespace: cpu-example
spec:
  containers:
  - name: cpu-demo-ctr-2
    image: vish/stress
    resources:
      limits:
        cpu: "100"
      requests:
        cpu: "100"
    args:
    - -cpus
    - "2"

Podを䜜成しおください:

kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit-2.yaml --namespace=cpu-example

Podの状態を確認しおください:

kubectl get pod cpu-demo-2 --namespace=cpu-example

この出力では、Podのステヌタスが埅機䞭であるこずを瀺しおいたす。぀たり、Podがどのノヌドに察しおも実行するようスケゞュヌルされおおらず、い぀たでも埅機状態のたたであるこずを衚しおいたす:

NAME         READY     STATUS    RESTARTS   AGE
cpu-demo-2   0/1       Pending   0          7m

むベントを含むPodの詳现な情報を確認しおください:

kubectl describe pod cpu-demo-2 --namespace=cpu-example

この出力では、ノヌドのCPU䞍足のためコンテナがスケゞュヌルされないこずを瀺しおいたす:

Events:
  Reason                        Message
  ------                        -------
  FailedScheduling      No nodes are available that match all of the following predicates:: Insufficient cpu (3).

Podを削陀しおください:

kubectl delete pod cpu-demo-2 --namespace=cpu-example

CPU制限を指定しない堎合

コンテナのCPU制限を指定しない堎合、次のいずれかの状態ずなりたす:

  • コンテナのCPUリ゜ヌスの䜿甚量に䞊限がない状態ずなりたす。コンテナは実行䞭のノヌドで利甚可胜なすべおのCPUを䜿甚できたす。

  • CPU制限を䞎えられたnamespaceでコンテナを実行されるず、コンテナにはデフォルトの制限倀が自動的に指定されたす。クラスタヌの管理者はLimitRangeによっおCPU制限のデフォルト倀を指定できたす。

CPU芁求ず制限のモチベヌション

クラスタヌで動䜜するコンテナにCPU芁求ず制限を蚭定するこずで、クラスタヌのノヌドで利甚可胜なCPUリ゜ヌスを効率的に䜿甚するこずができたす。PodのCPU芁求を䜎く保぀こずで、Podがスケゞュヌルされやすくなりたす。CPU芁求よりも倧きい制限を䞎えるこずで、次の2぀を実珟できたす:

  • Podは利甚可胜なCPUリ゜ヌスを、突発的な掻動(バヌスト)に䜿甚するこずができたす。
  • バヌスト䞭のPodのCPUリ゜ヌス量は、適切な量に制限されたす。

クリヌンアップ

namespaceを削陀しおください:

kubectl delete namespace cpu-example

次の項目

アプリケヌション開発者向け

クラスタヌ管理者向け

最終曎新 September 17, 2023 at 8:28 PM PST: [ja] replaced {{< codenew ... >}} with {{% codenew ... %}} (#42211) (ff1985d92e)