5.3. コマンドラインを使用した OpenShift Sandboxed Containers のデプロイ
コマンドラインインターフェイス (CLI) を使用して次のタスクを実行することにより、Google Cloud に OpenShift sandboxed containers をデプロイできます。
- OpenShift Sandboxed Containers Operator を再インストールします。
- オプション: ピア Pod との内部通信を許可するには、ポート 15150 を有効にします。
- オプション: OpenShift sandboxed containers Operator とともにインストールされる Cloud Credential Operator をアンインストールした場合は、ピア Pod シークレットを作成します。
- ピア Pod の config map を作成します。
- Pod 仮想マシンイメージ config map を作成します。
- オプション: Kata エージェントポリシーをカスタマイズします。
-
KataConfigカスタムリソースを作成します。 - オプション:各ワーカーノードで実行されている仮想マシンの数を変更します。
- OpenShift Sandboxed Containers のワークロードオブジェクトを設定します。
5.3.1. OpenShift Sandboxed Containers Operator のインストール リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用して、OpenShift Sandboxed Containers Operator をインストールできます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。
手順
osc-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 apply -f osc-namespace.yaml
$ oc apply -f osc-namespace.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow osc-operatorgroup.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Operator グループを作成します。
oc apply -f osc-operatorgroup.yaml
$ oc apply -f osc-operatorgroup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow osc-subscription.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サブスクリプションを作成します。
oc apply -f osc-subscription.yaml
$ oc apply -f osc-subscription.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、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 このコマンドが完了するまでに数分かかる場合があります。
次のコマンドを実行してプロセスを監視します。
watch oc get csv -n openshift-sandboxed-containers-operator
$ watch 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.9.0 1.8.1 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.9.0 1.8.1 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. Google Cloud のポート 15150 の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Compute Engine で実行されているピア Pod との内部通信を許可するには、OpenShift Container Platform でポート 15150 を有効にする必要があります。
前提条件
- Google Cloud コマンドラインインターフェイス (CLI) ツールがインストールされている。
-
roles/container.adminロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。
手順
次のコマンドを実行して、プロジェクト ID 変数を設定します。
export GCP_PROJECT_ID="<project_id>"
$ export GCP_PROJECT_ID="<project_id>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して Google Cloud にログインします。
gcloud auth login
$ gcloud auth loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Google Cloud プロジェクト ID を設定します。
gcloud config set project ${GCP_PROJECT_ID}$ gcloud config set project ${GCP_PROJECT_ID}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してポート 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>,...]$ 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 Copied! Toggle word wrap Toggle overflow - 1
- 1 つ以上の IP アドレスまたは範囲を CIDR 形式でコンマで区切って指定します。たとえば、
203.0.113.5/32,198.51.100.0/24です。
検証
次のコマンドを実行して、ポート 15150 が開いていることを確認します。
gcloud compute firewall-rule list
$ gcloud compute firewall-rule listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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) をインストールし、サービスアカウントで認証した。
手順
次のコマンドを実行して、Google Cloud サービスアカウントキーを作成し、JSON ファイルとして保存します。
gcloud iam service-accounts keys create <key_filename>.json \ --iam-account=<service_account_email_address>
$ gcloud iam service-accounts keys create <key_filename>.json \ --iam-account=<service_account_email_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、JSON ファイルを 1 行の文字列に変換します。
cat <key_file>.json | jq -c .
$ cat <key_file>.json | jq -c .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例に従って
peer-pods-secret.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<gc_service_account_key_json>は、Google Cloud サービスアカウントキーの JSON ファイルから作成した 1 行の文字列に置き換えます。
以下のコマンドを実行してシークレットを作成します。
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.4. ピア Pod config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift sandboxed containers のピア Pod config map を作成する必要があります。
手順
Compute Engine インスタンスにログインして、次の環境変数を設定します。
次のコマンドを実行してプロジェクト ID を取得します。
GCP_PROJECT_ID=$(gcloud config get-value project)
$ GCP_PROJECT_ID=$(gcloud config get-value project)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してゾーンを取得します。
GCP_ZONE=$(gcloud config get-value compute/zone)
$ GCP_ZONE=$(gcloud config get-value compute/zone)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ネットワーク名のリストを取得します。
gcloud compute networks list --format="value(name)"
$ gcloud compute networks list --format="value(name)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してネットワークを指定します。
GCP_NETWORK=<network_name>
$ GCP_NETWORK=<network_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network_name>は、ネットワークの名前に置き換えます。
以下の例に従って
peer-pods-cm.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して config map を作成します。
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.5. ピア Pod VM イメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
QCOW2 ピア Pod 仮想マシン (VM) イメージを作成する必要があります。
前提条件
-
podmanがインストールされている。 - コンテナーレジストリーにアクセスできる。
手順
次のコマンドを実行して、OpenShift Sandboxed Containers リポジトリーのクローンを作成します。
git clone https://github.com/openshift/sandboxed-containers-operator.git
$ git clone https://github.com/openshift/sandboxed-containers-operator.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sandboxed-containers-operator/config/peerpods/podvm/bootcに移動します。cd sandboxed-containers-operator/config/peerpods/podvm/bootc
$ cd sandboxed-containers-operator/config/peerpods/podvm/bootcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
registry.redhat.ioにログインします。podman login registry.redhat.io
$ podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow podman buildプロセスはレジストリーでホストされるContainerfile.rhelコンテナーイメージにアクセスする必要があるため、registry.redhat.ioにログインする必要があります。次のコマンドを実行して、コンテナーレジストリーのイメージパスを設定します。
IMG="<container_registry_url>/<username>/podvm-bootc:latest"
$ IMG="<container_registry_url>/<username>/podvm-bootc:latest"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod 仮想マシン
bootcイメージをビルドします。podman build -t ${IMG} -f Containerfile.rhel .$ podman build -t ${IMG} -f Containerfile.rhel .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、コンテナーレジストリーにログインします。
podman login <container_registry_url>
$ podman login <container_registry_url>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、イメージをコンテナーレジストリーにプッシュします。
podman push ${IMG}$ podman push ${IMG}Copy to Clipboard Copied! Toggle word wrap Toggle overflow テストや開発のために、イメージを公開できます。
次のコマンドを実行して、
podvm-bootcイメージを確認します。podman images
$ podman imagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GB
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.6. ピア Pod 仮想マシンイメージ config map の作成 リンクのコピーリンクがクリップボードにコピーされました!
Pod 仮想マシン (VM) イメージの config map を作成します。
手順
次の内容を含む、
gc-podvm-image-cm.yamlという名前の Pod 仮想マシンイメージの config map マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して config map を作成します。
oc apply -f gc-podvm-image-cm.yaml
$ oc apply -f gc-podvm-image-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 のみを変更するには、完全なポリシーを含め、関連するルールを調整します。
手順
カスタムポリシーを含む
policy.regoファイルを作成します。次の例では、デモ用にexecとlogを有効にした、設定可能なすべての API を示しています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このポリシーは、
exec(ExecProcessRequest) およびlog(ReadStreamRequest) API を有効にします。必要に応じて、trueまたはfalseの値を調整してポリシーをさらにカスタマイズします。次のコマンドを実行して、
policy.regoファイルを Base64 でエンコードされた文字列に変換します。base64 -w0 policy.rego
$ base64 -w0 policy.regoCopy to Clipboard Copied! Toggle word wrap Toggle overflow yaml ファイルで使用するために出力を保存します。
Base64 でエンコードされたポリシーを
my-pod.yamlPod 仕様ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して Pod マニフェストを適用します。
oc apply -f my-pod.yaml
$ oc apply -f my-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.8. 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ロールを持つユーザーとしてクラスターにアクセスできる。
手順
以下の例に従って
example-kataconfig.yamlマニフェストファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- オプション: 特定のノードに
kata-remoteをインストールするためにノードラベルを適用した場合は、キーと値を指定します (例:osc: 'true')。
次のコマンドを実行して、
KataConfigCR を作成します。oc apply -f example-kataconfig.yaml
$ oc apply -f example-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-remoteはクラスターにインストールされます。次のコマンドを実行してデーモンセットを確認します。
oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
$ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-dsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してランタイムクラスを確認します。
oc get runtimeclass
$ oc get runtimeclassCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.9. ノードあたりのピア 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> は、定義する制限に置き換えます。
Pod VM イメージの確認
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スタンザを確認します。PODVM_IMAGE_NAMEパラメーターが入力されている場合は、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 サポートケースを送信し、両方のログの出力を添付してください。
5.3.10. ワークロードオブジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の Pod テンプレートオブジェクトのランタイムクラスとして kata-remote を設定して、OpenShift sandboxed containers のワークロードオブジェクトを設定する必要があります。
-
Podオブジェクト -
ReplicaSetオブジェクト -
ReplicationControllerオブジェクト -
StatefulSetオブジェクト -
Deploymentオブジェクト -
DeploymentConfigオブジェクト
Operator namespace にワークロードをデプロイしないでください。これらのリソース専用の namespace を作成します。
前提条件
-
KataConfigカスタムリソース (CR) を作成している。
手順
次の例のように、各 Pod テンプレート化されたワークロードオブジェクトのマニフェストに
spec.runtimeClassName: kata-remoteを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform はワークロードオブジェクトを作成し、スケジュールを開始します。
検証
-
Pod テンプレートオブジェクトの
spec.runtimeClassNameフィールドを検査します。値がkata-remoteの場合、ワークロードはピア Pod を使用して OpenShift Sandboxed Containers で実行されています。