3.3. CLI でピア Pod を使用した OpenShift Sandboxed Containers ワークロードのデプロイ
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 にアクセスできるようになります。
手順
OpenShift Sandboxed Containers Operator の
Namespace
オブジェクトを作成します。次のマニフェストを含む
Namespace
オブジェクト YAML ファイルを作成します。apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Namespace
オブジェクトを作成します。$ oc create -f Namespace.yaml
OpenShift Sandboxed Containers Operator の
OperatorGroup
オブジェクトを作成します。次のマニフェストを含む
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
OperatorGroup
オブジェクトを作成します。$ oc create -f OperatorGroup.yaml
Subscription
オブジェクトを作成して、Namespace
を OpenShift Sandboxed Containers Operator にサブスクライブします。次のマニフェストを含む
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
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
手順
シークレットオブジェクトに必要なパラメーター値を収集します。それぞれの値を必ず書き留めてください。
インスタンス ID を取得します。
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
この値はシークレットオブジェクト自体には必要ありませんが、シークレットオブジェクトの他の値を取得するために使用されます。
AWS リージョンを取得します。
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
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\""
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\""
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\""
次のマニフェストで 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
シークレットオブジェクトを適用します。
$ oc apply -f peer-pods-secret.yaml
シークレットオブジェクトが適用されました。
3.3.2.2. CLI を使用した AWS VM イメージ (AMI) の作成
AWS 上のピア Pod を使用して OpenShift Sandboxed Containers を実行するには、まず AWS アカウントとリソースを使用して RHEL AMI を作成する必要があります。
手順
次の 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 ツールを使用して削除できます。
ジョブが完了するまで待ちます。
$ 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 を作成する前に取得できます。
手順
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\""
次のマニフェストで 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 値を入力します。
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
手順
シークレットオブジェクトの追加のパラメーター値を収集します。それぞれの値を必ず書き留めてください。
サブスクリプション ID を取得します。
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
リソースグループを取得します。
$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""
Azure リージョンを取得します。
$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""
次のマニフェストで 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
シークレットオブジェクトを適用します。
$ oc apply -f peer-pods-secret.yaml
シークレットオブジェクトが適用されました。
3.3.3.2. CLI を使用した Azure VM イメージの作成
Azure 上のピア Pod を使用して OpenShift Sandboxed Containers を実行するには、まず Azure アカウントとリソースを使用して Azure 用の RHEL イメージを作成する必要があります。
手順
次の 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 ツールを使用して削除できます。
ジョブが完了するまで待ちます。
$ 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 を作成する前に取得できます。
手順
Azure ピア Pod ConfigMap の設定値を収集します。それぞれの値を必ず書き留めてください。
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\""
Azure VNet 名を取得します。
$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)
この値は ConfigMap には必要ありませんが、Azure サブネット ID を取得するために使用されます。
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\""
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\""
次のマニフェストで 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"
ConfigMap をデプロイします。
$ oc apply -f peer-pods-cm.yaml
ConfigMap がデプロイされました。
3.3.3.4. CLI を使用した Azure の SSH 鍵のシークレットオブジェクト作成
Azure でピア Pod を使用するには、SSH 鍵を生成し、SSH 鍵のシークレットオブジェクトを作成する必要があります。
手順
SSH 鍵を生成します。
$ ssh-keygen -f ./id_rsa -N ""
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 とネットワークが遅い。
手順
次のマニフェストで YAML ファイルを作成します。
apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: cluster-kataconfig spec: enablePeerPods: true logLevel: info
(オプション)
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
構文はサポートされていません。
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-cc
を runtimeClassName
としてワークロード 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
フィールドを調べます。runtimeClassName
がkata-remote-cc
の場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers 上で実行されます。