第3章 パブリッククラウドへのワークロードのデプロイ


OpenShift Sandboxed Containers のワークロードを AWS Cloud Computing Services および Microsoft Azure Cloud Computing Services にデプロイできます。

クラスターの要件

  • Red Hat OpenShift Container Platform 4.13 以降がインストールされている。
  • クラスターには少なくとも 1 つのワーカーノードがある。

3.1. AWS へのワークロードのデプロイ

OpenShift Container Platform Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して、OpenShift sandboxed containers のワークロードを AWS クラウドコンピューティングサービスにデプロイできます。

デプロイメントワークフロー

  1. ポートを有効にします。
  2. AWS のシークレットを作成します。
  3. AWS の config map を作成します。
  4. KataConfig カスタムリソースを作成します。
  5. オプション: ノードごとのピア Pod 仮想マシン制限を変更します。
  6. kata-remote ランタイムクラスを使用するようにワークロードオブジェクトを設定します。

3.1.1. 環境の準備

環境を準備するには、以下の手順を実行します。

  1. クラスターに十分なリソースがあることを確認します。
  2. OpenShift Sandboxed Containers Operator を再インストールします。
  3. ピア Pod との内部通信を許可するには、ポート 15150 と 9000 を有効にします。

3.1.1.1. リソース要件

ピア Pod 仮想マシン (VM) には、次の 2 つの場所にリソースが必要です。

  • ワーカーノード。ワーカーノードは、メタデータ、Kata shim リソース (containerd-shim-kata-v2)、リモートハイパーバイザーリソース (cloud-api-adaptor)、およびワーカーノードとピア Pod VM 間のトンネル設定を保存します。
  • クラウドインスタンス。これは、クラウド内で実行されている実際のピア Pod VM です。

Kubernetes ワーカーノードで使用される CPU およびメモリーリソースは、ピア Pod の作成に使用される RuntimeClass (kata-remote) 定義に含まれる Pod オーバーヘッド によって処理されます。

クラウド内で実行されているピア Pod VM の合計数は、Kubernetes ノード拡張リソースとして定義されます。この制限はノードごとであり、peerpodConfig カスタムリソース (CR) の limit 属性によって設定されます。

peerpodconfig-openshift という名前の peerpodConfig CR は、kataConfig CR を作成してピア Pod を有効にするときに作成され、openshift-sandboxed-containers-operator namespace に配置されます。

次の peerpodConfig CR の例は、デフォルトの spec 値を示しています。

apiVersion: confidentialcontainers.org/v1alpha1
kind: PeerPodConfig
metadata:
  name: peerpodconfig-openshift
  namespace: openshift-sandboxed-containers-operator
spec:
  cloudSecretName: peer-pods-secret
  configMapName: peer-pods-cm
  limit: "10" 
1

  nodeSelector:
    node-role.kubernetes.io/kata-oc: ""
Copy to Clipboard Toggle word wrap
1
デフォルトの制限は、ノードごとに 10 VM です。

拡張リソースの名前は kata.peerpods.io/vm で、Kubernetes スケジューラーが容量の追跡とアカウンティングを処理できるようにします。

ご使用の環境の要件に基づいて、ノードごとの制限を編集できます。詳細は、「ピア Pod のノードごとの VM 制限の変更」を参照してください。

mutating Webhook により、拡張リソース kata.peerpods.io/vm が Pod 仕様に追加されます。また、リソース固有のエントリーが存在する場合は、Pod 仕様から削除されます。こうすることで、Kubernetes スケジューラーがこれらの拡張リソースを考慮できるようになり、リソースが利用可能な場合にのみピア Pod がスケジュールされるようになります。

mutating Webhook は、次のように Kubernetes Pod を変更します。

  • mutating Webhook は、TARGET_RUNTIME_CLASS 環境変数で指定された RuntimeClassName の想定値であるか、Pod をチェックします。Pod 仕様の値が TARGET_RUNTIME_CLASS の値と一致しない場合、Webhook は Pod を変更せずに終了します。
  • RuntimeClassName の値が一致する場合、Webhook は Pod 仕様に次の変更を加えます。

    1. この Webhook は、Pod 内のすべてのコンテナーおよび初期化コンテナーの resources フィールドからすべてのリソース仕様を削除します。
    2. Webhook は、Pod 内の最初のコンテナーのリソースフィールドを変更して、拡張リソース (kata.peerpods.io/vm) を仕様に追加します。拡張リソース kata.peerpods.io/vm は Kubernetes スケジューラーによってアカウンティング目的で使用されます。
