6.2. IBM Z および IBM LinuxONE への OpenShift Sandboxed Containers のデプロイ
コマンドラインインターフェイス (CLI) を使用して次のタスクを実行することにより、OpenShift sandboxed containers を IBM Z® および IBM® LinuxONE にデプロイできます。
- OpenShift Sandboxed Containers Operator を再インストールします。
- オプション: 各ワーカーノードで実行されている仮想マシンの数を変更します。
- オプション: libvirt ボリュームを設定します。
- オプション: カスタムピア Pod 仮想マシンイメージを作成します。
- ピア Pod シークレットを作成します。
- ピア Pod の config map を作成します。
- Pod 仮想マシンイメージ config map を作成します。
- KVM ホストシークレットを作成します。
- オプション: カスタムピア Pod 仮想マシンイメージを選択します。
- オプション: Kata エージェントポリシーをカスタマイズします。
-
KataConfig
カスタムリソースを作成します。 - OpenShift Sandboxed Containers のワークロードオブジェクトを設定します。
6.2.1. OpenShift Sandboxed Containers Operator のインストール
CLI を使用して、OpenShift Sandboxed Containers Operator をインストールできます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
osc-namespace.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
以下のコマンドを実行して namespace を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f osc-namespace.yaml
$ oc apply -f osc-namespace.yaml
osc-operatorgroup.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
以下のコマンドを実行して Operator グループを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f osc-operatorgroup.yaml
$ oc apply -f osc-operatorgroup.yaml
osc-subscription.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: sandboxed-containers-operator namespace: openshift-sandboxed-containers-operator spec: channel: stable installPlanApproval: Automatic name: sandboxed-containers-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: sandboxed-containers-operator.v1.9.0
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: sandboxed-containers-operator namespace: openshift-sandboxed-containers-operator spec: channel: stable installPlanApproval: Automatic name: sandboxed-containers-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: sandboxed-containers-operator.v1.9.0
次のコマンドを実行して、サブスクリプションを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f osc-subscription.yaml
$ oc apply -f osc-subscription.yaml
次のコマンドを実行して、Operator が正常にインストールされていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
このコマンドが完了するまでに数分かかる場合があります。
次のコマンドを実行してプロセスを監視します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow watch oc get csv -n openshift-sandboxed-containers-operator
$ watch oc get csv -n openshift-sandboxed-containers-operator
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.9.0 1.8.1 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.9.0 1.8.1 Succeeded
6.2.2. libvirt ボリュームの設定
OpenShift sandboxed containers Operator は、インストール中に KVM ホスト上の libvirt ボリュームとプールを自動的に設定します。必要に応じて、追加の libvirt ボリュームおよびプールを手動で設定または作成できます。
前提条件
- OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、OpenShift Container Platform クラスターに OpenShift sandboxed containers Operator をインストールしている。
- KVM ホストの管理者権限がある。
-
KVM ホストに
podman
がインストールされている。 -
KVM ホストに
virt-customize
がインストールされている。 -
イメージ用の
/var/lib/libvirt/images/
ディレクトリーがある。
手順
- KVM ホストにログインします。
次のコマンドを実行して、libvirt プールの名前を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>
libvirt プロバイダーのシークレットを作成するには、
LIBVIRT_POOL
値が必要です。次のコマンドを実行して、libvirt ボリュームの名前を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBVIRT_VOL_NAME=<libvirt_volume>
$ export LIBVIRT_VOL_NAME=<libvirt_volume>
libvirt プロバイダーのシークレットを作成するには、
LIBVIRT_VOL_NAME
値が必要です。次のコマンドを実行して、デフォルトのストレージプールの場所のパスを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBVIRT_POOL_DIRECTORY="/var/lib/libvirt/images/"
$ export LIBVIRT_POOL_DIRECTORY="/var/lib/libvirt/images/"
次のコマンドを実行して、libvirt プールを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
次のコマンドを実行して、libvirt プールを開始します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virsh pool-start $LIBVIRT_POOL
$ virsh pool-start $LIBVIRT_POOL
次のコマンドを実行して、プールの libvirt ボリュームを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
$ virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
6.2.3. カスタムピア Pod 仮想マシンイメージの作成
デフォルトの Operator ビルドイメージを使用する代わりに、カスタムピア Pod 仮想マシン (VM) イメージを作成できます。
ピア Pod QCOW2 イメージを使用して Open Container Initiative (OCI) コンテナーを構築します。後で、コンテナーレジストリー URL とイメージパスをピア Pod 仮想マシンイメージ config map に追加します。
手順
Dockerfile.podvm-oci
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow FROM scratch ARG PODVM_IMAGE_SRC ENV PODVM_IMAGE_PATH="/image/podvm.qcow2" COPY $PODVM_IMAGE_SRC $PODVM_IMAGE_PATH
FROM scratch ARG PODVM_IMAGE_SRC ENV PODVM_IMAGE_PATH="/image/podvm.qcow2" COPY $PODVM_IMAGE_SRC $PODVM_IMAGE_PATH
次のコマンドを実行して、Pod 仮想マシン QCOW2 イメージを含むコンテナーを構築します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \ --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \ -f Dockerfile.podvm-oci .
$ docker build -t podvm-libvirt \ --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \
1 --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \
2 -f Dockerfile.podvm-oci .
6.2.4. ピア Pod シークレットの作成
ピア Pod のシークレットが空で、Cloud Credential Operator (CCO) がインストールされている場合、OpenShift sandboxed containers Operator は CCO を使用してシークレットを取得します。CCO をアンインストールした場合は、OpenShift sandboxed containers のピア Pod シークレットを手動で作成する必要があります。そうしないと、ピア Pod は動作しなくなります。
シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するための認証情報が保存されます。
デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。
前提条件
LIBVIRT_URI
。この値は、libvirt ネットワークのデフォルトのゲートウェイ IP アドレスです。この値を取得するには、libvirt ネットワーク設定を確認してください。注記libvirt がデフォルトのブリッジ仮想ネットワークを使用する場合は、以下のコマンドを実行して
LIBVIRT_URI
を取得できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}') LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
$ 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}') $ LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
-
REDHAT_OFFLINE_TOKEN
。Red Hat API トークン で RHEL イメージをダウンロードするためにこのトークンを生成している。
手順
次の例に従って
peer-pods-secret.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: CLOUD_PROVIDER: "libvirt" LIBVIRT_URI: "<libvirt_gateway_uri>" REDHAT_OFFLINE_TOKEN: "<rh_offline_token>"
apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: CLOUD_PROVIDER: "libvirt" LIBVIRT_URI: "<libvirt_gateway_uri>"
1 REDHAT_OFFLINE_TOKEN: "<rh_offline_token>"
2 以下のコマンドを実行してシークレットを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yaml
6.2.5. ピア Pod config map の作成
OpenShift sandboxed containers のピア Pod config map を作成する必要があります。
手順
以下の例に従って
peer-pods-cm.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "libvirt" PEERPODS_LIMIT_PER_NODE: "10" LIBVIRT_POOL: "<libvirt_pool>" LIBVIRT_VOL_NAME: "<libvirt_volume>" LIBVIRT_DIR_NAME: "/var/lib/libvirt/images/<directory_name>" LIBVIRT_NET: "default" DISABLECVM: "true"
apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "libvirt" PEERPODS_LIMIT_PER_NODE: "10"
1 LIBVIRT_POOL: "<libvirt_pool>"
2 LIBVIRT_VOL_NAME: "<libvirt_volume>"
3 LIBVIRT_DIR_NAME: "/var/lib/libvirt/images/<directory_name>"
4 LIBVIRT_NET: "default"
5 DISABLECVM: "true"
- 1
- ノードごとに作成できるピア Pod の最大数を指定します。デフォルト値は
10
です。 - 2
- libvirt プールを指定します。libvirt プールを手動で設定した場合は、KVM ホスト設定と同じ名前を使用します。
- 3
- libvirt ボリューム名を指定します。libvirt ボリュームを手動で設定した場合は、KVM ホスト設定と同じ名前を使用します。
- 4
.qcow2
や.raw
ファイルなどの仮想マシンのディスクイメージを保存するための libvirt ディレクトリーを指定します。libvirt に読み取りおよび書き込みアクセス権限があることを確認するには、libvirt ストレージディレクトリーのサブディレクトリーを使用します。デフォルトは/var/lib/libvirt/images/
です。- 5
- オプション: デフォルトのネットワークを使用しない場合は、libvirt ネットワークを指定します。
以下のコマンドを実行して config map を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
6.2.6. ピア Pod 仮想マシンイメージ config map の作成
ピア Pod 仮想マシン (VM) イメージの config map を作成する必要があります。
前提条件
- Red Hat Hybrid Cloud Console を使用してアクティベーションキーを作成する。
- オプション (Cloud API アダプターのカスタムイメージを使用する場合): イメージの名前、URL、ブランチまたはタグ。
手順
次の例に従って、
libvirt-podvm-image-cm.yaml
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ConfigMap metadata: name: libvirt-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: PODVM_DISTRO: "rhel" DOWNLOAD_SOURCES: "no" CAA_SRC: "https://github.com/confidential-containers/cloud-api-adaptor" CAA_REF: "main" CONFIDENTIAL_COMPUTE_ENABLED: "yes" UPDATE_PEERPODS_CM: "yes" ORG_ID: "<rhel_organization_id>" ACTIVATION_KEY: "<rhel_activation_key>" IMAGE_NAME: "<podvm_libvirt_image>" PODVM_IMAGE_URI: "oci::<image_repo_url>:<image_tag>::<image_path>" SE_BOOT: "true" BASE_OS_VERSION: "<rhel_image_os_version>"
apiVersion: v1 kind: ConfigMap metadata: name: libvirt-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: PODVM_DISTRO: "rhel" DOWNLOAD_SOURCES: "no"
1 CAA_SRC: "https://github.com/confidential-containers/cloud-api-adaptor"
2 CAA_REF: "main"
3 CONFIDENTIAL_COMPUTE_ENABLED: "yes" UPDATE_PEERPODS_CM: "yes" ORG_ID: "<rhel_organization_id>" ACTIVATION_KEY: "<rhel_activation_key>"
4 IMAGE_NAME: "<podvm_libvirt_image>"
5 PODVM_IMAGE_URI: "oci::<image_repo_url>:<image_tag>::<image_path>"
6 SE_BOOT: "true"
7 BASE_OS_VERSION: "<rhel_image_os_version>"
8 - 1
- カスタム Cloud API アダプターソースを使用して Pod 仮想マシンイメージを構築する場合は、
yes
を指定します。 - 2
- オプション: Cloud API アダプターのカスタムイメージの URL を指定します。
- 3
- オプション: Cloud API アダプターのカスタムイメージのブランチまたはタグを指定します。
- 4
- RHEL アクティベーションキーを指定します。
- 5
- カスタムピア Pod 仮想マシンイメージ名を指定します。
- 6
- オプション: カスタムピア Pod 仮想マシンイメージを作成した場合は、コンテナーレジストリー URL、イメージタグ、およびイメージパス (デフォルト:
/image/podvm.qcow2
) を指定します。それ以外の場合は、値を""
に設定します。 - 7
- デフォルト値
true
は、デフォルトの Operator ビルドイメージに対して IBM Secure Execution を有効にします。カスタムピア Pod 仮想マシンイメージを使用する場合は、false
に設定します。 - 8
- RHEL イメージのオペレーティングシステムのバージョンを指定します。IBM Z® Secure Execution は RHEL 9.5 以降のバージョンをサポートします。
以下のコマンドを実行して config map を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f libvirt-podvm-image-cm.yaml
$ oc apply -f libvirt-podvm-image-cm.yaml
libvirt プロバイダー用に libvirt Pod 仮想マシンイメージ config map が作成されます。
6.2.7. KVM ホストシークレットの作成
KVM ホストのシークレットを作成する必要があります。
手順
次のコマンドを実行して、SSH キーペアを生成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""
SSH 公開鍵を KVM ホストにコピーします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
1 - 1
- ピア Pod 仮想マシンが実行されている KVM ホストまたは LPAR の IP アドレスを指定します。たとえば、
192.168.122.1
です。
以下のコマンドを実行して
Secret
オブジェクトを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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_rsa
作成した SSH 鍵を削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow shred --remove id_rsa.pub id_rsa
$ shred --remove id_rsa.pub id_rsa
6.2.8. カスタムピア Pod 仮想マシンイメージの選択
Pod マニフェストにアノテーションを追加することで、ワークロード要件に合わせてカスタマイズされたカスタムピア Pod 仮想マシン (VM) イメージを選択できます。カスタムイメージは、ピア Podconfig map で指定されたデフォルトイメージをオーバーライドします。libvirt プールに新しい libvirt ボリュームを作成し、カスタムピア Pod 仮想マシンイメージを新しいボリュームにアップロードします。次に、カスタムピア Pod 仮想マシンイメージを使用するように Pod マニフェストを更新します。
前提条件
- 使用予定のカスタム Pod 仮想マシンイメージの ID が利用でき、クラウドプロバイダーまたはハイパーバイザーと互換性がある。
手順
次のコマンドを実行して、libvirt プールの名前を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>
1 - 1
- 既存の libvirt プール名を指定します。
次のコマンドを実行して、新しい libvirt ボリュームの名前を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export LIBVIRT_VOL_NAME=<new_libvirt_volume>
$ export LIBVIRT_VOL_NAME=<new_libvirt_volume>
次のコマンドを実行して、プールの libvirt ボリュームを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
$ virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
カスタムピア Pod 仮想マシンイメージを libvirt ボリュームにアップロードします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME <custom_podvm_image.qcow2> \ --pool $LIBVIRT_POOL --sparse
$ virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME <custom_podvm_image.qcow2> \
1 --pool $LIBVIRT_POOL --sparse
- 1
- カスタムピア Pod 仮想マシンイメージ名を指定します。
次の例に従って、
pod-manifest.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Pod metadata: name: pod-manifest annotations: io.katacontainers.config.hypervisor.image: "<new_libvirt_volume>" spec: runtimeClassName: kata-remote containers: - name: <example_container> image: registry.access.redhat.com/ubi9/ubi:9.3 command: ["sleep", "36000"]
apiVersion: v1 kind: Pod metadata: name: pod-manifest annotations: io.katacontainers.config.hypervisor.image: "<new_libvirt_volume>"
1 spec: runtimeClassName: kata-remote
2 containers: - name: <example_container>
3 image: registry.access.redhat.com/ubi9/ubi:9.3 command: ["sleep", "36000"]
以下のコマンドを実行して Pod を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f pod-manifest.yaml
$ oc apply -f pod-manifest.yaml
6.2.9. Kata エージェントポリシーのカスタマイズ
Kata エージェントポリシーは、Kata ランタイムで実行されている Pod のエージェント API 要求を制御するセキュリティーメカニズムです。このポリシーは Rego で記述され、Pod 仮想マシン (VM) 内の Kata エージェントによって適用され、許可または拒否される操作を決定します。
セキュリティーが問題にならない開発やテストなどの特定のユースケースでは、デフォルトのポリシーをカスタムポリシーで上書きできます。たとえば、コントロールプレーンを信頼できる環境で実行する場合があります。カスタムポリシーは、複数の方法で適用できます。
- ポリシーを Pod VM イメージに組み込む。
- ピア Pod の config map にパッチを適用する。
- ワークロード Pod YAML にアノテーションを追加する。
実稼働システムの場合、initdata を使用して Kata エージェントポリシーをオーバーライドする方法が推奨されます。以下の手順では、io.katacontainers.config.agent.policy
アノテーションを使用してカスタムポリシーを個々の Pod に適用します。ポリシーは Base64 でエンコードされた Rego 形式で提供されます。このアプローチでは、Pod 仮想マシンイメージを変更せずに、Pod 作成時にデフォルトのポリシーをオーバーライドします。
カスタムポリシーは、デフォルトのポリシーを完全に置き換えます。特定の API のみを変更するには、完全なポリシーを含め、関連するルールを調整します。
手順
カスタムポリシーを含む
policy.rego
ファイルを作成します。次の例では、デモ用にexec
とlog
を有効にした、設定可能なすべての API を示しています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow package agent_policy import future.keywords.in import input default CopyFileRequest := false default CreateContainerRequest := false default CreateSandboxRequest := true default DestroySandboxRequest := true default ExecProcessRequest := true # Enabled to allow exec API default GetOOMEventRequest := true default GuestDetailsRequest := true default OnlineCPUMemRequest := true default PullImageRequest := true default ReadStreamRequest := true # Enabled to allow log API default RemoveContainerRequest := true default RemoveStaleVirtiofsShareMountsRequest := true default SignalProcessRequest := true default StartContainerRequest := true default StatsContainerRequest := true default TtyWinResizeRequest := true default UpdateEphemeralMountsRequest := true default UpdateInterfaceRequest := true default UpdateRoutesRequest := true default WaitProcessRequest := true default WriteStreamRequest := false
package agent_policy import future.keywords.in import input default CopyFileRequest := false default CreateContainerRequest := false default CreateSandboxRequest := true default DestroySandboxRequest := true default ExecProcessRequest := true # Enabled to allow exec API default GetOOMEventRequest := true default GuestDetailsRequest := true default OnlineCPUMemRequest := true default PullImageRequest := true default ReadStreamRequest := true # Enabled to allow log API default RemoveContainerRequest := true default RemoveStaleVirtiofsShareMountsRequest := true default SignalProcessRequest := true default StartContainerRequest := true default StatsContainerRequest := true default TtyWinResizeRequest := true default UpdateEphemeralMountsRequest := true default UpdateInterfaceRequest := true default UpdateRoutesRequest := true default WaitProcessRequest := true default WriteStreamRequest := false
このポリシーは、
exec
(ExecProcessRequest
) およびlog
(ReadStreamRequest
) API を有効にします。必要に応じて、true
またはfalse
の値を調整してポリシーをさらにカスタマイズします。次のコマンドを実行して、
policy.rego
ファイルを Base64 でエンコードされた文字列に変換します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 -w0 policy.rego
$ base64 -w0 policy.rego
yaml ファイルで使用するために出力を保存します。
Base64 でエンコードされたポリシーを
my-pod.yaml
Pod 仕様ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: Pod metadata: name: <pod_name> annotations: io.katacontainers.config.agent.policy: <base64_encoded_policy> spec: runtimeClassName: kata-remote containers: - name: <container_name> image: registry.access.redhat.com/ubi9/ubi:latest command: - sleep - "36000" securityContext: privileged: false seccompProfile: type: RuntimeDefault
apiVersion: v1 kind: Pod metadata: name: <pod_name> annotations: io.katacontainers.config.agent.policy: <base64_encoded_policy> spec: runtimeClassName: kata-remote containers: - name: <container_name> image: registry.access.redhat.com/ubi9/ubi:latest command: - sleep - "36000" securityContext: privileged: false seccompProfile: type: RuntimeDefault
以下のコマンドを実行して Pod マニフェストを適用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f my-pod.yaml
$ oc apply -f my-pod.yaml
6.2.10. KataConfig カスタムリソースの作成
ワーカーノードに kata-remote
をランタイムクラスとしてインストールするには、KataConfig
カスタムリソース (CR) を作成する必要があります。
KataConfig
CR を作成すると、OpenShift Sandboxed Containers Operator がトリガーされ、以下が実行されます。
-
デフォルト設定で
kata-remote
という名前のRuntimeClass
CR を作成します。これにより、RuntimeClassName
フィールドの CR を参照して、kata-remote
をランタイムとして使用するようにワークロードを設定できるようになります。この CR は、ランタイムのリソースオーバーヘッドも指定します。
OpenShift Sandboxed Containers は、kata-remote
をプライマリーランタイムとしてではなく、クラスター上の セカンダリーオプション のランタイムとしてインストールします。
KataConfig
CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。再起動時間を妨げる要因は次のとおりです。
- より多くのワーカーノードを持つ大規模な OpenShift Container Platform デプロイメント。
- BIOS および診断ユーティリティーが有効である。
- SSD ではなくハードディスクドライブにデプロイしている。
- 仮想ノードではなく、ベアメタルなどの物理ノードにデプロイしている。
- CPU とネットワークが遅い。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
以下の例に従って
example-kataconfig.yaml
マニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: enablePeerPods: true logLevel: info # kataConfigPoolSelector: # matchLabels: # <label_key>: '<label_value>'
apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: enablePeerPods: true logLevel: info # kataConfigPoolSelector: # matchLabels: # <label_key>: '<label_value>'
1 - 1
- オプション: 特定のノードに
kata-remote
をインストールするためにノードラベルを適用した場合は、キーと値を指定します (例:osc: 'true')
。
次のコマンドを実行して、
KataConfig
CR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yaml
新しい
KataConfig
CR が作成され、ワーカーノードにkata-remote
がランタイムクラスとしてインストールされます。インストールを確認する前に、
kata-remote
のインストールが完了し、ワーカーノードが再起動するまで待ちます。次のコマンドを実行して、インストールの進行状況を監視します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
kataNodes
の下にあるすべてのワーカーのステータスがinstalled
で、理由を指定せずにInProgress
の条件がFalse
の場合、kata-remote
はクラスターにインストールされます。次のコマンドを実行して、ピア Pod イメージが構築され、libvirt ボリュームにアップロードされたことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: peer-pods-cm Namespace: openshift-sandboxed-containers-operator Labels: <none> Annotations: <none> Data ==== CLOUD_PROVIDER: libvirt BinaryData ==== Events: <none>
Name: peer-pods-cm Namespace: openshift-sandboxed-containers-operator Labels: <none> Annotations: <none> Data ==== CLOUD_PROVIDER: libvirt BinaryData ==== Events: <none>
次のコマンドを実行して、
kata-oc
マシン設定プールの進行状況を監視し、UPDATEDMACHINECOUNT
がMACHINECOUNT
と等しいときにUPDATED
状態であることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow watch oc get mcp/kata-oc
$ watch oc get mcp/kata-oc
次のコマンドを実行してデーモンセットを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
$ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
次のコマンドを実行してランタイムクラスを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get runtimeclass
$ oc get runtimeclass
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
6.2.11. ワークロードオブジェクトの設定
次の Pod テンプレートオブジェクトのランタイムクラスとして kata-remote
を設定して、OpenShift sandboxed containers のワークロードオブジェクトを設定する必要があります。
-
Pod
オブジェクト -
ReplicaSet
オブジェクト -
ReplicationController
オブジェクト -
StatefulSet
オブジェクト -
Deployment
オブジェクト -
DeploymentConfig
オブジェクト
Operator namespace にワークロードをデプロイしないでください。これらのリソース専用の namespace を作成します。
前提条件
-
KataConfig
カスタムリソース (CR) を作成している。
手順
次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに
spec.runtimeClassName: kata-remote
を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。
検証
-
Pod テンプレートオブジェクトの
spec.runtimeClassName
フィールドを検査します。値がkata-remote
の場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。