第5章 namespace SR-IOV リソースの設定
namespace 付き SriovNetwork リソースを使用すると、アプリケーション所有者は、共有 Operator namespace でクラスター管理者に依存するのではなく、namespace 内で直接独自の SriovNetwork リソースを作成および管理できます。この方法により、権限が簡素化され、セキュリティーが向上し、アプリケーション間の分離が強化されます。
5.1. namespace 付き SriovNetwork リソースの概要 リンクのコピーリンクがクリップボードにコピーされました!
SR-IOV ネットワークは、アプリケーション namespace 内で直接作成および管理できます。この機能により、アプリケーション所有者はネットワーク設定をきめ細かく制御できるようになり、ワークフローが簡素化されます。
このアプローチには、ユーザーエクスペリエンスを向上させるいくつかの重要な利点があります。
-
自律性と制御性の向上: アプリケーション所有者はネットワーク設定を直接制御できるため、クラスター管理者が代わりに
SriovNetwork
オブジェクトを作成する必要がなくなります。 - 強化されたセキュリティー: ユーザーが独自の namespace 内のリソースを管理できるようにすることで、セキュリティーが向上し、アプリケーション間の分離が強化されます。これにより、他のアプリケーションの NetworkAttachmentDefinition オブジェクトの意図しない誤った設定を回避することもできます。
-
簡素化された権限:
SriovNetwork
リソースを独自の namespace で直接管理することで、ユーザー権限が簡素化されます。これによりワークフローが合理化され、開発者の運用オーバーヘッドが削減されます。
5.1.1. アプリケーション namespace での SriovNetwork の設定 リンクのコピーリンクがクリップボードにコピーされました!
SriovNetwork カスタムリソース (CR) がアプリケーション namespace にデプロイされる場合、spec.networkNamespace
フィールドを定義したり、値を入力したりしないでください。このシナリオでは、NetworkAttachmentDefinition は SriovNetwork CR と同じ namespace に作成されます。
spec.networkNamespace
フィールドが定義されている場合、SR-IOV Network Operator の Webhook は、アプリケーション namespace での SriovNetwork
リソースの作成を拒否します。
アプリケーション namespace に SriovNetwork
リソースを作成し、追加のネットワークに Pod をアタッチするには、次の手順に従ってください。
前提条件
アプリケーション所有者が namespace 付きの SriovNetwork リソースを設定する前に、クラスター管理者が次の手順を完了する必要があります。
-
SR-IOV Network Operator は、
openshift-sriov-network-operator
namespace にインストールされます。 - SR-IOV ハードウェアを備えたノードには、Operator がノードを識別できるようにラベルが付けられます。
アプリケーションの所有者には、アプリケーション namespace に対する管理者特権が必要です。
手順
SR-IOV ネットワークノードポリシーを作成して、ノードの SR-IOV ネットワークデバイス設定を指定します。
SriovNetworkNodePolicy
オブジェクトは、ノードの SR-IOV ネットワークデバイス設定を定義するために、openshift-sriov-network-operator
namespace に作成されます。以下は、Intel DPK の設定例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーション namespace を作成します。たとえば、次のコマンドを実行して、
sriov-app
という名前の namespace を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーション namespace で
SriovNetwork
オブジェクトを定義するには、YAML ファイル (例:sriovnetwork.yaml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
namespace
: 値はアプリケーション namespace の名前と一致する必要があります (例:sriov-app
)。 -
resourceName
: この値は、クラスター管理者が作成したSriovNetworkNodePolicy
で定義されたspec.resourceName
(この例ではintelnics
) と一致する必要があります。
-
YAML ファイルを適用して、アプリケーション namespace に
SriovNetwork
オブジェクトを作成します。oc create -f sriovnetwork.yaml
$ oc create -f sriovnetwork.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーション所有者が SriovNetwork リソースを作成したら、新しく定義されたネットワークを使用する Pod を作成できます。Pod の YAML マニフェストに特定のアノテーションを追加することで、Pod を追加のネットワークにアタッチします。
新しいネットワークアタッチメントを使用する Pod を定義する YAML ファイル (例:
test-pod.yaml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
namespace
: Pod が作成される namespace。これは、SriovNetwork
オブジェクトが作成される namespace と同じである必要があります。 -
annotations
:k8s.v1.cni.cncf.io/networks
は、Pod が接続する追加のネットワークを指定します。値は、SriovNetwork
オブジェクトのmetadata.name
と一致する必要があります。
-
次のコマンドを実行して、YAML ファイルを適用し、アプリケーション namespace に Pod を作成します。
oc create -f test-pod.yaml
$ oc create -f test-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを実行して、NetworkAttachmentDefinition が同じ namespace に作成されていることを確認します。
oc get net-attach-def -n sriov-app
$ oc get net-attach-def -n sriov-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
sriov-app
は、SriovNetwork
オブジェクトが作成されるアプリケーション namespace です。出力例
NAME AGE test-network 2m
NAME AGE test-network 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドで Pod を記述して、Pod が実行中であることを確認し、そのネットワークステータスを取得します。
oc describe pod test-pod -n sriov-app
$ oc describe pod test-pod -n sriov-app
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、
sriov-app
は Pod が作成されるアプリケーション namespace です。出力で、
k8s.v1.cni.cncf.io/network-status
アノテーションを探します。これには、ネットワークの名前と、そのインターフェイス上の Pod に割り当てられた IP が表示されます。次のコマンドを実行して、Pod に追加のネットワークインターフェイスがあることを確認します。
oc exec -it test-pod -n sriov-app -- ip a
$ oc exec -it test-pod -n sriov-app -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの eth0 インターフェイスに加えて、
net1
やeth1
などのセカンダリーネットワークインターフェイスを探します。net1
インターフェイスには、SriovNetwork オブジェクトで定義したサブネットの IP アドレス (例:10.0.0.0/24
) が必要です。これにより、Pod が新しいネットワークアタッチメント定義を使用していることが確認されます。