|
Kubernetesのデフォルトスケジューラは高度に設定可能であるため、多くの場合、スケジューリング動作をカスタマイズするためにコードを記述する必要はありません。しかし、スケジューラの仕組みを理解したい場合や、さらなる開発ニーズがある場合は、独自のスケジューラを開発してみるのも良いでしょう。この記事では、kube-scheduler-simulatorスケジューラシミュレータを用いてスケジューラ開発環境を構築する方法を紹介します。 エミュレータをインストールするまず、クローンエミュレータのコード: $ git clone https://github.com/kubernetes-sigs/kube-scheduler-simulator Web フロントエンドとシミュレーター サーバーのイメージをビルドするには、コマンド `make docker_build_and_up` を実行するだけです。 イメージがビルドされると、`docker-compose up` コマンドを直接使用してエミュレーターを起動できます。 起動後、次に示すように、ブラウザで localhost:3000 経由でエミュレータの Web ページに直接アクセスできます。 このページでは、新しいリソースを作成するためのさまざまな方法が提供されています。例えば、「NEW NODE」ボタンをクリックして新しいノードを作成できます。 「適用」ボタンをクリックするだけでノードを追加できます。ここでは5つのノードを追加しています。次に、同じ方法で「新しいポッド」をクリックして新しいポッドを作成します。これにより、スケジューリングプロセス全体がシミュレートされます。 新しく作成されたポッドは、次のノードの 1 つにスケジュールされました。 ポッドの名前をクリックすると、フィルター フェーズ、スコア フェーズ、最終スコアなど、そのポッドのスケジュール プロセス全体が表示されます。 左上隅にある設定ボタンを直接クリックしてスケジューラを設定できます。これには基本的に、KubeSchedulerConfiguration オブジェクトの変更が含まれます。 使用シミュレータを通してPodのスケジューリングを理解する方法を学びました。では、新しいスケジューラプラグインを開発したい場合、シミュレータとどのように組み合わせればよいでしょうか? ここでは、https://github.com/sanposhiho/mini-kube-scheduler プログラムを例として使用します。このスケジューラは、Podノードのランダム選択を実装しています。 シミュレータでスケジューラを使用するには、次の手順を実行する必要があります。
以下は、主に StartScheduler 関数の変更に焦点を当てた、kube-scheduler-simulator/scheduler/scheduler.go ファイルへの変更です。 パッケージスケジューラ スケジューラを sched := minisched.New(clientSet informerFactory, ) に変更します。これにより、minisched スケジューラのみを使用するようになります。 変更を加えた後、プロジェクトを再コンパイルします。 $ docker_build_and_up を実行します コンパイル後にコンテナを再起動します。 docker-compose アップ 起動後、localhost:3000 経由でエミュレータに再度アクセスできます。これで、エミュレータには minisched スケジューリングアルゴリズムのみが搭載されました。テスト用にいくつかの Pod を作成できます。 以前のスケジューラ ステージは登録されていないため、表示されなくなりました。 例えば、minisched スケジューラのスケジューリングアルゴリズムを、ノードをランダムに選択するのではなく、常に最初のノードを選択するように変更できます。これは、`kube-scheduler-simulator/simulator/minisched/minisched.go` ファイル内の `scheduleOne` 関数を以下のように変更することで実現できます。 同じ変更を加えてコンテナを再コンパイルし、再起動し、エミュレータの Web ページに再度アクセスすると、新しく作成された Pod が常に最初のノードにスケジュールされていることがわかります。 今では、実際の Kubernetes クラスターをまったく必要とせずに、ニーズに応じて独自のスケジューラ アルゴリズムを開発できます。 |