TechLunch

The free lunch is over.

KubernetesのCPU Managerの解説記事を見て勉強しよう

Kubernetesの公式ブログで、Feature Highlight: CPU Manager - Kubernetes という記事が上がっていました。デファクトのコンテナオーケストレーターであるKubernetesの概要を掴むチャンスですので、概説します。

Kubernetesアーキテクチャ

https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.1/docs/design/architecture.png

そもそもKubernetesはどのようなシステムで構成されているのか疑問に思っている方も多いかと思いますので、Githubに上がっていた図を貼り付けておきます。

CPU Managerは名前から類推されるとおり、controller managerと呼ばれるシステムコンポーネントの一機能となります。

controller managerは、Podのレプリカ数の管理など、コンテナ化されたアプリケーションが正常に動作するためのさまざまな制御機能を有しています。

CPU Manager

When CPU manager is enabled with the “static” policy, it manages a shared pool of CPUs. Initially this shared pool contains all the CPUs in the compute node. When a container with integer CPU request in a Guaranteed pod is created by the Kubelet, CPUs for that container are removed from the shared pool and assigned exclusively for the lifetime of the container. Other containers are migrated off these exclusively allocated CPUs.

簡単に言うと、特定のPodのみがCPUを排他的に利用すること可能となるようです。引用文を読む限り、排他的に割り当てられたCPUを他のPod(コンテナ)は利用することはできなくなるように見えます。

これにより、CPU-intensiveなワークロードは、CPU時間を有効活用することができるため、純粋な処理時間が増えるだけでなく、context switchやcache missによるオーバヘッドも削減することが可能となります。

CPU-intensiveなワークロードって何?と感じるかたもいるかもしれませんが、I/Oが少なく、計算が多く走るような処理のことです。

CPUの配分方法としては、CPU配分をワークロードごとに重み付けをする方法や、スケジューリング期間中にPodに割り当てる実時間を指定する方法などもありますが、CPUを排他的に利用することが可能になれば、複雑なスケジューリングも考える必要がなくなるため、有用な手段と言えるかと思います。

 元記事には性能評価結果も載っているので興味ある方は参照ください。

 

まだbeta featuresのようですが、ワークロードの特性によっては一度試してみたい機能となります。