検索

3.3. CLI でピア Pod を使用した OpenShift Sandboxed Containers ワークロードのデプロイ

download PDF

CLI を使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。まず、OpenShift Sandboxed Containers Operator をインストールしてから、KataConfig カスタムリソースを作成する必要があります。Sandboxed Containers にワークロードをデプロイする準備ができたら、kata-remote-cc をruntimeClassName としてワークロード YAML ファイルに追加する必要があります。

3.3.1. CLI を使用したSandboxed Containers Operator のインストール

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

前提条件

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

    注記

    OpenShift Sandboxed Containers カタログにサブスクライブすると、openshift-sandboxed-containers-operator namespace の OpenShift Sandboxed Containers Operator にアクセスできるようになります。

手順

  1. OpenShift Sandboxed Containers Operator の Namespace オブジェクトを作成します。

    1. 次のマニフェストを含む Namespace オブジェクト YAML ファイルを作成します。

      apiVersion: v1
      kind: Namespace
      metadata:
        name: openshift-sandboxed-containers-operator
    2. Namespace オブジェクトを作成します。

      $ oc create -f Namespace.yaml
  2. OpenShift Sandboxed Containers Operator の OperatorGroup オブジェクトを作成します。

    1. 次のマニフェストを含む 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
    2. OperatorGroup オブジェクトを作成します。

      $ oc create -f OperatorGroup.yaml
  3. Subscription オブジェクトを作成して、Namespace を OpenShift Sandboxed Containers Operator にサブスクライブします。

    1. 次のマニフェストを含む 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.4.1
    2. Subscription オブジェクトを作成します。

      $ oc create -f Subscription.yaml

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

注記

上記のオブジェクトファイル名はすべて提案です。他の名前を使用してオブジェクト YAML ファイルを作成できます。

検証

  • Operator が正常にインストールされていることを確認します。

    $ oc get csv -n openshift-sandboxed-containers-operator

    出力例

    NAME                             DISPLAY                                  VERSION  REPLACES     PHASE
    openshift-sandboxed-containers   openshift-sandboxed-containers-operator  1.4.1    1.4.0        Succeeded

3.3.2. CLI を使用した AWS のピア Pod の設定

AWS で使用するピア Pod を設定するには、シークレットオブジェクト、AWS イメージ VM (AMI)、およびピア Pod ConfigMap を作成する必要があります。

AWS のピア Pod を設定した後に、ピア Pod を使用して OpenShift Sandboxed Containers をデプロイするには、KataConfig カスタムリソース (CR) を作成する必要があります。

前提条件

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

3.3.2.1. CLI を使用した AWS のシークレットオブジェクトの作成

AWS アクセスキーを指定してシークレットオブジェクトでネットワークを設定します。シークレットオブジェクトを使用して Pod VM イメージの作成に使用し、このオブジェクトはピア Pod によって使用されます。

AWS のシークレットオブジェクトを作成するときは、特定の環境値を設定する必要があります。シークレットオブジェクトを作成する前に、これらの値の一部を取得できます。ただし、次の値を準備しておく必要があります。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

手順

  1. シークレットオブジェクトに必要なパラメーター値を収集します。それぞれの値を必ず書き留めてください。

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

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

      この値はシークレットオブジェクト自体には必要ありませんが、シークレットオブジェクトの他の値を取得するために使用されます。

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

      $ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
    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\""
    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\""
    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\""
  2. 次のマニフェストで YAML ファイルを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AWS_ACCESS_KEY_ID: "<enter value>" 1
      AWS_SECRET_ACCESS_KEY: "<enter value>" 2
      AWS_REGION: "<enter value>" 3
      AWS_SUBNET_ID: "<enter value>" 4
      AWS_VPC_ID: "<enter value>" 5
      AWS_SG_IDS: "<enter value>" 6
    1
    開始する前に準備した AWS_ACCESS_KEY_ID 値を入力します。
    2
    開始する前に準備した AWS_SECRET_ACCESS_KEY 値を入力します。
    3
    取得した AWS_REGION 値を入力します。
    4
    取得した AWS_SUBNET_ID 値を入力します。
    5
    取得した AWS_VPC_ID 値を入力します。
    6
    取得した AWS_SG_IDS 値を入力します。
  3. シークレットオブジェクトを適用します。

    $ oc apply -f peer-pods-secret.yaml