注記

mutating Webhook は、OpenShift Container Platform の特定のシステム namespace が変更されないように除外します。これらのシステム namespace でピア Pod が作成された場合、Pod の仕様に拡張リソースが含まれていない限り、Kubernetes 拡張リソースを使用したリソースアカウンティングは機能しません。

ベストプラクティスとして、特定の namespace でのみピア Pod の作成を許可するクラスター全体のポリシーを定義します。

3.1.1.2. AWS のポートの有効化

AWS で実行されるピア Pod との内部通信を許可するには、ポート 15150 および 9000 を有効にする必要があります。

前提条件

  • OpenShift Sandboxed Containers Operator をインストールしている。
  • AWS コマンドラインツールがインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. OpenShift Container Platform クラスターにログインし、インスタンス ID を取得します。

    $ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
    Copy to Clipboard Toggle word wrap
  2. AWS リージョンを取得します。

    $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')
    Copy to Clipboard Toggle word wrap
  3. セキュリティーグループ ID を取得し、配列に保存します。

    $ AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))
    Copy to Clipboard Toggle word wrap
  4. 各セキュリティーグループ ID について、ピア Pod シムが kata-agent 通信にアクセスできるように承認し、ピア Pod トンネルを設定します。

    $ for AWS_SG_ID in "${AWS_SG_IDS[@]}"; do
    
        aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 15150 --source-group $AWS_SG_ID --region $AWS_REGION
    
        aws ec2 authorize-security-group-ingress --group-id $AWS_SG_ID --protocol tcp --port 9000 --source-group $AWS_SG_ID --region $AWS_REGION
    
    done
    Copy to Clipboard Toggle word wrap

これでポートが有効になりました。

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

OpenShift Container Platform Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して、OpenShift sandboxed containers Operator をインストールできます。

3.1.1.3.1. Web コンソールを使用した Operator のインストール

Red Hat OpenShift Container Platform Web コンソールを使用して、OpenShift sandboxed containers Operator をインストールできます。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールで、Operators OperatorHub ページに移動します。
  2. Filter by keyword フィールドに OpenShift sandboxed containers と入力します。
  3. OpenShift sandboxed containers Operator タイルを選択し、Install をクリックします。
  4. Install Operator ページで、利用可能な Update Channel オプションの一覧から stable を選択します。
  5. Installed NamespaceOperator recommend Namespace が選択されていることを確認します。これにより、Operator が必須の openshift-sandboxed-containers-operator namespace にインストールされます。この namespace がまだ存在しない場合は、自動的に作成されます。

    注記

    OpenShift Sandboxed Containers Operator を openshift-sandboxed-containers-operator 以外の namespace にインストールしようとすると、インストールに失敗します。

  6. Approval StrategyAutomatic が選択されていることを確認します。Automatic がデフォルト値であり、新しい z-stream リリースが利用可能になると、OpenShift Sandboxed Containers への自動更新が有効になります。
  7. Install をクリックします。

これで、OpenShift Sandboxed Containers Operator がクラスターにインストールされました。

検証

  1. Operators Installed Operators に移動します。
  2. OpenShift Sandboxed Containers Operator が表示されることを確認します。
3.1.1.3.2. CLI を使用した Operator のインストール

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

前提条件

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

手順

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

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

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

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

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

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-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.6.0
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行して、サブスクリプションを作成します。

    $ oc create -f Subscription.yaml
    Copy to Clipboard Toggle word wrap

これで、OpenShift Sandboxed Containers Operator がクラスターにインストールされました。

検証

  • 次のコマンドを実行して、Operator が正常にインストールされていることを確認します。

    $ 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.6.0    1.5.3        Succeeded
    Copy to Clipboard Toggle word wrap

3.1.2. Web コンソールを使用したワークロードのデプロイ

Web コンソールを使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。

3.1.2.1. シークレットの作成

OpenShift Container Platform クラスターに Secret オブジェクトを作成する必要があります。シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するためのクラウドプロバイダーの認証情報が保存されます。デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。

