3.2. Azure へのワークロードのデプロイ
OpenShift Container Platform Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して、Microsoft Azure クラウドコンピューティングサービスに OpenShift sandboxed containers ワークロードをデプロイできます。
デプロイメントワークフロー
- Azure アクセスキーのシークレットを作成します。
- Azure インスタンスのサイズやその他のパラメーターを定義する config map を作成します。
- SSH キーシークレットを作成します。
-
KataConfigカスタムリソースを作成します。 - オプション: ノードごとのピア Pod 仮想マシン制限を変更します。
-
kata-remoteランタイムクラスを使用するようにワークロードオブジェクトを設定します。
3.2.1. 環境の準備 リンクのコピーリンクがクリップボードにコピーされました!
環境を準備するには、以下の手順を実行します。
- クラスターに十分なリソースがあることを確認します。
- OpenShift Sandboxed Containers Operator を再インストールします。
3.2.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 値を示しています。
- 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 仕様に次の変更を加えます。-
この Webhook は、Pod 内のすべてのコンテナーおよび初期化コンテナーの
resourcesフィールドからすべてのリソース仕様を削除します。 -
Webhook は、Pod 内の最初のコンテナーのリソースフィールドを変更して、拡張リソース (
kata.peerpods.io/vm) を仕様に追加します。拡張リソースkata.peerpods.io/vmは Kubernetes スケジューラーによってアカウンティング目的で使用されます。
-
この Webhook は、Pod 内のすべてのコンテナーおよび初期化コンテナーの
mutating Webhook は、OpenShift Container Platform の特定のシステム namespace が変更されないように除外します。これらのシステム namespace でピア Pod が作成された場合、Pod の仕様に拡張リソースが含まれていない限り、Kubernetes 拡張リソースを使用したリソースアカウンティングは機能しません。
ベストプラクティスとして、特定の namespace でのみピア Pod の作成を許可するクラスター全体のポリシーを定義します。
3.2.1.2. OpenShift Sandboxed Containers Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールまたはコマンドラインインターフェイス (CLI) を使用して、OpenShift sandboxed containers Operator をインストールできます。
3.2.1.2.1. Web コンソールを使用した Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Container Platform Web コンソールを使用して、OpenShift sandboxed containers Operator をインストールできます。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
-
OpenShift Container Platform Web コンソールで、Operators
OperatorHub ページに移動します。 -
Filter by keyword フィールドに
OpenShift sandboxed containersと入力します。 - OpenShift sandboxed containers Operator タイルを選択し、Install をクリックします。
- Install Operator ページで、利用可能な Update Channel オプションの一覧から stable を選択します。
Installed Namespace で Operator recommend Namespace が選択されていることを確認します。これにより、Operator が必須の
openshift-sandboxed-containers-operatornamespace にインストールされます。この namespace がまだ存在しない場合は、自動的に作成されます。注記OpenShift Sandboxed Containers Operator を
openshift-sandboxed-containers-operator以外の namespace にインストールしようとすると、インストールに失敗します。- Approval Strategy で Automatic が選択されていることを確認します。Automatic がデフォルト値であり、新しい z-stream リリースが利用可能になると、OpenShift Sandboxed Containers への自動更新が有効になります。
- Install をクリックします。
これで、OpenShift Sandboxed Containers Operator がクラスターにインストールされました。
検証
-
Operators
Installed Operators に移動します。 - OpenShift Sandboxed Containers Operator が表示されることを確認します。
3.2.1.2.2. CLI を使用した Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用して、OpenShift Sandboxed Containers Operator をインストールできます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
Namespace.yamlマニフェストファイルを作成します。apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して namespace を作成します。
oc create -f Namespace.yaml
$ oc create -f Namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow OperatorGroup.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Operator グループを作成します。
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Subscription.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サブスクリプションを作成します。
oc create -f Subscription.yaml
$ oc create -f Subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
これで、OpenShift Sandboxed Containers Operator がクラスターにインストールされました。
検証
次のコマンドを実行して、Operator が正常にインストールされていることを確認します。
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. Web コンソールを使用したワークロードのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。
3.2.2.1. シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターに Secret オブジェクトを作成する必要があります。シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するためのクラウドプロバイダーの認証情報が保存されます。デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。
前提条件
- Azure CLI ツールをインストールして設定している。
手順
Azure サブスクリプション ID を取得します。
AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow RBAC コンテンツを生成します。これにより、クライアント ID、クライアントシークレット、およびテナント ID が生成されます。
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
secretオブジェクトで使用する RBAC 出力を記録します。 -
OpenShift Container Platform Web コンソールで、Operators
Installed Operators に移動します。 - OpenShift sandboxed containers Operator タイルをクリックします。
- 右上隅のインポートアイコン (+) をクリックします。
Import YAML ウィンドウに、次の YAML マニフェストを貼り付けます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
デーモンセットを再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
検証
-
Workloads
Secrets に移動して、シークレットを表示します。
3.2.2.2. config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドプロバイダーの OpenShift Container Platform クラスターに config map を作成する必要があります。
手順
Azure インスタンスから以下の値を取得します。
Azure VNet 名を取得し、記録します。
AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)Copy to Clipboard Copied! Toggle word wrap Toggle overflow この値は、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_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\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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\""$ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow Azure リソースグループを取得して記録します。
AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow Azure リージョンを取得して記録します。
AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
OpenShift Container Platform Web コンソールで、Operators
Installed Operators に移動します。 - Operator のリストから OpenShift Sandboxed Containers Operator を選択します。
- 右上隅にあるインポートアイコン (+) をクリックします。
Import YAML ウィンドウに、次の YAML マニフェストを貼り付けます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ワークロードでタイプが定義されていない場合に使用されるデフォルトのインスタンスサイズを定義します。
- 2
- Pod の作成時に指定できるすべてのインスタンスサイズを一覧表示します。これにより、メモリーと CPU をあまり必要としないワークロードには小さいインスタンスサイズを定義したり、ワークロードが大きい場合は大きいインスタンスサイズを定義したりすることができます。
- 3
- 取得した
AZURE_SUBNET_ID値を指定します。 - 4
- 取得した
AZURE_NSG_ID値を指定します。 - 5
- オプション: デフォルトでは、この値は、クラスターの認証情報に基づく Azure イメージ ID を使用して
KataConfigCR を実行するときに入力されます。独自の Azure イメージを作成する場合は、正しいイメージ ID を指定します。 - 6
- 取得した
AZURE_REGION値を指定します。 - 7
- 取得した
AZURE_RESOURCE_GROUP値を指定します。
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)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
daemonset を再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
検証
-
新しい config map を表示するには、Workloads
ConfigMaps に移動します。
3.2.2.3. SSH キーシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Azure の SSH キー secret オブジェクトを作成する必要があります。
手順
- OpenShift Container Platform クラスターにログインします。
次のコマンドを実行して、SSH キーペアを生成します。
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
OpenShift Container Platform Web コンソールで、Workloads
Secrets に移動します。 - Secrets ページで、openshift-sandboxed-containers-operator プロジェクトにいることを確認します。
- Create をクリックし、Key/value secret を選択します。
-
Secret name フィールドに
ssh-key-secretと入力します。 -
Key フィールドに
id_rsa.pubと入力します。 - Value フィールドに、公開 SSH 鍵を貼り付けます。
Create をクリックします。
SSH キーシークレットが作成されます。
作成した SSH 鍵を削除します。
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.4. KataConfig カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ワーカーノードに kata-remote を RuntimeClass としてインストールするには、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ロールを持つユーザーとしてクラスターにアクセスできる。
手順
-
OpenShift Container Platform Web コンソールで、Operators
Installed Operators に移動します。 - OpenShift sandboxed containers Operator を選択します。
- KataConfig タブで、Create KataConfig をクリックします。
以下の詳細を入力します。
-
Name: オプション: デフォルト名は
example-kataconfigです。 -
Labels: オプション: 関連する識別属性を
KataConfigリソースに入力します。各ラベルはキーと値のペアを表します。 - enablePeerPods: パブリッククラウド、IBM Z®、および IBM® LinuxONE デプロイメントの場合に選択します。
kataConfigPoolSelector。オプション: 選択したノードに
kata-remoteをインストールするには、選択したノードのラベルに一致する式を追加します。- kataConfigPoolSelector エリアを展開します。
- kataConfigPoolSelector エリアで、matchExpressions を展開します。これは、ラベルセレクターの要件のリストです。
- Add matchExpressions をクリックします。
- Key フィールドに、セレクターの適用先のラベルキーを入力します。
-
Operator フィールドに、キーとラベル値の関係を入力します。有効な演算子は、
In、NotIn、Exists、DoesNotExistです。 - Values エリアを展開し、Add value をクリックします。
-
Value フィールドで、
trueまたはfalseを key ラベル値として入力します。
-
logLevel: ランタイムクラスが
kata-remoteのノードに対して取得されるログデータのレベルを定義します。
-
Name: オプション: デフォルト名は
Create をクリックします。
KataConfigCR が作成され、ワーカーノードにkata-remoteランタイムクラスをインストールします。インストールを確認する前に、
kata-remoteのインストールが完了し、ワーカーノードが再起動するまで待ちます。
検証
-
KataConfig タブで、
KataConfigCR をクリックして詳細を表示します。 YAML タブをクリックして
statusスタンザを表示します。statusスタンザには、conditionsおよびkataNodesキーが含まれています。status.kataNodesの値はノード配列であり、各ノードにはkata-remoteインストールの特定の状態にあるノードがリストされます。更新があるたびにメッセージが表示されます。Reload をクリックして、YAML を更新します。
status.kataNodes配列内のすべてのワーカーに、値installedと、理由が指定されていないconditions.InProgress: Falseが表示される場合、kata-remoteはクラスターにインストールされています。
詳細は、KataConfig ステータスメッセージ を参照してください。
3.2.2.4.1. オプション: Pod 仮想マシンイメージの検証 リンクのコピーリンクがクリップボードにコピーされました!
kata-remote がクラスターにインストールされると、OpenShift sandboxed containers Operator は、ピア Pod の作成に使用される Pod 仮想マシンイメージを作成します。イメージがクラウドインスタンス上に作成されるため、このプロセスには時間がかかる場合があります。クラウドプロバイダー用に作成した config map を確認し、Pod 仮想マシンイメージが正常に作成されたことを確認できます。
手順
-
Workloads
ConfigMaps に移動します。 - プロバイダー config map をクリックすると、詳細が表示されます。
- YAML タブをクリックします。
YAML ファイルの
statusスタンザを確認します。AZURE_IMAGE_IDパラメーターが入力されている場合は、Pod 仮想マシンイメージが正常に作成されています。
トラブルシューティング
次のコマンドを実行してイベントログを取得します。
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ジョブログを取得します。
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
問題を解決できない場合は、Red Hat サポートケースを送信し、両方のログの出力を添付してください。
3.2.2.5. オプション: ノードあたりのピア Pod 仮想マシン数の変更 リンクのコピーリンクがクリップボードにコピーされました!
peerpodConfig カスタムリソース (CR) を編集することで、ノードあたりのピア Pod 仮想マシン (VM) の制限を変更できます。
手順
次のコマンドを実行して、現在の制限を確認します。
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
peerpodConfigCR のlimit属性を変更します。oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <value> は、定義する制限に置き換えます。
3.2.2.6. ワークロードオブジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の 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) を作成している。
手順
-
OpenShift Container Platform Web コンソールで、Workloads
workload type (例: Pods) に移動します。 - ワークロードタイプページで、オブジェクトをクリックして詳細を表示します。
- YAML タブをクリックします。
次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに
spec.runtimeClassName: kata-remoteを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手動で定義されたインスタンスサイズまたは自動インスタンスサイズを使用するには、Pod テンプレートオブジェクトにアノテーションを追加します。
手動で定義されたインスタンスサイズを使用するには、次のアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- config map で定義したインスタンスサイズを指定します。
自動インスタンスサイズを使用するには、次のアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワークロードが使用できるメモリーの量を定義します。ワークロードは、使用可能なメモリーの量に基づいて自動インスタンスサイズで実行されます。
Save をクリックして変更を適用します。
OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。
検証
-
Pod テンプレートオブジェクトの
spec.runtimeClassNameフィールドを検査します。値がkata-remoteの場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。
3.2.3. コマンドラインを使用したワークロードの展開 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して、OpenShift Sandboxed Containers のワークロードをデプロイできます。
3.2.3.1. シークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターに Secret オブジェクトを作成する必要があります。シークレットには、Pod 仮想マシン (VM) イメージとピア Pod インスタンスを作成するためのクラウドプロバイダーの認証情報が保存されます。デフォルトでは、OpenShift Sandboxed Containers Operator はクラスターの作成に使用される認証情報に基づいてシークレットを作成します。ただし、異なる認証情報を使用するシークレットを手動で作成することはできます。
前提条件
- Azure CLI ツールをインストールして設定している。
手順
Azure サブスクリプション ID を取得します。
AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""
$ AZURE_SUBSCRIPTION_ID=$(az account list --query "[?isDefault].id" -o tsv) && echo "AZURE_SUBSCRIPTION_ID: \"$AZURE_SUBSCRIPTION_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow RBAC コンテンツを生成します。これにより、クライアント ID、クライアントシークレット、およびテナント ID が生成されます。
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }$ az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }{ "client_id": `AZURE_CLIENT_ID`, "client_secret": `AZURE_CLIENT_SECRET`, "tenant_id": `AZURE_TENANT_ID` }Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
secretオブジェクトで使用する RBAC 出力を記録します。 次の例に従って
peer-pods-secret.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マニフェストを適用して
secretオブジェクトを作成します。oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ピア 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)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
デーモンセットを再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
3.2.3.2. config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
クラウドプロバイダーの OpenShift Container Platform クラスターに config map を作成する必要があります。
手順
Azure インスタンスから以下の値を取得します。
Azure VNet 名を取得し、記録します。
AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)$ AZURE_VNET_NAME=$(az network vnet list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Name:name}" --output tsv)Copy to Clipboard Copied! Toggle word wrap Toggle overflow この値は、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_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\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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\""$ AZURE_NSG_ID=$(az network nsg list --resource-group ${AZURE_RESOURCE_GROUP} --query "[].{Id:id}" --output tsv) && echo "AZURE_NSG_ID: \"$AZURE_NSG_ID\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow Azure リソースグループを取得して記録します。
AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}') && echo "AZURE_RESOURCE_GROUP: \"$AZURE_RESOURCE_GROUP\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow Azure リージョンを取得して記録します。
AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP} --query "{Location:location}" --output tsv) && echo "AZURE_REGION: \"$AZURE_REGION\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下の例に従って
peer-pods-cm.yamlマニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ワークロードでタイプが定義されていない場合に使用されるデフォルトのインスタンスサイズを定義します。
- 2
- Pod の作成時に指定できるすべてのインスタンスサイズを一覧表示します。これにより、メモリーと CPU をあまり必要としないワークロードには小さいインスタンスサイズを定義したり、ワークロードが大きい場合は大きいインスタンスサイズを定義したりすることができます。
- 3
- 取得した
AZURE_SUBNET_ID値を指定します。 - 4
- 取得した
AZURE_NSG_ID値を指定します。 - 5
- オプション: デフォルトでは、この値は、クラスターの認証情報に基づく Azure イメージ ID を使用して
KataConfigCR を実行するときに入力されます。独自の Azure イメージを作成する場合は、正しいイメージ ID を指定します。 - 6
- 取得した
AZURE_REGION値を指定します。 - 7
- 取得した
AZURE_RESOURCE_GROUP値を指定します。
マニフェストを適用して config map を作成します。
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow クラウドプロバイダー用の 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)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
daemonset を再起動すると、ピア Pod が再作成されます。既存の Pod は更新されません。
3.2.3.3. SSH キーシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Azure の SSH キー secret オブジェクトを作成する必要があります。
手順
- OpenShift Container Platform クラスターにログインします。
次のコマンドを実行して、SSH キーペアを生成します。
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
Secretオブジェクトを作成します。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$ 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_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH キーシークレットが作成されます。
作成した SSH 鍵を削除します。
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.3.4. KataConfig カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ワーカーノードに kata-remote をランタイムクラスとしてインストールするには、KataConfig カスタムリソース (CR) を作成する必要があります。
KataConfig CR を作成すると、OpenShift Sandboxed Containers Operator がトリガーされ、以下が実行されます。
-
デフォルト設定で
kata-remoteという名前のRuntimeClassCR を作成します。これにより、RuntimeClassNameフィールドの CR を参照して、kata-remoteをランタイムとして使用するようにワークロードを設定できるようになります。この CR は、ランタイムのリソースオーバーヘッドも指定します。
OpenShift Sandboxed Containers は、kata-remote をプライマリーランタイムとしてではなく、クラスター上の セカンダリーオプション のランタイムとしてインストールします。
KataConfig CR を作成すると、ワーカーノードが自動的に再起動します。再起動には 10 分から 60 分以上かかる場合があります。再起動時間を妨げる要因は次のとおりです。
- より多くのワーカーノードを持つ大規模な OpenShift Container Platform デプロイメント。
- BIOS および診断ユーティリティーが有効である。
- SSD ではなくハードディスクドライブにデプロイしている。
- 仮想ノードではなく、ベアメタルなどの物理ノードにデプロイしている。
- CPU とネットワークが遅い。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
次の例に従って
cluster-kataconfig.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 選択したノードに
kata-remoteをインストールするには、次の例に従ってノードラベルを指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 選択したノードのラベルを指定します。
KataConfigCR を作成します。oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい
KataConfigCR が作成され、ワーカーノードにkata-remoteがランタイムクラスとしてインストールされます。インストールを確認する前に、
kata-remoteのインストールが完了し、ワーカーノードが再起動するまで待ちます。
検証
次のコマンドを実行して、インストールの進行状況を監視します。
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kataNodesの下にあるすべてのワーカーのステータスがinstalledで、理由を指定せずにInProgressの条件がFalseの場合、kataはクラスターにインストールされます。
詳細は、KataConfig ステータスメッセージ を参照してください。
3.2.3.4.1. オプション: Pod 仮想マシンイメージの検証 リンクのコピーリンクがクリップボードにコピーされました!
kata-remote がクラスターにインストールされると、OpenShift sandboxed containers Operator は、ピア Pod の作成に使用される Pod 仮想マシンイメージを作成します。イメージがクラウドインスタンス上に作成されるため、このプロセスには時間がかかる場合があります。クラウドプロバイダー用に作成した config map を確認し、Pod 仮想マシンイメージが正常に作成されたことを確認できます。
手順
ピア Pod 用に作成した config map を取得します。
oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML ファイルの
statusスタンザを確認します。AZURE_IMAGE_IDパラメーターが入力されている場合は、Pod 仮想マシンイメージが正常に作成されています。
トラブルシューティング
次のコマンドを実行してイベントログを取得します。
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ジョブログを取得します。
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creationCopy to Clipboard Copied! Toggle word wrap Toggle overflow
問題を解決できない場合は、Red Hat サポートケースを送信し、両方のログの出力を添付してください。
3.2.3.5. オプション: ノードあたりのピア Pod 仮想マシン数の変更 リンクのコピーリンクがクリップボードにコピーされました!
peerpodConfig カスタムリソース (CR) を編集することで、ノードあたりのピア Pod 仮想マシン (VM) の制限を変更できます。
手順
次のコマンドを実行して、現在の制限を確認します。
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
peerpodConfigCR のlimit属性を変更します。oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <value> は、定義する制限に置き換えます。
3.2.3.6. ワークロードオブジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の 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) を作成している。
手順
次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに
spec.runtimeClassName: kata-remoteを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手動で定義されたインスタンスサイズまたは自動インスタンスサイズを使用するには、Pod テンプレートオブジェクトにアノテーションを追加します。
手動で定義されたインスタンスサイズを使用するには、次のアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- config map で定義したインスタンスサイズを指定します。
自動インスタンスサイズを使用するには、次のアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワークロードが使用できるメモリーの量を定義します。ワークロードは、使用可能なメモリーの量に基づいて自動インスタンスサイズで実行されます。
次のコマンドを実行して、変更をワークロードオブジェクトに適用します。
oc apply -f <object.yaml>
$ oc apply -f <object.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。
検証
-
Pod テンプレートオブジェクトの
spec.runtimeClassNameフィールドを検査します。値がkata-remoteの場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。