Podはコントロールプレーンのkube-schedulerによって起動するワーカーノードが決められます。
このPodをワーカーノードに割り当てることをK8sではスケジュールといいます。
Podにスケジュール関連のパラメータが設定されていない場合、kube-schedulerはノードの負荷状況などを考慮してスケジュールします。
しかし、どうしても起動先ノードを指定したい場合もあります。(例えば、GPUを使用するPodをGPU搭載のワーカーノードで起動したい場合など)
そのような場合にPodのスケジュール先を指定するもっとも簡単な方法がnodeSelectorです。
-
クラスタの参加ノードを確認し、ワーカーノードが2台以上存在していることを確認してください。
-
ノードに付与されたラベルを表示してください。
-
どれか一台のノードに
node-spec=monsterのラベルを付与してください。 -
他のノードには
node-spec=normalのラベルを付与してください。 -
key:node-specをカラムに追加してノードの一覧で表示してください。一台のノードにmonsterのvalueがあることを確認してください。
-
以下を満たすマニフェストを作成しデプロイしてください。なお、nodeSelectorについては公式ドキュメントを参考にしてください。
- 要件
- Deployment
- 名前は
nginx - replicas:
1 - labelはすべて
app: nginx - Pod
- 名前は
nginx - イメージは
nginx:1.12
- 名前は
- nodeSelector
- ラベル
node-specにvaluemonsterが付与されたノードを指定
- ラベル
- 名前は
- Deployment
- 要件
-
Podリソースの一覧をwideで表示し、Podが
node-spec:monsterのラベルを付与したノードで起動していることを確認してください。 -
Deployment:nginxのPodレプリカ数を10に変更してください。新たに作成されたPodもすべて
node-spec:monsterのラベルを付与したノードで起動していることを確認してください。 -
Deployment:nginxのnodeSelectorをkey
node-specにvaluenormalが付与されたノード指定に変更してください。 -
Podのローリングアップデートが実行され、すべてのPodが
node-spec:normalのラベルを付与したノードで起動していることを確認してください。 -
Deployment:nginxをいったん削除してください。
-
Deployment:nginxのnodeSelectorをkey
node-specにvaluesuperが付与されたノード指定に変更しデプロイしてください。 -
すべてのPodのSTATUSが
Pendingとなることを確認してください。 -
Deployment:nginxを削除してください。
-
ノードに付与されたkey
node-specのラベルを削除してください。
以上で本演習は終了です。
具体的な操作およびその結果に関する回答例はこちらにあります。 具体的な操作方法がわからなかった場合や、想定した結果にならなかった場合などに参照してください。