前提条件

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

    これらの値は、AWS コンソールで生成できます。

手順

  1. OpenShift Container Platform Web コンソールで、Operators Installed Operators に移動します。
  2. OpenShift sandboxed containers Operator タイルをクリックします。
  3. 右上隅のインポートアイコン (+) をクリックします。
  4. Import YAML ウィンドウに、次の YAML マニフェストを貼り付けます。

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AWS_ACCESS_KEY_ID: "<aws_access_key>" 
    1
    
      AWS_SECRET_ACCESS_KEY: "<aws_secret_access_key>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    AWS_ACCESS_KEY_ID 値を指定します。
    2
    AWS_SECRET_ACCESS_KEY 値を指定します。
  5. Save をクリックして変更を適用します。
注記

ピア Pod シークレットを更新する場合は、peerpodconfig-ctrl-caa-daemon DaemonSet を再起動して変更を適用する必要があります。

シークレットを更新したら、Save をクリックして変更を適用します。次に、以下のコマンドを実行して cloud-api-adaptor Pod を再起動します。

$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
Copy to Clipboard Toggle word wrap

デーモンセットを再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。

検証

  • Workloads Secrets に移動して、シークレットを表示します。

3.1.2.2. config map の作成

クラウドプロバイダーの OpenShift Container Platform クラスターに config map を作成する必要があります。

Amazon Machine Image (AMI) ID を設定する必要があります。この値は、config map を作成する前に取得できます。

手順

  1. AWS インスタンスから以下の値を取得します。

    1. インスタンス ID を取得して記録します。

      $ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
      Copy to Clipboard Toggle word wrap

      これは、シークレットオブジェクトの他の値を取得するために使用されます。

    2. AWS リージョンを取得して記録します。

      $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
      Copy to Clipboard Toggle word wrap
    3. AWS サブネット ID を取得して記録します。

      $ AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
      Copy to Clipboard Toggle word wrap
    4. AWS VPC ID を取得して記録します。

      $ AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
      Copy to Clipboard Toggle word wrap
    5. AWS セキュリティーグループ ID を取得して記録します。

      $ AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text)
      && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
      Copy to Clipboard Toggle word wrap
  2. OpenShift Container Platform Web コンソールで、Operators Installed Operators に移動します。
  3. Operator のリストから OpenShift Sandboxed Containers Operator を選択します。
  4. 右上隅にあるインポートアイコン (+) をクリックします。
  5. Import YAML ウィンドウに、次の YAML マニフェストを貼り付けます。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "aws"
      VXLAN_PORT: "9000"
      PODVM_INSTANCE_TYPE: "t3.medium" 
    1
    
      PODVM_INSTANCE_TYPES: "t2.small,t2.medium,t3.large" 
    2
    
      PROXY_TIMEOUT: "5m"
      DISABLECVM: "true"
      PODVM_AMI_ID: "<podvm_ami_id>" 
    3
    
      AWS_REGION: "<aws_region>" 
    4
    
      AWS_SUBNET_ID: "<aws_subnet_id>" 
    5
    
      AWS_VPC_ID: "<aws_vpc_id>" 
    6
    
      AWS_SG_IDS: "<aws_sg_ids>" 
    7
    Copy to Clipboard Toggle word wrap
    1
    ワークロードでタイプが定義されていない場合に使用されるデフォルトのインスタンスタイプを定義します。
    2
    Pod の作成時に指定できるすべてのインスタンスタイプを一覧表示します。これにより、メモリーと CPU をあまり必要としないワークロードには小さいインスタンスタイプを定義したり、ワークロードが大きい場合は大きいインスタンスタイプを定義したりすることができます。
    3
    オプション: デフォルトでは、この値は、クラスターの認証情報に基づく AMI ID を使用して KataConfig CR を実行するときに入力されます。独自の AMI を作成する場合は、正しい AMI ID を指定します。
    4
    取得した AWS_REGION 値を指定します。
    5
    取得した AWS_SUBNET_ID 値を指定します。
    6
    取得した AWS_VPC_ID 値を指定します。
    7
    取得した AWS_SG_IDS 値を指定します。
  6. Save をクリックして変更を適用します。

    クラウドプロバイダー用の config map が作成されます。

注記

