4.2. コマンドラインを使用したワークロードの展開
コマンドラインを使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。
4.2.1. libvirt ボリュームの設定 リンクのコピーリンクがクリップボードにコピーされました!
KVM ホストに libvirt ボリュームを設定する必要があります。ピア Pod は、Cloud API アダプターの libvirt プロバイダーを使用して仮想マシンを作成および管理します。
前提条件
- OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、OpenShift Container Platform クラスターに OpenShift sandboxed containers Operator をインストールしている。
- KVM ホストの管理者権限がある。
-
KVM ホストに
podmanがインストールされている。 -
KVM ホストに
virt-customizeがインストールされている。
手順
- KVM ホストにログインします。
次のコマンドを実行して、libvirt プールの名前を設定します。
export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt プロバイダーのシークレットを作成するには、
LIBVIRT_POOL値が必要です。次のコマンドを実行して、libvirt プールの名前を設定します。
export LIBVIRT_VOL_NAME=<libvirt_volume>
$ export LIBVIRT_VOL_NAME=<libvirt_volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt プロバイダーのシークレットを作成するには、
LIBVIRT_VOL_NAME値が必要です。次のコマンドを実行して、デフォルトのストレージプールの場所のパスを設定します。
export LIBVIRT_POOL_DIRECTORY=<target_directory>
$ export LIBVIRT_POOL_DIRECTORY=<target_directory>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- libvirt に読み取りおよび書き込みアクセス権限があることを確認するには、libvirt ストレージディレクトリーのサブディレクトリーを使用します。デフォルトは
/var/lib/libvirt/images/です。
次のコマンドを実行して、libvirt プールを作成します。
virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、libvirt プールを開始します。
virsh pool-start $LIBVIRT_POOL
$ virsh pool-start $LIBVIRT_POOLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、プールの libvirt ボリュームを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. KVM ゲストイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
KVM ゲストイメージを作成し、libvirt ボリュームにアップロードする必要があります。
前提条件
- IBM z15 以降、または IBM® LinuxONE III 以降。
- KVM を備えた RHEL 9 以降で実行している少なくとも 1 つの LPAR。
手順
- OpenShift Container Platform クラスターにログインします。
RHEL サブスクリプションをお持ちの場合は、Red Hat Subscription Management のサブスクリプション環境変数を設定します。
次のコマンドを実行して組織 ID を設定します。
export ORG_ID=$(cat ~/.rh_subscription/orgid)
$ export ORG_ID=$(cat ~/.rh_subscription/orgid)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してアクティベーションキーを設定します。
export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
$ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RHEL サブスクリプションがない場合は、RHEL のサブスクリプション値を設定します。
次のコマンドを実行して組織 ID を設定します。
export ORG_ID=<RHEL_ORGID_VALUE>
$ export ORG_ID=<RHEL_ORGID_VALUE>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RHEL 組織 ID を指定します。
次のコマンドを実行してアクティベーションキーを設定します。
export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>
$ export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RHEL アクティベーションキーを指定します。
- IBM Z® システムにログインします。
libvirt に正しいアクセス権を付与するには、Red Hat カスタマーポータル から
s390xRHEL KVM ゲストイメージを libvirt ストレージディレクトリーにダウンロードします。デフォルトのディレクトリーは
/var/lib/libvirt/imagesです。このイメージは、関連するバイナリーを含むピア Pod 仮想マシンイメージを生成するために使用されます。次のコマンドを実行して、ダウンロードしたイメージの
IMAGE_URLを設定します。export IMAGE_URL=<path/to/image>
$ export IMAGE_URL=<path/to/image>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- KVM ゲストイメージのパスを指定します。
次のコマンドを実行して、ゲスト KVM イメージを登録します。
export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"$ export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ゲスト KVM イメージをカスタマイズします。
virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"$ virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、イメージのチェックサムを設定します。
export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')$ export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. ピア Pod 仮想マシンイメージのビルド リンクのコピーリンクがクリップボードにコピーされました!
ピア Pod 仮想マシン (VM) イメージをビルドし、libvirt ボリュームにアップロードする必要があります。
手順
- OpenShift Container Platform クラスターにログインします。
以下のコマンドを実行して cloud-api-adaptor リポジトリーのクローンを作成します。
git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.git
$ git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
podvmディレクトリーに移動します。cd cloud-api-adaptor && git checkout 8577093
$ cd cloud-api-adaptor && git checkout 8577093Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最終的な QCOW2 イメージの生成元となるビルダーイメージを作成します。
サブスクライブしている RHEL システムがある場合は、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サブスクライブされていない RHEL システムがある場合は、以下のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、ピア Pod を実行するために必要なバイナリーを含む中間イメージパッケージを生成します。
podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .
$ podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .Copy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスにはかなりの時間がかかります。
次のコマンドを実行して、バイナリーを抽出し、ピア Pod QCOW2 イメージを構築します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、イメージディレクトリー環境変数を作成します。
export IMAGE_OUTPUT_DIR=<image_output_directory>
$ export IMAGE_OUTPUT_DIR=<image_output_directory>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- イメージのディレクトリーを指定します。
次のコマンドを実行してイメージディレクトリーを作成します。
mkdir -p $IMAGE_OUTPUT_DIR
$ mkdir -p $IMAGE_OUTPUT_DIRCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、展開したピア Pod QCOW2 イメージを保存します。
podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}$ podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}Copy to Clipboard Copied! Toggle word wrap Toggle overflow ピア Pod QCOW2 イメージを libvirt ボリュームにアップロードします。
virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparse
$ virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターに Secret オブジェクトを作成する必要があります。
前提条件
-
LIBVIRT_POOL。KVM ホストで libvirt を設定したときに設定した値を使用します。 -
LIBVIRT_VOL_NAME。KVM ホストで libvirt を設定したときに設定した値を使用します。 LIBVIRT_URI。この値は、libvirt ネットワークのデフォルトのゲートウェイ IP アドレスです。この値を取得するには、libvirt ネットワーク設定を確認してください。注記libvirt がデフォルトのブリッジ仮想ネットワークを使用する場合は、以下のコマンドを実行して
LIBVIRT_URIを取得できます。virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:]) LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}')$ virtint=$(bridge_line=$(virsh net-info default | grep Bridge); echo "${bridge_line//Bridge:/}" | tr -d [:blank:]) $ LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
次の例に従って
peer-pods-secret.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マニフェストを適用して
secretオブジェクトを作成します。oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ピア Pod シークレットを更新する場合は、peerpodconfig-ctrl-caa-daemon DaemonSet を再起動して変更を適用する必要があります。
シークレットを更新したら、マニフェストを適用します。次に、以下のコマンドを実行して cloud-api-adaptor Pod を再起動します。
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
デーモンセットを再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
4.2.5. config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
libvirt プロバイダー用に OpenShift Container Platform クラスター上に config map を作成する必要があります。
手順
以下の例に従って
peer-pods-cm.yamlマニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マニフェストを適用して config map を作成します。
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt プロバイダー用の config map が作成されます。
ピア Pod config map を更新する場合、変更を適用するために peerpodconfig-ctrl-caa-daemon デーモンセットを再起動する必要があります。
config map を更新した後、マニフェストを適用します。次に、以下のコマンドを実行して cloud-api-adaptor Pod を再起動します。
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
daemonset を再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
4.2.6. SSH キーシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
KVM ホスト用に SSH 鍵の secret オブジェクトを作成する必要があります。
手順
- OpenShift Container Platform クラスターにログインします。
次のコマンドを実行して、SSH キーペアを生成します。
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 公開鍵を KVM ホストにコピーします。
ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
Secretオブジェクトを作成します。oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsa$ oc create secret generic ssh-key-secret \ -n openshift-sandboxed-containers-operator \ --from-file=id_rsa.pub=./id_rsa.pub \ --from-file=id_rsa=./id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH キーシークレットが作成されます。
作成した SSH 鍵を削除します。
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.7. KataConfig カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ワーカーノードに kata-remote をランタイムクラスとしてインストールするには、KataConfig カスタムリソース (CR) を作成する必要があります。
KataConfig CR を作成すると、OpenShift Sandboxed Containers Operator がトリガーされ、以下が実行されます。
-
デフォルト設定で
kata-remoteという名前のRuntimeClassCR を作成します。これにより、RuntimeClassNameフィールドの CR を参照して、kata-remoteをランタイムとして使用するようにワークロードを設定できるようになります。この CR は、ランタイムのリソースオーバーヘッドも指定します。
OpenShift Sandboxed Containers は、kata-remote をプライマリーランタイムとしてではなく、クラスター上の セカンダリーオプション のランタイムとしてインストールします。
KataConfig CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。再起動時間を妨げる要因は次のとおりです。
- より多くのワーカーノードを持つ大規模な OpenShift Container Platform デプロイメント。
- BIOS および診断ユーティリティーが有効である。
- SSD ではなくハードディスクドライブにデプロイしている。
- 仮想ノードではなく、ベアメタルなどの物理ノードにデプロイしている。
- CPU とネットワークが遅い。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
次の例に従って
cluster-kataconfig.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 選択したノードに
kata-remoteをインストールするには、次の例に従ってノードラベルを指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 選択したノードのラベルを指定します。
KataConfigCR を作成します。oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい
KataConfigCR が作成され、ワーカーノードにkata-remoteがランタイムクラスとしてインストールされます。インストールを確認する前に、
kata-remoteのインストールが完了し、ワーカーノードが再起動するまで待ちます。
検証
次のコマンドを実行して、インストールの進行状況を監視します。
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kataNodesの下にあるすべてのワーカーのステータスがinstalledで、理由を指定せずにInProgressの条件がFalseの場合、kataはクラスターにインストールされます。
詳細は、KataConfig ステータスメッセージ を参照してください。
4.2.8. オプション: ノードあたりのピア Pod 仮想マシン数の変更 リンクのコピーリンクがクリップボードにコピーされました!
peerpodConfig カスタムリソース (CR) を編集することで、ノードあたりのピア Pod 仮想マシン (VM) の制限を変更できます。
手順
次のコマンドを実行して、現在の制限を確認します。
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
peerpodConfigCR のlimit属性を変更します。oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <value> は、定義する制限に置き換えます。
4.2.9. ワークロードオブジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の Pod テンプレートされたオブジェクトのランタイムクラスとして kata-remote を設定して、OpenShift Sandboxed Containers のワークロードをデプロイします。
-
Podオブジェクト -
ReplicaSetオブジェクト -
ReplicationControllerオブジェクト -
StatefulSetオブジェクト -
Deploymentオブジェクト -
DeploymentConfigオブジェクト
ワークロードを openshift-sandboxed-containers-operator namespace にデプロイしないでください。これらのリソース専用の namespace を作成します。
前提条件
- プロバイダーのシークレットオブジェクトを作成している。
- プロバイダーの config map を作成している。
-
KataConfigカスタムリソース (CR) を作成している。
手順
次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに
spec.runtimeClassName: kata-remoteを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。
検証
-
Pod テンプレートオブジェクトの
spec.runtimeClassNameフィールドを検査します。値がkata-remoteの場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。