|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
トポロジー対応プロビジョニング
トポロジー対応プロビジョニングにより、KubernetesがPersistentVolume(PV)を作成する際に書き込む`nodeAffinity`ルールを制御できます。これは、ボリュームを特定のゾーンやリージョンに固定したい場合に便利で、ポッドとそのデータが常に同じ障害ドメインに配置されるようにします。
SUSE Storageは、次の2つの補完的な機能を通じてこれをサポートします:
-
csi-allowed-topology-keys`設定:PV `nodeAffinity`に表示されるトポロジーキー(例えば、`topology.kubernetes.io/zone)を制御します。 -
strictTopologyStorageClassパラメータ:有効にすると、スケジューラーが選択した特定のノードのトポロジーにPVが固定され、他の一致するトポロジーには固定されなくなります。
前提条件
-
クラスター内のノードには、使用する予定のトポロジーキーでラベル付けされている必要があります。Kubernetesは、ほとんどのクラウド環境でよく知られたラベル`topology.kubernetes.io/zone`を自動的に適用します。次のコマンドで確認します。
kubectl get nodes --label-columns topology.kubernetes.io/zone -
SUSE Storageで*CSI許可されたトポロジーキー*設定を構成します。SUSE StorageがKubernetesに渡すべきトポロジーキーのカンマ区切りリストに値を設定します。
-
SUSE Storage UI:*設定 > 一般 > CSI許可されたトポロジーキー*に移動し、例えば`topology.kubernetes.io/zone`を入力します。
-
Longhorn API / kubectl:
kubectl -n longhorn-system edit settings.longhorn.io csi-allowed-topology-keys`value`フィールドを`topology.kubernetes.io/zone`に設定します。
この設定を変更した後、変更を有効にするために`longhorn-csi-plugin` DaemonSetを手動で再起動する必要があります。トポロジーは、各ノードのCSIプラグインポッドが再起動した後にのみ正しく適用されます。
-
機能のしくみ
PVCがLonghorn CSIドライバーを使用するStorageClassに対して作成されると、いくつかのフィールドが相互作用して、結果として得られるPVが受け取る`nodeAffinity`を決定します:
| フィールド | Role |
|---|---|
|
CSIドライバーにどのトポロジーキーを公開するかを指示します。空の場合(デフォルト)、トポロジー情報はKubernetesに渡されず、PVはトポロジーベースの`nodeAffinity`を受け取りません。 |
|
どのトポロジー値が対象となるかを制限します。例えば、 |
|
|
|
`"true"`と`WaitForFirstConsumer`を使用する場合、PVはポッドがスケジュールされたノードのゾーンのみに固定され、許可されたすべてのゾーンには固定されません。この設定は、`csi-allowed-topology-keys`が関連するトポロジーキーを含む場合にのみ効果があります。 |
例
以下の例は、3つのゾーンにまたがる6つのノードを持つクラスターを前提としています:
| ノード | ゾーン |
|---|---|
node2 |
a |
node3 |
b |
node4 |
c |
node5 |
a |
node6 |
b |
node7 |
c |
基本的なゾーンレベルのアフィニティ
`WaitForFirstConsumer`を`allowedTopologies`と`csi-allowed-topology-keys`と一緒に使用して、ボリュームを特定のゾーンに制限します。
Longhorn設定:
csi-allowed-topology-keys = topology.kubernetes.io/zone
StorageClass:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-zone-ab
provisioner: driver.longhorn.io
volumeBindingMode: WaitForFirstConsumer
parameters:
numberOfReplicas: "3"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- a
- b
結果:PV `nodeAffinity`は`zone in [a, b]`に設定されています。PVは、ゾーン`a`または`b`のノードにのみ接続できます。
厳密なトポロジーピンニング
PVをスケジュールされたノードの正確なゾーンにピン留めするには、`strictTopology: "true"`を追加してください。
Longhorn設定:
csi-allowed-topology-keys = topology.kubernetes.io/zone
StorageClass:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-strict-zone
provisioner: driver.longhorn.io
volumeBindingMode: WaitForFirstConsumer
parameters:
numberOfReplicas: "3"
strictTopology: "true"
allowedTopologies:
- matchLabelExpressions:
- key: topology.kubernetes.io/zone
values:
- a
- b
- c
結果:すべての3つのゾーンが`allowedTopologies`にリストされているにもかかわらず、PV nodeAffinity`はポッドがスケジュールされたノードのゾーンのみに設定されています(例えば、ポッドが`node2`または`node5`に配置される場合は`zone in [a])。
動作参照
以下の表では、ゾーン`[a, b, c]`は上記の例のクラスターに存在するすべてのゾーンを表します。
| # | volumeBindingMode |
allowedTopologies |
csi-allowed-topology-keys |
strictTopology |
PV nodeAffinity |
|---|---|---|---|---|---|
1 |
直ちに |
なし |
|
false |
なし |
2 |
直ちに |
なし |
|
false |
[a, b, c]のゾーン |
3 |
直ちに |
ゾーン: [a, b] |
|
false |
[a, b]のゾーン |
4 |
WFFC |
なし |
|
false |
なし |
5 |
WFFC |
なし |
|
false |
[a, b, c]のゾーン |
6 |
WFFC |
なし |
|
true |
[selected]のゾーン |
7 |
WFFC |
ゾーン: [a] |
|
false |
[a]のゾーン |
8 |
WFFC |
ゾーン: [a, b, c] |
|
true |
[selected]のゾーン |
この表では、
zone`は`topology.kubernetes.io/zone`の略語であり、[selected]`はKubernetesスケジューラーによって選択されたノードのゾーンを意味します。
重要なポイント:
-
`csi-allowed-topology-keys`がないと、トポロジー情報は渡されず、PVはトポロジーベースの`nodeAffinity`を受け取りません(シナリオ1、4)。
-
`strictTopology`は、`WaitForFirstConsumer`と一緒に使用されると、スケジュールされたポッドのトポロジーにPVをピン留めします。`Immediate`を使用すると、PVはポッドがスケジュールされる前に作成されるため、そのトポロジーはランダムに選択されます。
-
`allowedTopologies`は適格なゾーンのセットを絞り込み、`strictTopology`はさらに単一の選択されたゾーンに絞り込みます。
メモおよび警告
-
使用しないでください
allowedTopologiesとdataLocality: strict-localを一緒に使わないでください。PVnodeAffinityは一度設定されると変更できず、SUSE Storage の厳密なローカルボリュームピンニングと衝突します。詳細については データのローカリティ を参照してください。 -
トポロジーを意識したプロビジョニングが*不要*なユーザーに最も一般的な構成は、
csi-allowed-topology-keysを空のままにすることです(シナリオ 1 と 4)。これがデフォルトの設定です。 -
トポロジーを意識したプロビジョニングを希望するユーザーには、推奨される設定はシナリオ 7 と 8 です —
WaitForFirstConsumerをallowedTopologiesとcsi-allowed-topology-keysと一緒に使用してください。