Kubernetesスケジューラとは?仕組みと2つの設定ポリシーを解説
Kubernetesスケジューラは、オープンソースのコンテナオーケストレーションプラットフォーム「Kubernetes」を構成する中核コンポーネントの一つです。ポリシーとトポロジー認識(topology awareness)に基づいて動作し、システムのパフォーマンス、キャパシティ、可用性を制御する役割を担います。
スケジューラはKubernetesのモノリシックなコンポーネントであり、クラスタを管理するAPIサーバからは分離(デカップリング)された設計になっています。なお、Kubernetes APIへのリクエストを横取りするプラグインコードである「アドミッションコントローラ」とは異なる存在なので、混同しないよう注意が必要です。仮想化環境の管理者にとっては、VMwareのDistributed Resource Scheduler(DRS)のようなVMスケジューリングのコンテナ版と捉えると理解しやすいでしょう。
Kubernetesでは、コンテナは「Pod」と呼ばれる単位にまとめられ、「Node」と呼ばれる論理的なリソースグループ上に配置されます。ワークロード固有の要件はAPI経由で設定され、Kubernetesスケジューラは、作成された各Podに対して、Node上の適切なITリソースとのマッチングを試みます。また、高可用性(HA)が求められる場合には、Podのレプリカを複数のNodeに分散配置させることも可能です。
アフィニティ/アンチアフィニティルールやQoS(Quality of Service)設定など、Podの要件や仕様に合致するハードウェアが見つからない場合、そのPodはスケジュール未決定の状態で保留されます。スケジューラは適切なマシンが利用可能になるまで再試行を繰り返します。
設定ポリシー
Kubernetesスケジューラは、主に2つのポリシー「FitPredicate」と「PriorityFunction」によって設定できます。さらに、Nodeをランダムに選択する方式もサポートされており、これは最小限の計算オーバーヘッドでコンテナをリソースに割り当てる手法です。
FitPredicate
FitPredicateは、必須のルールに従ってフィルタリングを行うポリシーです。Kubernetes Nodeに付与されたラベルの検出や、特定のマシン上で稼働中のコンテナが要求しているリソース量の把握などを通じて、新しいコンテナがハードウェアリソースの容量を超過しないかどうかを判定します。ユーザーがリソース要求をゼロに設定した場合、スケジューラは常にそのNodeへ新たなPodを追加できると判断します。
PriorityFunction
PriorityFunctionは、スケジューラが複数の候補ノードの中から最適なものを選ぶ段階で適用されるポリシーです。Podを配置できる候補が複数見つかった場合、どのマシンが最も適合度が高いかをランキング形式で評価します。例えば、3つのNodeが新しいPodの要件を満たしていたとしても、そのうち1つが他より多くの空きリソースを持っていれば、そのNodeが最良の選択肢として優先されます。
Kubernetes環境において、これら2つのポリシーは複数マシン間でのコンテナワークロードの負荷分散を実現します。特定のマシンだけに高負荷が集中し、他のマシンが遊休状態になるといった非効率を防ぎ、クラスタ全体のリソース利用率を最適化するのです。
-
Windows 10でタスクスケジューラが動作しないときの対処法6選
Microsoft Windowsは非常に大規模なオペレーティングシステムであり、安定した動作を維持するために多くの処理を管理する必要があります。ソフトウェアの更新、エラーチェック、各種コマンドの実行、スクリプトの実行など、ユーザーが手作業で行うには負担が大きいタスクは数多く存在します。そこでWindows OSは、PCがアイドル状態の間にこれらのタスクを処理できるよう、あらかじめ登録されたスケジュールに従って自動的に開始・完了させる仕組みを採用しています。このタスクの予約と管理を担っているのが「タスクスケジューラ」です。 タスクスケジューラとは タスクスケジューラ(Task Schedul
-
タスクスケジューラで起動時や指定時刻にプログラムを自動実行する方法【Windows】
Windowsの起動時や指定した時刻にプログラムを自動的に開始させたい方は、ぜひこのチュートリアルをご覧ください。タスクスケジューラを使った設定手順を、初心者にもわかりやすく解説していきます。 スタートアップフォルダの方法では不十分なケースがある 通常、Windowsのスタートアップにプログラムを追加するには、対象プログラムのショートカットを「スタートアップ」フォルダに置くのが一般的な方法です。しかし、この方法は常に機能するとは限りません。特に、プログラムが管理者権限を必要とする場合には、正しく起動しないことがあります。 この問題を回避するには、レジストリを使ってスタートアップに登録するか、タ