この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です SUSE® Storage 1.12 (Dev).

スケジューリング

SUSE Storageは複数の要因に基づいてレプリカをスケジュールします。

スケジューリングポリシー

SUSE Storageのスケジューリングポリシーは二つの段階があります。スケジューラは、前の段階が満たされている場合にのみ次の段階に進みます。そうでなければ、スケジューリングは失敗します。

スケジューリングのために選択されるように設定されたタグがある場合、ノードタグとディスクタグは、ノードまたはディスクが選択される際に一致する必要があります。

第一段階は*ノードおよびゾーン選択段階*です。SUSE Storageは`Replica Node Level Soft Anti-Affinity`および`Replica Zone Level Soft Anti-Affinity`の設定に基づいてノードとゾーンをフィルタリングします。

第二段階は*ディスク選択段階*です。SUSE Storageは、第一段階を満たすディスクを`Replica Disk Level Soft Anti-Affinity`、Storage Minimal Available PercentageStorage Over Provisioning Percentage、および要求されたディスクスペースのような他のディスク関連要因に基づいてフィルタリングします。

ノードおよびゾーン選択段階

SUSE Storageは、一連の基準に基づいて新しいレプリカのスケジューリングに適したノードを評価します。意思決定プロセスは、耐障害性のための最適な配置を確保するために特定の順序に従います。

1.ノードタグの一致

SUSE Storageはまず、ボリュームのノードセレクタタグを確認します。

  • ボリュームにノードセレクタタグがある場合、一致するタグを持つノードのみが対象となります。

  • ボリュームに*ノードセレクタがない場合*、動作は*空のノードセレクタボリュームを許可する*設定に依存します:

  • true(デフォルト):ノードは、*タグの有無にかかわらず*スケジュールされます。

  • false:ノードは、*タグがない*場合に、*のみ*スケジュールされます。

2.コーディンドノードの取り扱い

*コルドンされたノードでのスケジューリングを無効にする*設定は、コルドンされたノードがレプリカのスケジューリングに適格かどうかを決定します:

  • true(デフォルト):コルドンされたノードは除外されます。

  • false:コルドンされたノードは対象となります。

3.ノードとゾーン間のアンチアフィニティルール

SUSE Storageは、異なる*ノード*と*ゾーン*にレプリカを分散させることを優先し、耐障害性を向上させます。"新しい"*ノードまたはゾーンは、現在ボリュームのレプリカを*ホストしていない*ものであり、"既存の"*ノードまたはゾーンは、すでにボリュームのレプリカをホストしています。

スケジューラは、新しいレプリカを可能な限り「孤立した」場所に配置しようとし、次の優先順位に従います:

  1. 新しいゾーンの新しいノード(最も推奨される)

  2. 既存のゾーンの新しいノード

  3. 既存のゾーンの既存のノード(最も推奨されない)

以下の表は、各シナリオでレプリカをスケジュールするために必要な設定を詳述しています:

場面 レプリカゾーンレベルのソフトアンチアフィニティ レプリカノードレベルのソフトアンチアフィニティ スケジューラのアクション

新しいゾーンの新しいノード

false

false

レプリカをスケジュールします

他の値

他の値

レプリカをスケジュールしません

既存のゾーンの新しいノード

true

false

新しいゾーンが利用できない場合、レプリカをスケジュールします

他の値

他の値

レプリカをスケジュールしません

既存のゾーンの既存のノード

true

true

他の選択肢が利用できない場合、レプリカをスケジュールします

他の値

他の値

レプリカをスケジュールしません

ディスク選択段階

ノードとゾーンの選択ステージの後、SUSE Storageは選択したノードの任意のディスクにレプリカをスケジュールできるかどうかを判断します。タグの一致、総ディスク容量、および使用可能なディスク容量に基づいて、使用可能なディスクを確認します。他のレプリカが既に存在するかどうかや、アンチアフィニティ設定も考慮します。

