5.3. コマンドラインを使用した OpenShift Sandboxed Containers のデプロイ


コマンドラインインターフェイス (CLI) を使用して次のタスクを実行することにより、Google Cloud に OpenShift sandboxed containers をデプロイできます。

  1. OpenShift Sandboxed Containers Operator を再インストールします。
  2. オプション: 各ワーカーノードで実行されている仮想マシンの数を変更します。
  3. オプション: ピア Pod との内部通信を許可するには、ポート 15150 を有効にします。
  4. オプション: OpenShift sandboxed containers Operator とともにインストールされる Cloud Credential Operator をアンインストールした場合は、ピア Pod シークレットを作成します。
  5. ピア Pod の config map を作成します。
  6. Pod 仮想マシンイメージ config map を作成します。
  7. オプション: Kata エージェントポリシーをカスタマイズします。
  8. KataConfig カスタムリソースを作成します。
  9. OpenShift Sandboxed Containers のワークロードオブジェクトを設定します。

5.3.1. OpenShift Sandboxed Containers Operator のインストール

CLI を使用して、OpenShift Sandboxed Containers Operator をインストールできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. osc-namespace.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-sandboxed-containers-operator
  2. 以下のコマンドを実行して namespace を作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-namespace.yaml
  3. osc-operatorgroup.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: sandboxed-containers-operator-group
      namespace: openshift-sandboxed-containers-operator
    spec:
      targetNamespaces:
      - openshift-sandboxed-containers-operator
  4. 以下のコマンドを実行して Operator グループを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-operatorgroup.yaml
  5. osc-subscription.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    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
  6. 次のコマンドを実行して、サブスクリプションを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-subscription.yaml
  7. 次のコマンドを実行して、Operator が正常にインストールされていることを確認します。

    Copy to Clipboard Toggle word wrap
    $ oc get csv -n openshift-sandboxed-containers-operator

    このコマンドが完了するまでに数分かかる場合があります。

  8. 次のコマンドを実行してプロセスを監視します。

    Copy to Clipboard Toggle word wrap
    $ watch oc get csv -n openshift-sandboxed-containers-operator

    出力例

    Copy to Clipboard Toggle word wrap
    NAME                             DISPLAY                                  VERSION             REPLACES                   PHASE
    openshift-sandboxed-containers   openshift-sandboxed-containers-operator  1.9.0    1.8.1        Succeeded

5.3.2. Google Cloud のポート 15150 の有効化

Compute Engine で実行されているピア Pod との内部通信を許可するには、OpenShift Container Platform でポート 15150 を有効にする必要があります。

前提条件

  • Google Cloud コマンドラインインターフェイス (CLI) ツールがインストールされている。
  • roles/container.admin ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。

手順

  1. 次のコマンドを実行して、プロジェクト ID 変数を設定します。

    Copy to Clipboard Toggle word wrap
    $ export GCP_PROJECT_ID="<project_id>"
  2. 次のコマンドを実行して Google Cloud にログインします。

    Copy to Clipboard Toggle word wrap
    $ gcloud auth login
  3. 次のコマンドを実行して、Google Cloud プロジェクト ID を設定します。

    Copy to Clipboard Toggle word wrap
    $ gcloud config set project ${GCP_PROJECT_ID}
  4. 次のコマンドを実行してポート 15150 を開きます。

    Copy to Clipboard Toggle word wrap
    $ gcloud compute firewall-rules create allow-port-15150-restricted \
       --project=${GCP_PROJECT_ID} \
       --network=default \
       --allow=tcp:15150 \
       --source-ranges=<external_ip_cidr-1>[,<external_ip_cidr-2>,...] 
    1
    1
    1 つ以上の IP アドレスまたは範囲を CIDR 形式でコンマで区切って指定します。たとえば、203.0.113.5/32,198.51.100.0/24 です。