ピア Pod config map を更新する場合、変更を適用するために peerpodconfig-ctrl-caa-daemon デーモンセットを再起動する必要があります。

config map を更新したら、Save をクリックして変更を適用します。次に、以下のコマンドを実行して cloud-api-adaptor Pod を再起動します。

$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
Copy to Clipboard Toggle word wrap

daemonset を再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。

検証

  • 新しい config map を表示するには、Workloads ConfigMaps に移動します。

3.1.2.3. KataConfig カスタムリソースの作成

ワーカーノードに kata-remoteRuntimeClass としてインストールするには、KataConfig カスタムリソース (CR) を作成する必要があります。

kata-remote ランタイムクラスは、デフォルトですべてのワーカーノードにインストールされます。kata-remote を特定のノードにのみインストールする場合は、それらのノードにラベルを追加し、KataConfig CR でラベルを定義できます。

OpenShift Sandboxed Containers は、kata-remote をプライマリーランタイムとしてではなく、クラスター上の セカンダリーオプション のランタイムとしてインストールします。

重要

KataConfig CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。次の要因により再起動時間が長くなる可能性があります。

  • より多くのワーカーノードを持つ大規模な OpenShift Container Platform デプロイメント。
  • BIOS および診断ユーティリティーが有効である。
  • SSD ではなくハードディスクドライブにデプロイしている。
  • 仮想ノードではなく、ベアメタルなどの物理ノードにデプロイしている。
  • CPU とネットワークが遅い。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。

手順

  1. OpenShift Container Platform Web コンソールで、Operators Installed Operators に移動します。
  2. OpenShift sandboxed containers Operator を選択します。
  3. KataConfig タブで、Create KataConfig をクリックします。
  4. 以下の詳細を入力します。

    • Name: オプション: デフォルト名は example-kataconfig です。
    • Labels: オプション: 関連する識別属性を KataConfig リソースに入力します。各ラベルはキーと値のペアを表します。
    • enablePeerPods: パブリッククラウド、IBM Z®、および IBM® LinuxONE デプロイメントの場合に選択します。
    • kataConfigPoolSelector。オプション: 選択したノードに kata-remote をインストールするには、選択したノードのラベルに一致する式を追加します。

      1. kataConfigPoolSelector エリアを展開します。
      2. kataConfigPoolSelector エリアで、matchExpressions を展開します。これは、ラベルセレクターの要件のリストです。
      3. Add matchExpressions をクリックします。
      4. Key フィールドに、セレクターの適用先のラベルキーを入力します。
      5. Operator フィールドに、キーとラベル値の関係を入力します。有効な演算子は、InNotInExistsDoesNotExist です。
      6. Values エリアを展開し、Add value をクリックします。
      7. Value フィールドで、true または falsekey ラベル値として入力します。
    • logLevel: ランタイムクラスが kata-remote のノードに対して取得されるログデータのレベルを定義します。
  5. Create をクリックします。KataConfig CR が作成され、ワーカーノードに kata-remote ランタイムクラスをインストールします。

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

検証

  1. KataConfig タブで、KataConfig CR をクリックして詳細を表示します。
  2. YAML タブをクリックして status スタンザを表示します。

    status スタンザには、conditions および kataNodes キーが含まれています。status.kataNodes の値はノード配列であり、各ノードには kata-remote インストールの特定の状態にあるノードがリストされます。更新があるたびにメッセージが表示されます。

  3. Reload をクリックして、YAML を更新します。

    status.kataNodes 配列内のすべてのワーカーに、値 installed と、理由が指定されていない conditions.InProgress: False が表示される場合、kata-remote はクラスターにインストールされています。

詳細は、KataConfig ステータスメッセージ を参照してください。

3.1.2.3.1. オプション: Pod 仮想マシンイメージの検証

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

手順

  1. Workloads ConfigMaps に移動します。
  2. プロバイダー config map をクリックすると、詳細が表示されます。
  3. YAML タブをクリックします。
  4. YAML ファイルの status スタンザを確認します。

    PODVM_AMI_ID パラメーターが入力されている場合は、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 サポートケースを送信し、両方のログの出力を添付してください。

3.1.2.4. オプション: ノードあたりのピア 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> は、定義する制限に置き換えます。

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

次の Pod テンプレートされたオブジェクトのランタイムクラスとして kata-remote を設定して、OpenShift Sandboxed Containers のワークロードをデプロイします。

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

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