シークレットオブジェクトが適用されました。

3.3.2.2. CLI を使用した AWS VM イメージ (AMI) の作成

AWS 上のピア Pod を使用して OpenShift Sandboxed Containers を実行するには、まず AWS アカウントとリソースを使用して RHEL AMI を作成する必要があります。

手順

  1. 次の K8s ジョブを実行してイメージを作成します。

    $ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/aws-image-job.yaml
    注記

    このイメージは、OpenShift Sandboxed Containers では管理されません。必要に応じて、AWS Web コンソールまたは AWS CLI ツールを使用して削除できます。

  2. ジョブが完了するまで待ちます。

    $ oc wait --for=condition=complete job.batch/aws-image-creation --timeout=7m -n openshift-sandboxed-containers-operator

イメージが作成されたら、ピア Pod ConfigMap を使用してイメージを設定する必要があります。

3.3.2.3. CLI を使用した AWS 用のピア Pod ConfigMap の作成

AWS の ConfigMap を作成するときは、AMI ID を設定する必要があります。この値は、ConfigMap を作成する前に取得できます。

手順

  1. AMI ID を取得します。後で使用できるように必ず値を保存してください。

    $ PODVM_AMI_ID=$(aws ec2 describe-images --query "Images[*].[ImageId]" --filters "Name=name,Values=peer-pod-ami" --region ${AWS_REGION} --output text) && echo "PODVM_AMI_ID: \"$PODVM_AMI_ID\""
  2. 次のマニフェストで 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"
      PROXY_TIMEOUT: "5m"
      PODVM_AMI_ID: "<enter value>" 1
    1
    取得した AMI ID 値を入力します。
  3. ConfigMap をデプロイします。

    $ oc apply -f peer-pods-cm.yaml

ConfigMap がデプロイされました。KataConfig CR を作成すると、AWS 上のピア Pod を使用して OpenShift Sandboxed Containers を実行できます。

3.3.3. CLI を使用した Azure のピア Pod の設定

Microsoft Azure で使用するピア Pod を設定するには、シークレットオブジェクト、Azure イメージ VM、ピア Pod ConfigMap、および SSH 鍵のシークレットオブジェクトを作成する必要があります。

Azure のピア Pod を設定した後、ピア Pod を使用して OpenShift Sandboxed Containers をデプロイするには、KataConfig カスタムリソース (CR) を作成する必要があります。

前提条件

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

3.3.3.1. CLI を使用した Azure のシークレットオブジェクトの作成

Azure アクセスキーを設定し、シークレットオブジェクトでネットワークを設定します。シークレットオブジェクトを使用して Pod VM イメージの作成に使用し、このオブジェクトはピア Pod によって使用されます。

Azure のシークレットオブジェクトを作成するときは、特定の環境値を設定する必要があります。シークレットオブジェクトを作成する前に、これらの値の一部を取得できます。ただし、次の値を準備しておく必要があります。

  • AZURE_CLIENT_ID
  • AZURE_CLIENT_SECRET
  • AZURE_TENANT_ID

手順

  1. シークレットオブジェクトの追加のパラメーター値を収集します。それぞれの値を必ず書き留めてください。

    1. サブスクリプション ID を取得します。

      $ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
    2. リソースグループを取得します。

      $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
    3. Azure リージョンを取得します。

      $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
  2. 次のマニフェストで YAML ファイルを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      AZURE_CLIENT_ID: "<enter value>" 1
      AZURE_CLIENT_SECRET: "<enter value>" 2
      AZURE_TENANT_ID: "<enter value>" 3
      AZURE_SUBSCRIPTION_ID: "<enter value>" 4
      AZURE_REGION: "<enter value>" 5
      AZURE_RESOURCE_GROUP: "<enter value>" 6
    1
    開始する前に準備した AZURE_CLIENT_ID 値を入力します。
    2
    開始する前に準備した AZURE_CLIENT_SECRET 値を入力します。
    3
    開始する前に準備した AZURE_TENANT_ID 値を入力します。
    4
    取得した AZURE_SUBSCRIPTION_ID 値を入力します。
    5
    取得した AZURE_REGION 値を入力します。
    6
    取得した AZURE_RESOURCE_GROUP 値を入力します。
  3. シークレットオブジェクトを適用します。

    $ oc apply -f peer-pods-secret.yaml