検証

  • 次のコマンドを実行して、ポート 15150 が開いていることを確認します。

    Copy to Clipboard Toggle word wrap
    $ gcloud compute firewall-rule list

5.3.3. ピア Pod シークレットの作成

ピア Pod のシークレットが空で、Cloud Credential Operator (CCO) がインストールされている場合、OpenShift sandboxed containers Operator は CCO を使用してシークレットを取得します。CCO をアンインストールした場合は、OpenShift sandboxed containers のピア Pod シークレットを手動で作成する必要があります。そうしないと、ピア Pod は動作しなくなります。

シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するための認証情報が保存されます。

デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。

前提条件

  • コンピュート Engine リソースを管理するための、roles/compute.instanceAdmin.v1 などの権限を持つ Google Cloud サービスアカウントを作成した。
  • Google Cloud SDK (gcloud) をインストールし、サービスアカウントで認証した。

手順

  1. 次のコマンドを実行して、Google Cloud サービスアカウントキーを作成し、JSON ファイルとして保存します。

    Copy to Clipboard Toggle word wrap
    $ gcloud iam service-accounts keys create <key_filename>.json \
      --iam-account=<service_account_email_address>
  2. 次のコマンドを実行して、JSON ファイルを 1 行の文字列に変換します。

    Copy to Clipboard Toggle word wrap
    $ cat <key_file>.json | jq -c .
  3. 次の例に従って peer-pods-secret.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      GCP_CREDENTIALS: "<gc_service_account_key_json>" 
    1
    1
    <gc_service_account_key_json> は、Google Cloud サービスアカウントキーの JSON ファイルから作成した 1 行の文字列に置き換えます。
  4. 以下のコマンドを実行してシークレットを作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f peer-pods-secret.yaml

5.3.4. ピア Pod config map の作成

OpenShift sandboxed containers のピア Pod config map を作成する必要があります。

手順

  1. Compute Engine インスタンスにログインして、次の環境変数を設定します。

    1. 次のコマンドを実行してプロジェクト ID を取得します。

      Copy to Clipboard Toggle word wrap
      $ GCP_PROJECT_ID=$(gcloud config get-value project)
    2. 次のコマンドを実行してゾーンを取得します。

      Copy to Clipboard Toggle word wrap
      $ GCP_ZONE=$(gcloud config get-value compute/zone)
    3. 次のコマンドを実行して、ネットワーク名のリストを取得します。

      Copy to Clipboard Toggle word wrap
      $ gcloud compute networks list --format="value(name)"
    4. 次のコマンドを実行してネットワークを指定します。

      Copy to Clipboard Toggle word wrap
      $ GCP_NETWORK=<network_name> 
      1
      1
      <network_name> は、ネットワークの名前に置き換えます。
  2. 以下の例に従って peer-pods-cm.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "gcp"
      PROXY_TIMEOUT: "5m"
      GCP_PROJECT_ID: "<gcp_project_id>" 
    1
    
      GCP_ZONE: "<gcp_zone>" 
    2
    
      GCP_MACHINE_TYPE: "e2-medium" 
    3
    
      GCP_NETWORK: "<gcp_network>" 
    4
    
      PEERPODS_LIMIT_PER_NODE: "10" 
    5
    
      TAGS: "key1=value1,key2=value2" 
    6
    
      DISABLECVM: "true"
    1
    使用するプロジェクト ID を指定します。
    2
    取得した GCP_ZONE 値を指定します。このゾーンはワークロードを実行します。
    3
    ワークロードの要件に一致するマシンタイプを指定します。
    4
    取得した GCP_NETWORK 値を指定します。
    5
    ノードごとに作成できるピア Pod の最大数を指定します。デフォルト値は 10 です。
    6
    Pod 仮想マシンインスタンスの key:value ペアとしてカスタムタグを設定して、ピア Pod のコストを追跡したり、異なるクラスター内のピア Pod を識別したりできます。
  3. 以下のコマンドを実行して config map を作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f peer-pods-cm.yaml