YAML ファイルにアノテーションを追加することで、config map で定義したデフォルトのインスタンスタイプを使用してワークロードをデプロイするかどうかを定義できます。

インスタンスタイプを手動で定義しない場合は、使用可能なメモリーに基づいて自動インスタンスタイプを使用するようにアノテーションを追加できます。

前提条件

  • プロバイダーのシークレットオブジェクトを作成している。
  • プロバイダーの config map を作成している。
  • KataConfig カスタムリソース (CR) を作成している。

手順

  1. OpenShift Container Platform Web コンソールで、Workloads workload type (例: Pods) に移動します。
  2. ワークロードタイプページで、オブジェクトをクリックして詳細を表示します。
  3. YAML タブをクリックします。
  4. 次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに spec.runtimeClassName: kata-remote を追加します。

    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...
    Copy to Clipboard Toggle word wrap
  5. 手動で定義されたインスタンスタイプまたは自動インスタンスタイプを使用するには、Pod テンプレートオブジェクトにアノテーションを追加します。

    • 手動で定義されたインスタンスタイプを使用するには、次のアノテーションを追加します。

      apiVersion: v1
      kind: <object>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.machine_type: t3.medium 
      1
      
      # ...
      Copy to Clipboard Toggle word wrap
      1
      config map で定義したインスタンスタイプを指定します。
    • 自動インスタンスタイプを使用するには、次のアノテーションを追加します。

      apiVersion: v1
      kind: <Pod>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.default_vcpus: <vcpus>
          io.katacontainers.config.hypervisor.default_memory: <memory>
      # ...
      Copy to Clipboard Toggle word wrap

      ワークロードが使用できるメモリーの量を定義します。ワークロードは、使用可能なメモリーの量に基づいて自動インスタンスタイプで実行されます。

  6. Save をクリックして変更を適用します。

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

検証

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

3.1.3. コマンドラインを使用したワークロードの展開

コマンドラインを使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。

3.1.3.1. シークレットの作成

OpenShift Container Platform クラスターに Secret オブジェクトを作成する必要があります。シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するためのクラウドプロバイダーの認証情報が保存されます。デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。

前提条件

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

    これらの値は、AWS コンソールで生成できます。

手順

  1. 次の例に従って peer-pods-secret.yaml マニフェストファイルを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AWS_ACCESS_KEY_ID: "<aws_access_key>" 
    1
    
      AWS_SECRET_ACCESS_KEY: "<aws_secret_access_key>" 
    2
    Copy to Clipboard Toggle word wrap
    1
    AWS_ACCESS_KEY_ID 値を指定します。
    2
    AWS_SECRET_ACCESS_KEY 値を指定します。
  2. マニフェストを適用して secret オブジェクトを作成します。

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

ピア 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)"
Copy to Clipboard Toggle word wrap

デーモンセットを再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。

3.1.3.2. config map の作成

クラウドプロバイダーの OpenShift Container Platform クラスターに config map を作成する必要があります。

Amazon Machine Image (AMI) ID を設定する必要があります。この値は、config map を作成する前に取得できます。