シークレットオブジェクトが適用されました。

3.3.3.2. CLI を使用した Azure VM イメージの作成

Azure 上のピア Pod を使用して OpenShift Sandboxed Containers を実行するには、まず Azure アカウントとリソースを使用して Azure 用の RHEL イメージを作成する必要があります。

手順

  1. 次の K8s ジョブを実行してイメージを作成します。

    $ oc apply -f https://raw.githubusercontent.com/openshift/sandboxed-containers-operator/peer-pods-tech-preview/hack/azure-image-job.yaml
    注記

    このイメージは、OpenShift Sandboxed Containers では管理されません。必要に応じて、Azure Web コンソールまたは Azure CLI ツールを使用して削除できます。

  2. ジョブが完了するまで待ちます。

    $ oc wait --for=condition=complete job.batch/azure-image-creation --timeout=7m -n openshift-sandboxed-containers-operator

イメージが作成されたら、ピア Pod ConfigMap を使用してイメージを設定する必要があります。

3.3.3.3. CLI を使用した Azure のピア Pod ConfigMap の作成

Azure の ConfigMap を作成するときは、特定の設定値を指定する必要があります。これらの値は、ConfigMap を作成する前に取得できます。

手順

  1. Azure ピア Pod ConfigMap の設定値を収集します。それぞれの値を必ず書き留めてください。

    1. Azure イメージ ID を取得します。

      $ AZURE_IMAGE_ID=$(az image list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id: id} | [? contains(Id, 'peer-pod-vmimage')]" --output tsv) && echo "AZURE_IMAGE_ID: \"$AZURE_IMAGE_ID\""
    2. Azure VNet 名を取得します。

      $ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)

      この値は ConfigMap には必要ありませんが、Azure サブネット ID を取得するために使用されます。

    3. Azure サブネット ID を取得します。

      $ AZURE_SUBNET_ID=$(az network vnet subnet list --resource-group ${AZURE_RESOURCE_GROUP} --vnet-name $AZURE_VNET_NAME --query "[].{Id:id} | [? contains(Id, 'worker')]" --output tsv) && echo "AZURE_SUBNET_ID: \"$AZURE_SUBNET_ID\""
    4. Azure ネットワークセキュリティーグループ (NSG) ID を取得します。

      $ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""
  2. 次のマニフェストで YAML ファイルを作成します。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "azure"
      VXLAN_PORT: "9000"
      AZURE_INSTANCE_SIZE: "Standard_B2als_v2"
      AZURE_SUBNET_ID: "<enter value>" 1
      AZURE_NSG_ID: "<enter value>" 2
      AZURE_IMAGE_ID: "<enter value>" 3
      PROXY_TIMEOUT: "5m"
      DISABLECVM: "true"
    1
    取得した AZURE_SUBNET_ID 値を入力します。
    2
    取得した AZURE_NSG_ID 値を入力します。
    3
    取得した AZURE_IMAGE_ID 値を入力します。
  3. ConfigMap をデプロイします。

    $ oc apply -f peer-pods-cm.yaml

ConfigMap がデプロイされました。

3.3.3.4. CLI を使用した Azure の SSH 鍵のシークレットオブジェクト作成

Azure でピア Pod を使用するには、SSH 鍵を生成し、SSH 鍵のシークレットオブジェクトを作成する必要があります。

