第2章 OpenShift Sandboxed Containers ワークロードのデプロイ
Web コンソールまたは OpenShift CLI (oc
) のいずれかを使用して OpenShift Sandboxed Containers Operator をインストールできます。OpenShift Sandboxed Containers Operator をインストールする前に、Red Hat OpenShift クラスターを準備する必要があります。
2.1. 前提条件
OpenShift Sandboxed Containers をインストールする前に、Red Hat OpenShift クラスターが次の要件を満たしていることを確認してください。
クラスターは、Red Hat Enterprise Linux CoreOS (RHCOS) ワーカーを使用してオンプレミスのベアメタルインフラストラクチャーにインストールする必要があります。ユーザーによってプロビジョニングされる、インストーラーでプロビジョニングされる、またはアシステッドインストーラーによるインストールなどのインストール方法を使用してクラスターをデプロイできます。
注記- OpenShift Sandboxed Containers は RHCOS ワーカーノードのみをサポートします。RHEL ノードはサポートされていません。
- ネストされた仮想化はサポートされていません。
- Amazon Web Services (AWS) ベアメタルインスタンスに OpenShift Sandboxed Containers をインストールできます。他のクラウドプロバイダーが提供するベアメタルインスタンスはサポートされません。
2.1.1. OpenShift Sandboxed Containers のリソース要件
OpenShift Sandboxed Containers を使用すると、ユーザーはサンドボックスランタイム (Kata) 内の Red Hat OpenShift クラスターでワークロードを実行できます。各 Pod は仮想マシン (VM) で表されます。各仮想マシンは QEMU プロセスで実行され、コンテナーワークロードおよびこれらのコンテナーで実行されているプロセスを管理するためのスーパーバイザーとして機能する kata-agent
プロセスをホストします。2 つのプロセスを追加すると、オーバーヘッドがさらに増加します。
-
containerd-shim-kata-v2
。これは Pod との通信に使用されます。 -
virtiofsd
。これはゲストの代わりにホストファイルシステムのアクセスを処理します。
各仮想マシンには、デフォルトのメモリー容量が設定されます。コンテナーでメモリーが明示的に要求された場合に、メモリーが追加で仮想マシンにホットプラグされます。
メモリーリソースなしで実行されているコンテナーは、仮想マシンによって使用される合計メモリーがデフォルトの割り当てに達するまで、空きメモリーを消費します。ゲストやその I/O バッファーもメモリーを消費します。
コンテナーに特定のメモリー量が指定されている場合には、コンテナーが起動する前に、メモリーが仮想マシンにホットプラグされます。
メモリー制限が指定されている場合には、上限より多くメモリーが消費された場合に、ワークロードが終了します。メモリー制限が指定されていない場合、仮想マシンで実行されているカーネルがメモリー不足になる可能性があります。カーネルがメモリー不足になると、仮想マシン上の他のプロセスが終了する可能性があります。
デフォルトのメモリーサイズ
以下の表は、リソース割り当てのデフォルト値を示しています。
リソース | 値 |
---|---|
デフォルトで仮想マシンに割り当てられるメモリー | 2Gi |
起動時のゲスト Linux カーネルのメモリー使用量 | ~110Mi |
QEMU プロセスで使用されるメモリー (仮想マシンメモリーを除く) | ~30Mi |
| ~10Mi |
| ~20Mi |
Fedora で | ~300Mi* [1] |
ファイルバッファーが表示され、このバッファーは以下の複数の場所に考慮されます。
- ファイルバッファーキャッシュとして表示されるゲスト。
-
許可されたユーザー空間ファイルの I/O 操作をマッピングする
virtiofsd
デーモン。 - ゲストメモリーとして使用される QEMU プロセス。
メモリー使用量の合計は、メモリー使用率メトリックによって適切に考慮され、そのメモリーを 1 回だけカウントします。
Pod のオーバーヘッド では、ノード上の Pod が使用するシステムリソースの量を記述します。以下のように、oc describe runtimeclass kata
を使用して、Kata ランタイムクラスの現在の Pod オーバーヘッドを取得できます。
例
$ oc describe runtimeclass kata
出力例
kind: RuntimeClass apiVersion: node.k8s.io/v1 metadata: name: kata overhead: podFixed: memory: "500Mi" cpu: "500m"
RuntimeClass
の spec.overhead
フィールドを変更して、Pod のオーバーヘッドを変更できます。たとえば、コンテナーに対する設定が QEMU プロセスおよびゲストカーネルデータでメモリー 350Mi 以上を消費する場合に、RuntimeClass
のオーバーヘッドをニーズに合わせて変更できます。
Red Hat では、指定のデフォルトオーバーヘッド値がサポートされます。デフォルトのオーバーヘッド値の変更はサポートされておらず、値を変更すると技術的な問題が発生する可能性があります。
ゲストで種類にかかわらず、ファイルシステム I/O を実行すると、ファイルバッファーがゲストカーネルに割り当てられます。ファイルバッファーは、virtiofsd
プロセスだけでなく、ホスト上の QEMU プロセスでもマッピングされます。
たとえば、ゲストでファイルバッファーキャッシュ 300Mi を使用すると、QEMU と virtiofsd
の両方が、追加で 300Mi を使用するように見えます。ただし、3 つのケースすべてで同じメモリーが使用されています。つまり、メモリーの合計使用量は 300Mi のみで、このメモリー量が 3 つの異なる場所にマッピングされています。これは、メモリー使用量メトリックの報告時に適切に考慮されます。
2.1.2. クラスターノードが OpenShift Sandboxed Containers を実行する資格があるかどうかの確認
OpenShift Sandboxed Containers を実行する前に、クラスター内のノードが Kata コンテナーを実行する資格があるかどうかを確認してください。クラスターノードによっては、Sandboxed Containers の最小要件に準拠していない可能性があります。ノードが不適格である最も一般的な理由は、ノードで仮想化がサポートされていないことです。サンドボックス化されたワークロードを不適格なノードで実行しようとすると、エラーが発生します。Node Feature Discovery (NFD) Operator と NodeFeatureDiscovery
リソースを使用して、ノードの適格性を自動的に確認できます。
適格であることがわかっている選択したワーカーノードのみに Kata ランタイムをインストールする場合は、選択したノードに feature.node.kubernetes.io/runtime.kata=true
ラベルを適用し、KataConfig
リソースで checkNodeEligibility: true
を設定します。
または、Kata ランタイムをすべてのワーカーノードにインストールするには、KataConfig
リソースで checkNodeEligibility: false
を設定します。
どちらのシナリオでも、NodeFeatureDiscovery
リソースを作成する必要はありません。ノードが Kata コンテナーを実行する資格があることが確実な場合にのみ、feature.node.kubernetes.io/runtime.kata=true
ラベルを手動で適用する必要があります。
次の手順では、feature.node.kubernetes.io/runtime.kata=true
ラベルをすべての適格なノードに適用し、ノードの適格性を確認するように KataConfig
リソースを設定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - Node Feature Discovery (NFD) Operator をインストールします。
手順
NodeFeatureDiscovery
リソースを作成して、Kata コンテナーの実行に適したノード機能を検出します。次の YAML を
nfd.yaml
ファイルに保存します。apiVersion: nfd.openshift.io/v1 kind: NodeFeatureDiscovery metadata: name: nfd-kata namespace: openshift-nfd spec: operand: image: quay.io/openshift/origin-node-feature-discovery:4.10 imagePullPolicy: Always servicePort: 12000 workerConfig: configData: | sources: custom: - name: "feature.node.kubernetes.io/runtime.kata" matchOn: - cpuId: ["SSE4", "VMX"] loadedKMod: ["kvm", "kvm_intel"] - cpuId: ["SSE4", "SVM"] loadedKMod: ["kvm", "kvm_amd"]
NodeFeatureDiscovery
カスタムリソース (CR) を作成します。$ oc create -f nfd.yaml
出力例
nodefeaturediscovery.nfd.openshift.io/nfd-kata created
feature.node.kubernetes.io/runtime.kata=true
ラベルが、資格のあるすべてのワーカーノードに適用されます。
KataConfig
リソースでcheckNodeEligibility
フィールドをtrue
に設定して、機能を有効にします。次に例を示します。次の YAML を
kata-config.yaml
ファイルに保存します。apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: checkNodeEligibility: true
KataConfig
CR を作成します。$ oc create -f kata-config.yaml
出力例
kataconfig.kataconfiguration.openshift.io/example-kataconfig created
検証
クラスター内の適格なノードに正しいラベルが適用されていることを確認します。
$ oc get nodes --selector='feature.node.kubernetes.io/runtime.kata=true'
出力例
NAME STATUS ROLES AGE VERSION compute-3.example.com Ready worker 4h38m v1.25.0 compute-2.example.com Ready worker 4h35m v1.25.0
関連情報
- Node Feature Discovery (NFD) Operator のインストールの詳細は、NFD のインストールを 参照してください。