AlloyDB Omni Kubernetes オペレーターでは、スケジューリングは、新しいデータベース Pod をノードにマッチングして、クラスタ全体でノードの分散を均衡化し、パフォーマンスを最適化するプロセスです。Pod とノードは、CPU やメモリなど、複数の条件と使用可能なリソースに基づいてマッチングされます。
スケジューリングの詳細については、Kubernetes ドキュメントのスケジューリング、プリエンプション、エビクションをご覧ください。
このページでは、Kubernetes マニフェストでプライマリ プール インスタンスと読み取りプール インスタンスの Tolerations とノード アフィニティ スケジューリング構成を指定する方法について説明します。
ノードで taint を定義する方法については、Kubernetes ドキュメントの Taints and Tolerations をご覧ください。
許容を指定する
他のアプリケーション Pod が存在しないノードに AlloyDB Omni Pod をスケジュールするか、これらのノードで定義された特定の taint と一致させるには、次のように 1 つ以上の toleration をノードに適用します。
- AlloyDB Omni Kubernetes Operator クラスタのマニフェストを変更して、次のいずれかの
schedulingConfig
セクションにtolerations
セクションを追加します。- プライマリ インスタンスの場合は
primarySpec
- 読み取りプール インスタンスの場合は
spec
tolerations: - key: "TAINT_KEY" operator: "OPERATOR_VALUE" value: "VALUE" effect: "TAINT_EFFECT"
次のように置き換えます。
TAINT_KEY
: ノードのホスト名や、toleration が適用されるローカルで推論された値など、taint キーの既存の一意の名前。taint キーはノードにすでに定義されています。フィールドが空で、OPERATOR_VALUE
がexists
に設定されている場合、toleration はすべての値とすべてのキーと一致する必要があります。OPERATOR_VALUE
: キーと値のセットの関係を表します。パラメータを次のいずれかに設定します。exists
: taint が定義されている場合、Kubernetes は taint の値に関係なく任意の値と一致します。equal
: 値が異なる場合、Kubernetes は Pod をノードにスケジュールしません。この演算子には tainttrue
値が必要です。
VALUE
: toleration が一致する taint 値。演算子が Exists の場合、値は空になります。それ以外の場合は、通常の文字列になります。例:true
TAINT_EFFECT
: 一致する taint の効果を示します。フィールドが空の場合、すべての taint 効果が一致する必要があることを意味します。パラメータを次のいずれかに設定します。NoSchedule
: Kubernetes は、taint が設定されたノードに新しい Pod をスケジュールしません。PreferNoSchedule
: Kubernetes は、必要でない限り、taint が追加されたノードに新しい Pod を配置しません。NoExecute
: Kubernetes は、taint を許容しない既存の Pod を強制排除します。
- プライマリ インスタンスの場合は
- マニフェストを再度適用します。
ノード アフィニティを定義する
Kubernetes スケジューラは、Pod の配置場所を決定するために、ノード アフィニティをルールセットとして使用します。ノード アフィニティは、ノードセレクタのより柔軟で表現力豊かなバージョンです。
データベースの実行にスケジュールする必要があるノードを指定する手順は次のとおりです。
- データベース クラスタ マニフェストを変更して、プライマリ インスタンスの場合は
primarySpec
、読み取りプール インスタンスの場合はspec
のschedulingConfig
セクションのtolerations
セクションの後にnodeaffinity
セクションを追加します。nodeaffinity: NODE_AFFINITY_TYPE: - weight: WAIT_VALUE preference: matchExpressions: - key: LABEL_KEY operator: OPERATOR_VALUE values: - LABEL_KEY_VALUE
次のように置き換えます。
-
NODE_AFFINITY_TYPE
: パラメータを次のいずれかに設定します。requiredDuringSchedulingIgnoredDuringExecution
: Kubernetes は、定義されたルールに基づいて Pod をスケジュールします。preferredDuringSchedulingIgnoredDuringExecution
: Kubernetes スケジューラは、定義されたスケジューリング ルールを満たすノードを探します。ただし、そのようなノードがない場合、Kubernetes はクラスタ内の別のノードにスケジュールします。
WAIT_VALUE
: 指定したノードの優先度重みを示します。値が大きいほど優先度が高くなります。有効な値は1
~100
です。LABEL_KEY
: ロケーション インジケーターとして機能し、クラスタ全体に Pod を均等に分散するキーのノードのラベル。例:disktype=ssd
OPERATOR_VALUE
: キーと値のセットの関係を表します。パラメータを次のいずれかに設定します。-
In
: 値の配列は空でないこと。 -
NotIn
: 値の配列は空でないこと。 -
Exists
: 値の配列は空にする必要があります。 -
DoesNotExist
: 値の配列は空にする必要があります。 -
Gt
: 値の配列には、整数として解釈される要素を 1 つ含める必要があります。 -
Lt
: 値の配列には、整数として解釈される要素を 1 つ含める必要があります。
-
LABEL_KEY_VALUE
: ラベルキーの値。次のように、パラメータを文字列値の配列に設定します。- 演算子が
In
またはNotIn
の場合、値の配列は空でないこと。 - 演算子が
Exists
またはDoesNotExist
の場合、値の配列は空にする必要があります。 - 演算子が
Gt
またはLt
の場合、値の配列には整数として解釈される単一の要素が必要です。
- 演算子が
-
- マニフェストを再度適用します。
例
次の例は、AlloyDB Omni Kubernetes オペレーター プライマリ インスタンスと読み取りプール インスタンスで Pod をスケジュールする方法を示しています。このようなスケジューリングの設定により、データベース クラスタのプライマリ インスタンスが適切なノードにスケジュールされ、ノードの選択に柔軟性を持たせることができます。この柔軟性は、負荷の分散、リソース使用量の最適化、特定のノードロールと特性の遵守に役立ちます。
schedulingconfig:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
nodeaffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
次の詳細により、この toleration の例では、コントロール プレーン ノードとしてマークされているノードで Pod をスケジュールできます。
node-role.kubernetes.io/control-plane
taint キーは、ノードにコントロール プレーン ノードがあることを示します。Exists
演算子は、toleration が値に関係なく、指定された taint キーを持つ任意の taint と一致することを意味します。NoSchedule
の効果は、一致する toleration がなければ、Pod がコントロール プレーン ノードにスケジュールされないことを意味します。
preferredDuringSchedulingIgnoredDuringExecution
ノード アフィニティ タイプは、ノード アフィニティに定義されたルールが優先されることを指定しますが、スケジュール時に必須ではありません。優先ノードが使用できない場合でも、Pod は他のノードにスケジュールされることがあります。1
の重み値は、優先度の低さを示します。ノードの選択条件は preference
セクションで定義されます。matchExpressions
セクションには、ノードとの照合に使用される式の配列が含まれています。another-node-label-key
キーは、一致するノードラベルのキーを表します。In
演算子は、ノードに指定された値のいずれかを含むキーが存在することを意味します。another-node-label-key
キーには another-node-label-value
の値を設定する必要があります。
ノード アフィニティ ルールの例は、another-node-label-value
値の another-node-label-key
ラベルを持つノードで Pod をスケジュールすることを示しています。優先度は低く、必須ではありません。
この例では、次のことを組み合わせています。
NoSchedule
taint を許容して Pod をコントロール プレーン ノードにスケジュールできるようにする toleration。- 特定のラベルを持つノードを優先しますが、厳密に要求するものではないノード アフィニティ。これにより、スケジューリングの柔軟性が向上します。