手順

  1. SSH 鍵を生成します。

    $ ssh-keygen -f ./id_rsa -N ""
  2. SHH シークレットオブジェクトを作成します。

    $ 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 鍵が作成され、SSH 鍵のシークレットオブジェクトが作成されます。KataConfig CR を作成すると、Azure 上のピア Pod を使用して OpenShift Sandboxed Containers を実行できます。

3.3.4. CLI を使用した KataConfig カスタムリソースの作成

kata-remote-cc をノードに RuntimeClass としてインストールするには、KataConfig カスタムリソース (CR) を 1 つ作成する必要があります。KataConfig CR を作成すると、OpenShift サンドボックス化されたコンテナー Operator がトリガーされ、以下が実行されます。

  • QEMU および kata-containers など、必要な RHCOS 拡張を RHCOS ノードにインストールします。
  • CRI-O ランタイムが正しいランタイムハンドラーで設定されていることを確認してください。
  • デフォルト設定で kata-remote-cc という名前の RuntimeClass CR を作成します。これにより、RuntimeClassName フィールドの CR を参照して、kata-remote-cc をランタイムとして使用するようにワークロードを設定できるようになります。この CR は、ランタイムのリソースオーバーヘッドも指定します。
注記

ピア Pod の Kata は、デフォルトですべてのワーカーノードにインストールされます。kata-remote-cc を特定のノードにのみ RuntimeClass としてインストールする場合は、それらのノードにラベルを追加し、作成時に KataConfig CR でラベルを定義できます。

前提条件

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

KataConfig CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。再起動時間を妨げる要因は次のとおりです。

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

手順

  1. 次のマニフェストで YAML ファイルを作成します。

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
  2. (オプション) kata-remote-cc を選択したノードにのみ RuntimeClass としてインストールする場合は、マニフェストにラベルを含む YAML ファイルを作成します。

    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: cluster-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
      kataConfigPoolSelector:
        matchLabels:
          <label_key>: '<label_value>' 1
    1
    kataConfigPoolSelector のラベルは単一値のみをサポートします。nodeSelector 構文はサポートされていません。
  3. KataConfig リソースを作成します。

    $ oc create -f cluster-kataconfig.yaml

新しい KataConfig CR が作成され、ワーカーノードに RuntimeClass として kata-remote-cc をインストールし始めます。kata-remote-cc のインストールが完了し、ワーカーノードが再起動するまで待ってから、次の手順に進みます。

重要

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

検証

  • インストールの進捗を監視します。

    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"

    Is In Progress の値が false と表示されたら、インストールは完了です。

3.3.5. CLI を使用したSandboxed Containers 内のピア Pod を含むワークロードのデプロイ

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

Sandboxed Containers 内のピア Pod を使用して Pod テンプレート化されたワークロードをデプロイするには、kata-remote-ccruntimeClassName としてワークロード YAML ファイルに追加する必要があります。

前提条件

  • クラスターに Red Hat OpenShift 4.14 がインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • OpenShift Sandboxed Containers Operator をインストールしている。
  • クラウドプロバイダーに固有のシークレットオブジェクトとピア Podconfig map を作成している。
  • KataConfig カスタムリソース (CR) を作成している。

手順

  • runtimeClassName: kata-remote-cc を Pod でテンプレート化されたオブジェクトに追加します。

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

Pod オブジェクトの例

apiVersion: v1
kind: Pod
metadata:
  name: hello-openshift
  labels:
    app: hello-openshift
spec:
  runtimeClassName: kata-remote-cc
  containers:
    - name: hello-openshift
      image: quay.io/openshift/origin-hello-openshift
      ports:
        - containerPort: 8888
      securityContext:
        privileged: false
        allowPrivilegeEscalation: false
        runAsNonRoot: true
        runAsUser: 1001
        capabilities:
          drop:
            - ALL
        seccompProfile:
          type: RuntimeDefault

Red Hat OpenShift はワークロードを作成し、スケジュールを開始します。

検証

  • Pod テンプレートオブジェクトの runtimeClassName フィールドを調べます。runtimeClassNamekata-remote-cc の場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers 上で実行されます。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.