SUSE Storageは、選択したノード上のすべての使用可能なディスクを確認し、以下の基準を満たしていることを確認します:

  1. ディスクタグの一致

    • ボリュームにディスクタグがある場合、ディスクはレプリカに必要な指定されたタグと一致する必要があります。

    • ボリュームにディスクタグがない場合、動作は*空のディスクセレクタボリュームを許可する*設定に依存します:

      • true(デフォルト):タグの有無にかかわらず、ディスクへのスケジュールを許可します。

      • false:タグのないディスクへのスケジュールのみを許可します。

  2. 使用可能容量チェック

    • ディスクは、設定された`Storage Minimal Available Percentage`に基づいて十分な使用可能容量を持っている必要があります。

  3. アンチアフィニティ設定

    • ハードアンチアフィニティ:同じボリュームの別のレプリカを既にホストしているディスクにレプリカをスケジュールすることを防ぎます。

    • ソフトアンチアフィニティ(有効な場合):スペースや他の要因の観点から最適でない選択肢であっても、既存のレプリカがないディスクにレプリカをスケジュールすることを優先します。

  4. スペース条件:ディスクがスケジュール可能かどうかを判断する2つの式があります:

    • 実際のスペース使用条件:現在使用中のスペースを考慮した後、十分な使用可能なストレージが残ることを保証します。

      • 式: (Storage Available - Actual Size) > (Storage Maximum × Minimal Available Percentage) / 100

    • スケジューリングスペース条件:レプリカのサイズ(およびスケジュールされたが書き込まれていないデータ)がオーバープロビジョニング制限内に収まることを保証します。

      • 式: (Size + Storage Scheduled) ⇐ ((Storage Maximum - Storage Reserved) × Over Provisioning Percentage) / 100

ディスク評価中、特定のレプリカがまだスケジュールされていないため、`Actual Size`と`Size`はこれらの式では一時的に`0`として扱われます。

これらの条件のいずれかが失敗した場合、ディスクタグ、アンチアフィニティ、またはスペース要件を含め、ディスクはスケジュール不可能としてマークされ、SUSE Storageはそのディスクにレプリカを配置しません。

例のシナリオ

2つのディスクを持つノード(ノードA)を考えてください:

  • ディスクX:1 GBの空き容量、最大4 GBのスペース

  • ディスクY:2 GBの空き容量、最大8 GBのスペース

ステージ1:初期ディスク評価

初期ディスク選択ステージでは、SUSE Storageはすべての使用可能なディスクに対して基本的なチェックを行います。この時点では、特定のレプリカは選択されていないため、`Actual Size`と`Size`は`0`として扱われます。

ディスクX評価

  • 使用可能スペース:1GB

  • Storage Minimal Available Percentage:25%(デフォルト)

  • 最小必要空き容量: (4 GB × 25) / 100 = 1 GB

  • 結果:*ディスク X* は Actual Space Usage Condition に失敗しました。なぜなら、利用可能な空き容量 (1 GB) が最小必要空き容量 (1 GB) より大きくないからです。したがって、ディスク X は Storage Minimal Available Percentage0 に設定されない限り、スケジュール可能ではありません。

ディスク Y 評価

  • 使用可能スペース:2GB

  • Storage Minimal Available Percentage:10%

  • 最小必要空き容量: (8 GB × 10) / 100 = 0.8 GB

  • 結果:*ディスク Y* は Actual Space Usage Condition に合格しました。なぜなら、利用可能な空き容量 (2 GB) が最小必要空き容量 (0.8 GB) より大きいからです。

次に、Scheduling Space Condition を確認します:

  • スケジュールされた空き容量:2GB

  • Storage Reserved:1GB

  • Over Provisioning Percentage:100%(デフォルト)

  • 最大プロビジョニング可能ストレージ: (8 GB - 1 GB) × 100 / 100 = 7 GB

  • 結果:*ディスク Y* は Scheduling Space Condition に合格しました。なぜなら、現在スケジュールされている空き容量 (2 GB) が最大プロビジョニング可能ストレージ (7 GB) より少ないからです。

ディスク Y がすべての条件を満たすため、スケジュール可能なディスク候補としてマークされます。

ステージ2:アンチアフィニティルール

ディスク X とディスク Y の両方が初期空きチェックに合格し、ディスク X がすでに同じボリュームのレプリカをホストしていると仮定します。