5.3.5. ピア Pod VM イメージの作成

QCOW2 ピア Pod 仮想マシン (VM) イメージを作成する必要があります。

前提条件

  • podman がインストールされている。
  • コンテナーレジストリーにアクセスできる。

手順

  1. 次のコマンドを実行して、OpenShift Sandboxed Containers リポジトリーのクローンを作成します。

    Copy to Clipboard Toggle word wrap
    $ git clone https://github.com/openshift/sandboxed-containers-operator.git
  2. 次のコマンドを実行して、sandboxed-containers-operator/config/peerpods/podvm/bootc に移動します。

    Copy to Clipboard Toggle word wrap
    $ cd sandboxed-containers-operator/config/peerpods/podvm/bootc
  3. 次のコマンドを実行して、registry.redhat.io にログインします。

    Copy to Clipboard Toggle word wrap
    $ podman login registry.redhat.io

    podman build プロセスはレジストリーでホストされる Containerfile.rhel コンテナーイメージにアクセスする必要があるため、registry.redhat.io にログインする必要があります。

  4. 次のコマンドを実行して、コンテナーレジストリーのイメージパスを設定します。

    Copy to Clipboard Toggle word wrap
    $ IMG="<container_registry_url>/<username>/podvm-bootc:latest"
  5. 次のコマンドを実行して、Pod 仮想マシン bootc イメージをビルドします。

    Copy to Clipboard Toggle word wrap
    $ podman build -t ${IMG} -f Containerfile.rhel .
  6. 次のコマンドを実行して、コンテナーレジストリーにログインします。

    Copy to Clipboard Toggle word wrap
    $ podman login <container_registry_url>
  7. 次のコマンドを実行して、イメージをコンテナーレジストリーにプッシュします。

    Copy to Clipboard Toggle word wrap
    $ podman push ${IMG}

    テストや開発のために、イメージを公開できます。

  8. 次のコマンドを実行して、podvm-bootc イメージを確認します。

    Copy to Clipboard Toggle word wrap
    $ podman images

    出力例

    Copy to Clipboard Toggle word wrap
    REPOSITORY                               TAG     IMAGE ID      CREATED         SIZE
    example.com/example_user/podvm-bootc     latest  88ddab975a07  2 seconds ago   1.82 GB

5.3.6. ピア Pod 仮想マシンイメージ config map の作成

Pod 仮想マシン (VM) イメージの config map を作成します。

手順

  1. 次の内容を含む、gc-podvm-image-cm.yaml という名前の Pod 仮想マシンイメージの config map マニフェストを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gc-podvm-image-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      IMAGE_TYPE: pre-built
      PODVM_IMAGE_URI: <container_registry_url>/<username>/podvm-bootc:latest
      IMAGE_BASE_NAME: "podvm-image"
      IMAGE_VERSION: "0-0-0"
    
      INSTALL_PACKAGES: "no"
      DISABLE_CLOUD_CONFIG: "true"
      UPDATE_PEERPODS_CM: "yes"
      BOOT_FIPS: "no"
    
      BOOTC_BUILD_CONFIG: |
        [[customizations.user]]
        name = "peerpod"
        password = "peerpod"
        groups = ["wheel", "root"]
    
        [[customizations.filesystem]]
        mountpoint = "/"
        minsize = "5 GiB"
    
        [[customizations.filesystem]]
        mountpoint = "/var/kata-containers"
        minsize = "15 GiB"
  2. 以下のコマンドを実行して config map を作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f gc-podvm-image-cm.yaml

5.3.7. 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 のみを変更するには、完全なポリシーを含め、関連するルールを調整します。

