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


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

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

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

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

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

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

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

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

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

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

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

    $ 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
    Copy to Clipboard Toggle word wrap

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

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

前提条件

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

手順

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

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

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

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

    $ 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
    Copy to Clipboard Toggle word wrap
    1
    1 つ以上の IP アドレスまたは範囲を CIDR 形式でコンマで区切って指定します。たとえば、203.0.113.5/32,198.51.100.0/24 です。

検証

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

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

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 ファイルとして保存します。

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

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

    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
    Copy to Clipboard Toggle word wrap
    1
    <gc_service_account_key_json> は、Google Cloud サービスアカウントキーの JSON ファイルから作成した 1 行の文字列に置き換えます。
  4. 以下のコマンドを実行してシークレットを作成します。

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

5.3.4. ピア Pod config map の作成

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

手順

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

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

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

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

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

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

    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"
    Copy to Clipboard Toggle word wrap
    1
    使用するプロジェクト ID を指定します。
    2
    取得した GCP_ZONE 値を指定します。このゾーンはワークロードを実行します。
    3
    ワークロードの要件に一致するマシンタイプを指定します。
    4
    取得した GCP_NETWORK 値を指定します。
    5
    ノードごとに作成できるピア Pod の最大数を指定します。デフォルト値は 10 です。
    6
    Pod 仮想マシンインスタンスの key:value ペアとしてカスタムタグを設定して、ピア Pod のコストを追跡したり、異なるクラスター内のピア Pod を識別したりできます。
  3. 以下のコマンドを実行して config map を作成します。

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

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

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

前提条件

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

手順

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

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

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

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

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

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

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

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

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

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

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

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

    $ 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
    Copy to Clipboard Toggle word wrap

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

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

手順

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

    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"
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して config map を作成します。

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

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 を示しています。

    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
    Copy to Clipboard Toggle word wrap

    このポリシーは、exec (ExecProcessRequest) および log (ReadStreamRequest) API を有効にします。必要に応じて、true または false の値を調整してポリシーをさらにカスタマイズします。

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

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

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

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

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

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

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 マニフェストファイルを作成します。

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: example-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
    #  kataConfigPoolSelector:
    #    matchLabels:
    #      <label_key>: '<label_value>' 
    1
    Copy to Clipboard Toggle word wrap
    1
    オプション: 特定のノードに kata-remote をインストールするためにノードラベルを適用した場合は、キーと値を指定します (例: osc: 'true')
  2. 次のコマンドを実行して、KataConfig CR を作成します。

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

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

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

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

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

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

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

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

    $ oc get runtimeclass
    Copy to Clipboard Toggle word wrap

    出力例

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

5.3.9. ノードあたりのピア Pod 仮想マシン数の変更

peerpodConfig カスタムリソース(CR)を編集して、ノードごとにピア Pod 仮想マシン(VM)の制限を変更できます。

手順

  1. 次のコマンドを実行して、現在の制限を確認します。

    $ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \
    -o jsonpath='{.spec.limit}{"\n"}'
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、peerpodConfig CR の limit 属性を変更します。

    $ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \
    --type merge --patch '{"spec":{"limit":"<value>"}}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    <value> は、定義する制限に置き換えます。
Pod VM イメージの確認

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

手順

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

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

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

トラブルシューティング

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

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

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

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

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

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

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

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

前提条件

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

手順

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

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

    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