ハードアンチアフィニティ

  • SUSE Storage は新しいレプリカをディスク X にスケジュールしません。代わりに、ディスク Y にスケジュールしようとします。

  • ディスク Y が適切でない場合(例えば、ディスクタグが不一致の場合)、このレプリカのスケジューリングは失敗します。

ソフトアンチアフィニティ

  • ソフトアンチアフィニティ が有効な場合、SUSE Storage はレプリカをディスク Y にスケジュールすることを 優先します。これは、レプリカの共存を避けるためです。

  • しかし、ディスク Y が何らかの理由で不適切な場合、SUSE Storage は レプリカをディスク X にスケジュールする可能性があります。これにより、他に適切な候補がない場合のバックアップオプションとしてディスクを共有できます。

スケジュールアルゴリズム

候補ディスクがすべてのスケジューリング要件を満たすことを確認した後、最終ステップはレプリカの最適なディスクを選択することです。この選択は、レプリカをノードとディスクに均等に分配することを目的としたバランスアルゴリズムを使用して決定されます。

使用可能なストレージによるバランスファクターフォーミュラ

  • Disk_Usable_Storage = (Disk.StorageAvailable - Disk.StorageReserved) - Disk.StorageScheduled

  • スコアが低いほど、よりバランスの取れた分配です。

フォーミュラ:

BalanceScore(X) = (max(X) - min(X)) / mean(X)

各要素の内容は次のとおりです。

  • X = 使用可能なストレージ値のセット(ノードまたはディスクごと)。

選択プロセス:

  1. 各候補ノードにレプリカを配置するシミュレーションを行い、結果のバランススコアを計算します。
    → スコアが最も低いノード(最もバランスの取れた分配)を選択します。

  2. 選択したノード内で、各候補ディスクへの配置をシミュレーションし、再度バランススコアを計算します。
    → それらの中でスコアが最も低いディスクを選択します。

例のシナリオ

クラスターに2つのノードがあり、各ノードにはレプリカスケジューリングに適格な2つの候補ディスクが含まれていると仮定します。

レプリカサイズ = 100 GiB。

ノード ディスク 使用可能なストレージ(GiB)

ノードA

A1

900

ノードA

A2

100

ノードB

B1

600

ノードB

B2

700

ステップ 1:ノード選択

ノードAに配置するシミュレーション

新しい合計:

  • ノードA = (900 + 100) − 100 = 900

  • ノードB = (600 + 700) = 1300

ノードのバランススコア:

BalanceScore_NodeA  = (1300 - 900) / ((1300 + 900) / 2)
                    = 400 / 1100
                    ≈ 0.364

ノードBに配置するシミュレーション

新しい合計:

  • ノードA = (900 + 100) = 1000

  • ノードB = (600 + 700) - 100 = 1200

ノードのバランススコア:

BalanceScore_NodeB  = (1200 - 1000) / ((1200 + 1000) / 2)
                    = 200 / 1100
                    ≈ 0.182

*ノードB*を選択してください(スコアが低く、よりバランスが取れています)。

ステップ2:ディスク選択

B1に配置をシミュレート (600 → 500)

新しい使用可能なディスク:B1 = 500, B2 = 700

ディスクのバランススコア:

BalanceScore_DiskB1 = (700 - 500) / ((700 + 500) / 2)
                    = 200 / 600
                    ≈ 0.333

B2に配置をシミュレート (700 → 600)

新しい使用可能なディスク:B1 = 600, B2 = 600

ディスクのバランススコア:

BalanceScore_DiskB2 = (600 - 600) / ((600 + 600) / 2)
                    = 0 / 600
                    = 0

*ディスクB2*を選択してください(B1とB2のバランスが完全です)。

設定

ノードとディスク上のレプリカのスケジューリングに関連する設定の詳細については、設定リファレンスを参照してください:

SUSE Storageは、Kubernetesノードオブジェクト内のラベル`topology.kubernetes.io/zone=<Zone name of the node>`または`topology.kubernetes.io/region=<Region name of the node>`に依存して、ゾーンまたはリージョンを特定します。

これらは予約されており、Kubernetesによって よく知られたラベルとして使用されます。