手順

  1. カスタムポリシーを含む policy.rego ファイルを作成します。次の例では、デモ用に execlog を有効にした、設定可能なすべての API を示しています。

    Copy to Clipboard Toggle word wrap
    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 の値を調整してポリシーをさらにカスタマイズします。

  2. 次のコマンドを実行して、policy.rego ファイルを Base64 でエンコードされた文字列に変換します。

    Copy to Clipboard Toggle word wrap
    $ base64 -w0 policy.rego

    yaml ファイルで使用するために出力を保存します。

  3. Base64 でエンコードされたポリシーを my-pod.yaml Pod 仕様ファイルに追加します。

    Copy to Clipboard Toggle word wrap
    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
  4. 以下のコマンドを実行して Pod マニフェストを適用します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f my-pod.yaml

5.3.8. 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 ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. 以下の例に従って example-kataconfig.yaml マニフェストファイルを作成します。

    Copy to Clipboard Toggle word wrap
    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')
  2. 次のコマンドを実行して、KataConfig CR を作成します。

    Copy to Clipboard Toggle word wrap
    $ oc apply -f example-kataconfig.yaml

    新しい KataConfig CR が作成され、ワーカーノードに kata-remote がランタイムクラスとしてインストールされます。

    インストールを確認する前に、kata-remote のインストールが完了し、ワーカーノードが再起動するまで待ちます。

  3. 次のコマンドを実行して、インストールの進行状況を監視します。

    Copy to Clipboard Toggle word wrap
    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"

    kataNodes の下にあるすべてのワーカーのステータスが installed で、理由を指定せずに InProgress の条件が False の場合、kata-remote はクラスターにインストールされます。

  4. 次のコマンドを実行してデーモンセットを確認します。

    Copy to Clipboard Toggle word wrap
    $ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
  5. 次のコマンドを実行してランタイムクラスを確認します。

    Copy to Clipboard Toggle word wrap
    $ oc get runtimeclass

    出力例

    Copy to Clipboard Toggle word wrap
    NAME             HANDLER          AGE
    kata             kata             152m
    kata-remote      kata-remote      152m

Pod VM イメージの確認

kata-remote がクラスターにインストールされると、OpenShift sandboxed containers Operator は、ピア Pod の作成に使用される Pod 仮想マシンイメージを作成します。イメージがクラウドインスタンス上に作成されるため、このプロセスには時間がかかる場合があります。クラウドプロバイダー用に作成した config map を確認し、Pod 仮想マシンイメージが正常に作成されたことを確認できます。

手順

  1. ピア Pod 用に作成した config map を取得します。

    Copy to Clipboard Toggle word wrap
    $ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
  2. YAML ファイルの status スタンザを確認します。

    PODVM_IMAGE_NAME パラメーターが入力されている場合は、Pod 仮想マシンイメージが正常に作成されています。

トラブルシューティング

  1. 次のコマンドを実行してイベントログを取得します。

    Copy to Clipboard Toggle word wrap
    $ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
  2. 次のコマンドを実行して、ジョブログを取得します。

    Copy to Clipboard Toggle word wrap
    $ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation

問題を解決できない場合は、Red Hat サポートケースを送信し、両方のログの出力を添付してください。

5.3.9. ワークロードオブジェクトの設定

次の Pod テンプレートオブジェクトのランタイムクラスとして kata-remote を設定して、OpenShift sandboxed containers のワークロードオブジェクトを設定する必要があります。

  • Pod オブジェクト
  • ReplicaSet オブジェクト
  • ReplicationController オブジェクト
  • StatefulSet オブジェクト
  • Deployment オブジェクト
  • DeploymentConfig オブジェクト
重要

Operator namespace にワークロードをデプロイしないでください。これらのリソース専用の namespace を作成します。

前提条件

  • KataConfig カスタムリソース (CR) を作成している。

手順

  1. 次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに spec.runtimeClassName: kata-remote を追加します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...

    OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。

検証

  • Pod テンプレートオブジェクトの spec.runtimeClassName フィールドを検査します。値が kata-remote の場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.