2021年10月27日水曜日

スケジューリング for k8s

マニュフェストにPodを、Nodeにlabelを付与して
対象のlabelのNodeに手動でスケジューリングを行うことができる。

メモ:
手動でスケジュールを行わ無い場合(デフォルトの状態)は、コントロールプレイン側で
ラウンドロビン形式でPodを割り振る形になっている。


以下のスケジュリングするパターンがある。


■nodeSelector              (簡易版:特定のNodeだけにPodを割り当てる)

■Node Affinity               (条件に一致したラベルが付与されたNodeにPodを割り当てる)

■Inter-Pod Affinity         (特定のPodがいる[ドメイン:ノード、ゾーン、etc]上で、実行)



1)以下のコマンドで、各種Nodeに標準で割り振られているタグを確認してみる。

kubectl get node -o json | jq ".items[] | .metadata.labels"



















2)Nodeにラベルを手動で付与します。


例:

kubectl label node Node名 label=値 label=値 label名=値

(ちなみに、label名も適当に決めることができる)





3)以下のコマンドで、各種Nodeのdisk type, disk size, cpu typeの付与したタグを確認できる。


kubectl -L=disktype,cputype,disksize get node

(以下、付与したラベルが表示されていることが確認できる)






1)マニュフェストを作成して実行する

(DISTYPE:sd-cardのラベルが付与しているnode2にスケジュールを行ってみる)





































2)デプロイ後、確認してみると対象のNode(node2)にスケジュールされてることが把握できる。




■Node Affinity


以下のポリシーを指定する必要がある。

①requiredDuringSchedulingIgnoredDuringExecution    (必須のスケジューリング)

②preferredDuringSchedulingIgnoredDuringExecution   (優先的に考慮されるスケジューリング)


以下の条件にしてみる。

必須条件:sd-card

優先条件:rasp-node2.local






マニュフェストを作成して実行する


<メモ>

weight: 

複数の優先順位を記載するときに”重み”と”適応順位”を決められる。


operator:

以下のkeyラベルの値の条件を指定してます。

①In                       : ラベルの値のいずれか一つ以上と一致する

基本的に、Inを多様するパターンが多いような気がする。

②NotIn                 : ラベルの値のいずれにも一致しない

Inの逆パターンで利用することもアリかも。

③Exists                : ラベルが存在する

④DoesNotExists : ラベルが存在しない

⑤Gt                      : ラベルAの値がBよりも大きい

例:Nodeのdisk 残量を考慮してPodをスケジュールするのみ良いかも。

⑥Lt                       : ラベルAの値がBよりも小さい

例:NodeCPUリソースを考慮してPodをスケジュールするのみ良いかも。


































以下、確認してみると、必須条件と、優先条件で割り当てていることが把握できる。




メモ:

上記、仮にnode2がダウンした場合、必須条件(sd-card)で割り当てているNode(rasp-node1)にスケジュールされる。



その他検証(1):

ちなみに、マッチしない、必須条件、優先条件を入れてデプロイするとpendingのままになる。

(以下のようにaffinity関連のエラーが出る)


























その他検証(2):

必須条件が一致していて、優先条件が合わない場合でデプロイした場合でも

Podのスケージュリングを行ってくれる。




■Inter-Pod Affinity

特定のPodが実行されているドメイン(ノード、ゾーン、etc)上へPodをスケジューリングする仕組み



0 件のコメント:

コメントを投稿

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...