手順

  1. AWS インスタンスから以下の値を取得します。

    1. インスタンス ID を取得して記録します。

      $ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
      Copy to Clipboard Toggle word wrap

      これは、シークレットオブジェクトの他の値を取得するために使用されます。

    2. AWS リージョンを取得して記録します。

      $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
      Copy to Clipboard Toggle word wrap
    3. AWS サブネット ID を取得して記録します。

      $ AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
      Copy to Clipboard Toggle word wrap
    4. AWS VPC ID を取得して記録します。

      $ AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
      Copy to Clipboard Toggle word wrap
    5. AWS セキュリティーグループ ID を取得して記録します。

      $ AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text)
      && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
      Copy to Clipboard Toggle word wrap
  2. 以下の例に従って peer-pods-cm.yaml マニフェストを作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "aws"
      VXLAN_PORT: "9000"
      PODVM_INSTANCE_TYPE: "t3.medium" 
    1
    
      PODVM_INSTANCE_TYPES: "t2.small,t2.medium,t3.large" 
    2
    
      PROXY_TIMEOUT: "5m"
      DISABLECVM: "true"
      PODVM_AMI_ID: "<podvm_ami_id>" 
    3
    
      AWS_REGION: "<aws_region>" 
    4
    
      AWS_SUBNET_ID: "<aws_subnet_id>" 
    5
    
      AWS_VPC_ID: "<aws_vpc_id>" 
    6
    
      AWS_SG_IDS: "<aws_sg_ids>" 
    7
    Copy to Clipboard Toggle word wrap
    1
    ワークロードでタイプが定義されていない場合に使用されるデフォルトのインスタンスタイプを定義します。
    2
    Pod の作成時に指定できるすべてのインスタンスタイプを一覧表示します。これにより、メモリーと CPU をあまり必要としないワークロードには小さいインスタンスタイプを定義したり、ワークロードが大きい場合は大きいインスタンスタイプを定義したりすることができます。
    3
    オプション: デフォルトでは、この値は、クラスターの認証情報に基づく AMI ID を使用して KataConfig CR を実行するときに入力されます。独自の AMI を作成する場合は、正しい AMI ID を指定します。
    4
    取得した AWS_REGION 値を指定します。
    5
    取得した AWS_SUBNET_ID 値を指定します。
    6
    取得した AWS_VPC_ID 値を指定します。
    7
    取得した AWS_SG_IDS 値を指定します。
  3. マニフェストを適用して config map を作成します。

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

    クラウドプロバイダー用の 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)"
Copy to Clipboard Toggle word wrap

daemonset を再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。

3.1.3.3. 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. 次の例に従って cluster-kataconfig.yaml マニフェストファイルを作成します。

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
    Copy to Clipboard Toggle word wrap
  2. オプション: 選択したノードに kata-remote をインストールするには、次の例に従ってノードラベルを指定します。

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      kataConfigPoolSelector:
        matchLabels:
          <label_key>: '<label_value>' 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    選択したノードのラベルを指定します。
  3. KataConfig CR を作成します。

    $ oc create -f cluster-kataconfig.yaml
    Copy to Clipboard Toggle word wrap

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

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

検証

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

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

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

詳細は、KataConfig ステータスメッセージ を参照してください。

3.1.3.3.1. オプション: Pod 仮想マシンイメージの検証

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_AMI_ID パラメーターが入力されている場合は、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 サポートケースを送信し、両方のログの出力を添付してください。

3.1.3.4. オプション: ノードあたりのピア 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> は、定義する制限に置き換えます。

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

次の Pod テンプレートされたオブジェクトのランタイムクラスとして kata-remote を設定して、OpenShift Sandboxed Containers のワークロードをデプロイします。

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

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

YAML ファイルにアノテーションを追加することで、config map で定義したデフォルトのインスタンスタイプを使用してワークロードをデプロイするかどうかを定義できます。

インスタンスタイプを手動で定義しない場合は、使用可能なメモリーに基づいて自動インスタンスタイプを使用するようにアノテーションを追加できます。

前提条件

  • プロバイダーのシークレットオブジェクトを作成している。
  • プロバイダーの config map を作成している。
  • KataConfig カスタムリソース (CR) を作成している。

手順

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

    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...
    Copy to Clipboard Toggle word wrap
  2. 手動で定義されたインスタンスタイプまたは自動インスタンスタイプを使用するには、Pod テンプレートオブジェクトにアノテーションを追加します。

    • 手動で定義されたインスタンスタイプを使用するには、次のアノテーションを追加します。

      apiVersion: v1
      kind: <object>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.machine_type: t3.medium 
      1
      
      # ...
      Copy to Clipboard Toggle word wrap
      1
      config map で定義したインスタンスタイプを指定します。
    • 自動インスタンスタイプを使用するには、次のアノテーションを追加します。

      apiVersion: v1
      kind: <Pod>
      metadata:
        annotations:
          io.katacontainers.config.hypervisor.default_vcpus: <vcpus>
          io.katacontainers.config.hypervisor.default_memory: <memory>
      # ...
      Copy to Clipboard Toggle word wrap

      ワークロードが使用できるメモリーの量を定義します。ワークロードは、使用可能なメモリーの量に基づいて自動インスタンスタイプで実行されます。

  3. 次のコマンドを実行して、変更をワークロードオブジェクトに適用します。

    $ oc apply -f <object.yaml>
    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