Edge Manager


Red Hat Advanced Cluster Management for Kubernetes 2.13

Red Hat Edge Manager (テクノロジープレビュー) と Red Hat Advanced Cluster Management により、デバイスとフリートに対してスケーラブルでセキュアなエッジ管理をどのように提供するかを説明します。

概要

スケーラブルでセキュアなエッジ管理に使用可能なコンポーネントを説明します。

第1章 Red Hat Edge Manager (テクノロジープレビュー)

テクノロジープレビュー: Red Hat Edge Manager は、宣言型アプローチを通じてエッジデバイスとアプリケーションを合理化して管理します。

オペレーティングシステムのバージョン、ホスト設定、およびアプリケーションのデプロイメントなど、エッジデバイスの必要な状態を定義することで、Red Hat Edge Manager はデバイスフリート全体でこれらの設定を自動的に実装および維持します。

Red Hat Advanced Cluster Management for Kubernetes で Red Hat Edge Manager を使用すると、Red Hat Enterprise Linux マシンで Kubernetes 以外のワークロードとオペレーティングシステムの設定を、Red Hat OpenShift Container Platform での管理方法と同じように管理できます。

Red Hat Advanced Cluster Management での Red Hat Edge Manager の使用に関する詳細は、以下のトピックを参照してください。すべての機能は、テクノロジープレビュー 機能のステータスです。

1.1. Red Hat Edge Manager アーキテクチャー

テクノロジープレビュー: Red Hat Edge Manager を使用して、個々のデバイスまたはデバイスフリート全体を管理できます。Red Hat Edge Manager は、ネットワーク条件が限られている場合でも、スケーラブルで堅牢なデバイス管理を可能にするエージェントベースのアーキテクチャーを使用します。

Red Hat Edge Manager エージェントをデバイスにデプロイすることで、エージェントは Red Hat Edge Manager サービスと定期的に通信しながら、デバイスを自動管理および監視して、新しい設定を確認し、デバイスのステータスを報告します。

Red Hat Edge Manager はイメージベースのオペレーティングシステムをサポートします。Red Hat Edge Manager エージェントとエージェント設定を、デバイスに配布されるイメージに追加できます。

イメージベースのオペレーティングシステムにより、エージェントはイメージのトランザクション更新を開始し、更新エラーが発生した場合に以前のバージョンにロールバックできます。

Red Hat Edge Manager アーキテクチャーの主な機能は、以下のとおりです。

  • Agent
  • サービス
  • イメージベースのオペレーティングシステム
  • API サーバー
  • データベース
  • デバイス
  • デバイスフリート

詳細は、以下を参照してください。

1.1.1. Red Hat Edge Manager エージェントおよびサービス

Red Hat Edge Manager エージェントは、各管理対象デバイス上で動作するプロセスで、Red Hat Advanced Cluster Management ハブクラスター上の Red Hat Edge Manager サービスと定期的に通信します。エージェントは以下のタスクを行います。

  • デバイスをサービスに登録する
  • オペレーティングシステム、設定、アプリケーションの変更など、デバイス仕様の変更に関するサービスを定期的にチェックする
  • サービスとは別に更新を適用する
  • デバイスとアプリケーションのステータスを報告する

Red Hat Edge Manager サービスは、以下のタスクを行います。

  • ユーザーとエージェントを認証および承認する
  • デバイスを登録する
  • デバイスインベントリーを管理する
  • 個々のデバイスまたはフリートからのステータスを報告する

このサービスは、デバイスインベントリーとターゲットデバイス設定を格納するデータベースと通信します。サービスと通信する際、エージェントは設定の変更に関するサービスをポーリングします。現在の設定がターゲット設定から逸脱していることをエージェントが検出すると、エージェントはデバイスに変更を適用しようとします。

エージェントがサービスから新しいターゲット設定を受け取ると、エージェントは次のタスクを実行します。

  1. 更新時にネットワーク接続に依存しないようにするため、エージェントは、オペレーティングシステムイメージやアプリケーションコンテナーイメージなど、必要なリソースをすべてネットワーク経由でディスクにダウンロードします。
  2. エージェントは、bootc に委譲してオペレーティングシステムイメージを更新します。
  3. エージェントは、サービスがデバイスに送信するファイルのセットをオーバーレイすることにより、デバイスのファイルシステム上の設定ファイルを更新します。
  4. 必要な場合は、エージェントは新しいオペレーティングシステムで再起動します。それ以外の場合、エージェントは、更新された設定をリロードするようにシステムサービスとアプリケーションに通知します。
  5. エージェントは、Podman または MicroShift で実行されているアプリケーションを更新します。

更新が失敗した場合や、再起動後にシステムがオンラインに戻らない場合、エージェントは自動的に以前のオペレーティングシステムイメージと設定にロールバックします。

注記: Git でフリート定義を維持することができます。Red Hat Edge Manager は、データベース内のフリート定義と定期的に同期します。

1.1.2. Red Hat Edge Manager API サーバー

API サーバーは、ユーザーとエージェントがサービスと通信できるようにする Red Hat Edge Manager サービスのコアコンポーネントです。

API サーバーは以下のエンドポイントを公開します。

ユーザー向け API エンドポイント
ユーザーは、CLI または Web コンソールからユーザー向け API エンドポイントに接続できます。ユーザーは、HTTPS 要求を行うための JSON Web Token (JWT) を取得するために、設定された外部認証サービスを使用して認証する必要があります。
エージェント向け API エンドポイント
エージェントは、mTLS で保護されるエージェント向けエンドポイントに接続します。サービスは、X.509 クライアント証明書を使用してデバイスを認証します。

Red Hat Edge Manager サービスは、さまざまな外部システムと通信して、ユーザーの認証および承認、mTLS 証明書署名、または管理対象デバイスのクエリー設定も行います。

1.1.3. デバイスの登録

テクノロジープレビュー: デバイスの管理を開始する前に、デバイスを Red Hat Edge Manager サービスに登録する必要があります。デバイス上で実行される Red Hat Edge Manager エージェントは、デバイスの登録を処理します。

エージェントがデバイスで起動すると、エージェントは /etc/flightctl/config.yaml ファイル内の設定を検索します。このファイルは、以下の設定を定義します。

  • 登録エンドポインは、エージェントが登録するために接続する Red Hat Edge Manager サービスです。
  • 登録証明書は、Red Hat Edge Manager サービスからの登録を安全に要求するためだけにエージェントが使用する X.509 クライアント証明書とキーです。
  • オプション: 追加のエージェント設定。

エージェントは、設定ファイルで定義されている登録エンドポイントである Red Hat Edge Manager サービスを検索して、登録プロセスを開始します。

サービスとのセキュアな mTLS で保護されるネットワーク接続を確立した後、エージェントは登録要求をサービスに送信します。

要求には、デバイスのハードウェアおよびオペレーティングシステムの説明、X.509 証明書署名要求、およびデバイスの暗号化アイデンティティーが含まれます。

登録要求は、認可されたユーザーによって承認される必要があります。要求が承認されると、デバイスは Red Hat Edge Manager サービスによって信頼され、管理されます。

1.1.3.1. 登録方法

以下の方法で、登録エンドポイントと証明書をデバイスにプロビジョニングできます。

初期バインディング
登録エンドポイントおよび証明書を含むオペレーティングシステムイメージをビルドできます。早期バインディングイメージを使用するデバイスは、プロビジョニングインフラストラクチャーに依存することなく、定義された Red Hat Edge Manager サービスに自動的に接続し、登録を要求できます。

デバイスは、同じ有効期間の長い X.509 クライアント証明書を共有します。ただし、この場合、デバイスは特定のサービスと所有者にバインドされます。

遅延バインディング
登録エンドポイントと証明書は、オペレーティングシステムイメージに含めるのではなく、プロビジョニング時に定義できます。遅延バインディングイメージを使用するデバイスは、単一の所有者またはサービスにバインドされず、デバイス固有の有効期限の短い X.509 クライアント証明書を持つことができます。

ただし、遅延バインディングには、Red Hat Edge Manager サービスからデバイス固有の登録エンドポイントおよび証明書を要求し、cloud-initIgnition、または kickstart などのメカニズムを使用してプロビジョニングされたシステムに注入できる仮想化またはベアメタルのプロビジョニングインフラストラクチャーが必要です。

注記: 登録証明書は、登録要求を送信するためにネットワーク接続を保護するためにのみ使用されます。登録証明書は、登録要求の実際の検証または承認に関与しません。デバイスは代わりにデバイス固有の管理証明書に依存するため、登録証明書は登録されたデバイスで使用されなくなりました。

1.2. Red Hat Edge Manager の有効化

テクノロジープレビュー: Red Hat Edge Manager を使用して、エッジデバイスとアプリケーションを大規模に管理できるようにします。

必要なアクセス権: クラスター管理者

1.2.1. 前提条件

1.2.2. MultiClusterHub リソースからの Red Hat Edge Manager の有効化

MultiClusterHub リソースにパッチを適用してから、Red Hat Edge Manager が有効になっていることを確認します。次の手順を実行します。

  1. 次のコマンドを実行して、Multiclusterhub リソースの spec.overrides.componentsedge-manager-preview エントリーで enabled フィールドを true に設定します。

    oc patch multiclusterhubs.operator.open-cluster-management.io multiclusterhub -n rhacm --type json --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"edge-manager-preview","enabled": true}}]'
    Copy to Clipboard Toggle word wrap
  2. ハブクラスターで次のコマンドを実行して、Red Hat Edge Manager が有効になっていることを確認します。

    oc -n open-cluster-management get pods | grep flightctl-api
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    flightctl-api                    2/2     Running   0             43s
    Copy to Clipboard Toggle word wrap

1.2.3. Red Hat Edge Manager コンソールの有効化

OpenShift Container Platform Web コンソールで Red Hat Edge Manager を有効にします。次の手順を実行します。

  1. 以下のコマンドを実行して、編集するコンソールを開きます。

    oc edit console.v1.operator.openshift.io
    Copy to Clipboard Toggle word wrap
  2. flightctl-pluginspec.plugins セクションに追加して、Red Hat Edge Manager コンソールを有効にします。

1.2.4. Red Hat Edge Manager の認可

テクノロジープレビュー: Red Hat Edge Manager Kubernetes 認可は、ロールベースアクセス制御 (RBAC) を使用して、Red Hat Edge Manager API エンドポイントの認可を制御します。

open-cluster-management namespace で以下のロールを使用して Kubernetes RBAC 認可をセットアップできます。

  • namespace 全体の認可の場合は Role および RoleBinding
  • クラスター全体の認可の場合は ClusterRole および ClusterRoleBinding

Role または ClusterRole API オブジェクトを使用して、特定のロールで許可される API リソースおよび動詞を定義できます。

RoleBinding または ClusterRoleBinding API オブジェクトは、ロールで定義されている権限を 1 人以上のユーザーに付与します。

詳細は、ロールベースのアクセス制御 を参照してください。

1.2.4.1. Red Hat Edge Manager RBAC ロール

Red Hat Edge Manager には、以下のデフォルトのロールおよびその権限があります。

Expand

ロール

権限

リソース

flightctl-admin

すべて

すべて

flightctl-viewer

getlist

devicesfleetsresourcesyncs

flightctl-operator

getlistcreatedeleteupdatepatch

devicesfleetsresourcesyncs

get

devices/console

getlist

repositoriesfleetstemplateversions

flightctl-installer

getlist

enrollmentrequests

post

enrollmentrequests/approval

getlistcreate

certificatesigningrequests

1.2.4.2. Red Hat Edge Manager の認可リソース

以下の表には、Red Hat Edge Manager API エンドポイントのルート、名前、リソース名、および動詞が含まれています。

Expand

ルート

名前

リソース

Verb

DELETE /api/v1/certificatesigningrequests

DeleteCertificateSigningRequests

certificatesigningrequests

deletecollection

GET /api/v1/certificatesigningrequests

ListCertificateSigningRequests

certificatesigningrequests

list

POST /api/v1/certificatesigningrequests

CreateCertificateSigningRequest

certificatesigningrequests

create

DELETE /api/v1/certificatesigningrequests/{name}

DeleteCertificateSigningRequest

certificatesigningrequests

delete

GET /api/v1/certificatesigningrequests/{name}

ReadCertificateSigningRequest

certificatesigningrequests

get

PATCH /api/v1/certificatesigningrequests/{name}

PatchCertificateSigningRequest

certificatesigningrequests

patch

PUT /api/v1/certificatesigningrequests/{name}

ReplaceCertificateSigningRequest

certificatesigningrequests

update

DELETE /api/v1/certificatesigningrequests/{name}/approval

DenyCertificateSigningRequest

certificatesigningrequests/approval

delete

POST /api/v1/devices

CreateDevice

devices

create

GET /api/v1/devices

ListDevices

devices

list

DELETE /api/v1/devices

DeleteDevices

devices

deletecollection

GET /api/v1/devices/{name}

ReadDevice

devices

get

PUT /api/v1/devices/{name}

ReplaceDevice

devices

update

DELETE /api/v1/devices/{name}

DeleteDevice

devices

delete

GET /api/v1/devices/{name}/status

ReadDeviceStatus

devices/status

get

PUT /api/v1/devices/{name}/status

ReplaceDeviceStatus

devices/status

update

GET /api/v1/devices/{name}/rendered

GetRenderedDevice

devices/rendered

get

PUT /api/v1/devices/{name}/decommission

DecommissionDevice

devices/decommission

update

GET /ws/v1/devices/{name}/console

DeviceConsole

devices/console

get

POST /api/v1/enrollmentrequests

CreateEnrollmentRequest

enrollmentrequests

create

GET /api/v1/enrollmentrequests

ListEnrollmentRequests

enrollmentrequests

list

DELETE /api/v1/enrollmentrequests

DeleteEnrollmentRequests

enrollmentrequests

deletecollection

GET /api/v1/enrollmentrequests/{name}

ReadEnrollmentRequest

enrollmentrequests

get

PUT /api/v1/enrollmentrequests/{name}

ReplaceEnrollmentRequest

enrollmentrequests

update

PATCH /api/v1/enrollmentrequests/{name}

PatchEnrollmentRequest

enrollmentrequests

patch

DELETE /api/v1/enrollmentrequests/{name}

DeleteEnrollmentRequest

enrollmentrequests

delete

GET /api/v1/enrollmentrequests/{name}/status

ReadEnrollmentRequestStatus

enrollmentrequests/status

get

POST /api/v1/enrollmentrequests/{name}/approval

ApproveEnrollmentRequest

enrollmentrequests/approval

post

PUT /api/v1/enrollmentrequests/{name}/status

ReplaceEnrollmentRequestStatus

enrollmentrequests/status

update

POST /api/v1/fleets

CreateFleet

fleets

create

GET /api/v1/fleets

ListFleets

fleets

list

DELETE /api/v1/fleets

DeleteFleets

fleets

deletecollection

GET /api/v1/fleets/{name}

ReadFleet

fleets

get

PUT /api/v1/fleets/{name}

ReplaceFleet

fleets

update

DELETE /api/v1/fleets/{name}

DeleteFleet

fleets

delete

GET /api/v1/fleets/{name}/status

ReadFleetStatus

fleets/status

get

PUT /api/v1/fleets/{name}/status

ReplaceFleetStatus

fleets/status

update

POST /api/v1/repositories

CreateRepository

リポジトリー

create

GET /api/v1/repositories

ListRepositories

リポジトリー

list

DELETE /api/v1/repositories

DeleteRepositories

リポジトリー

deletecollection

PUT /api/v1/repositories/{name}

ReplaceRepository

リポジトリー

update

DELETE /api/v1/repositories/{name}

DeleteRepository

リポジトリー

delete

POST /api/v1/resourcesyncs

CreateResourceSync

resourcesyncs

create

GET /api/v1/resourcesyncs

ListResourceSync

resourcesyncs

list

DELETE /api/v1/resourcesyncs

DeleteResourceSyncs

resourcesyncs

deletecollection

GET /api/v1/resourcesyncs/{name}

ReadResourceSync

resourcesyncs

get

PUT /api/v1/resourcesyncs/{name}

ReplaceResourceSync

resourcesyncs

update

DELETE /api/v1/resourcesyncs/{name}

DeleteResourceSync

resourcesyncs

delete

GET /api/v1/fleets/{fleet}/templateVersions

ListTemplateVersions

fleets/templateversions

list

DELETE /api/v1/fleets/{fleet}/templateVersions

DeleteTemplateVersions

fleets/templateversions

deletecollection

GET /api/v1/fleets/{fleet}/templateVersions/{name}

ReadTemplateVersion

fleets/templateversions

get

DELETE /api/v1/fleets/{fleet}/templateVersions/{name}

DeleteTemplateVersion

fleets/templateversions

delete

1.3. Red Hat Edge Manager のオペレーティングシステムイメージ

イメージベースのオペレーティングシステムでは、オペレーティングシステムや設定やアプリケーションを単一のユニットとしてバージョン管理、デプロイ、および更新できます。

イメージベースのオペレーティングシステムを使用すると、次の機能で運用上のリスクが軽減されます。

  • テスト済みの環境とデプロイされた環境間のドリフトを最小限に抑える。
  • トランザクションの更新およびロールバックによって失敗した更新を削減し、メンテナンスおよび置き換えコストを削減します。

Red Hat Edge Manager は、起動可能なコンテナーイメージ (bootc) を実行するイメージベースの Linux オペレーティングシステムに焦点を当てています。詳細は、bootc を参照してください。

重要: bootc ツールは、パッケージベースのオペレーティングシステムを更新しません。

イメージを以下から構築する方法を学習します。

  • Fedora、CentOS、RHEL イメージなどのベース bootc オペレーティングシステムイメージを選択します。
  • ベース bootc イメージに対して、以下の項目を重ねるコンテナーファイルを作成します。

    • Red Hat Edge Manager エージェントと設定。
    • オプション: ターゲットデプロイメント環境に固有のドライバー。
    • オプション: ホスト設定 (例: 認証局バンドル) およびすべてのデプロイメントに共通のアプリケーションワークロード。
  • podman および skopeo を使用して、bootc オペレーティングシステムイメージをビルド、公開、および署名します。
  • bootc-image-builder を使用してオペレーティングシステムディスクイメージを作成します。
  • skopeo を使用して、オペレーティングシステムディスクイメージをビルド、公開、および署名します。

注記: オペレーティングシステムディスクイメージには、パーティション、ボリューム、ファイルシステム、および初期 bootc イメージが含まれます。オペレーティングシステムディスクイメージは、プロビジョニング中に 1 回だけ作成する必要があります。

後続のデバイス更新では、bootc オペレーティングシステムイメージのみが必要になります。これには、ファイルシステム内のファイルが含まれます。

次のイメージのビルドトピックを参照してください。

1.3.1. イメージのビルドに関する特別な考慮事項

テクノロジープレビュー: 次のトピックでは、Red Hat Edge Manager のイメージを構築する際の特別な考慮事項を説明します。

1.3.1.1. 動的ランタイム設定よりもビルド時設定を優先する

ビルド時にオペレーティングシステムイメージに設定を追加します。ビルド時に設定を追加することで、設定が一緒にテスト、配布、および更新されるようになります。ビルド時の設定が実行不可能または望ましくない場合には、Red Hat Edge Manager を使用して、ランタイム時にデバイスを動的に設定できます。

次の場合は、動的ランタイム設定が推奨されます。

  • ホスト名やサイト固有のネットワーク認証情報など、デプロイメントまたはサイト固有の設定がある。
  • イメージと共に配布する場合は安全でないシークレットがある。
  • 再起動なしで追加、更新、削除が必要なアプリケーションワークロードがある、またはオペレーティングシステムよりも速い頻度で更新されるアプリケーションワークロードがある。
1.3.1.2. /usr ディレクトリーの設定

設定が静的で、アプリケーションやサービスがその設定をサポートする場合は、設定ファイルを /usr ディレクトリーに配置します。設定を /usr ディレクトリーに配置すると、設定は読み取り専用のままとなり、イメージによって完全に定義されます。

次の場合は、/usr ディレクトリーに設定を配置することは不可能または望ましくありません。

  • この設定はデプロイメントまたはサイト固有です。
  • アプリケーションまたはサービスは、/etc ディレクトリーからの設定の読み取りのみをサポートします。
  • 設定はランタイム時に変更する必要がある場合があります。
1.3.1.3. ドロップインディレクトリー

ドロップインディレクトリーを使用して、サービスが集約する設定ファイルを追加、置換、または削除します。ターゲット設定からの逸脱を引き起こす可能性のある設定ファイルを直接編集しないでください。

注記: ディレクトリー名の最後の .d/ でドロップインディレクトリーを特定できます。たとえば、/etc/containers/certs.d/etc/cron.d、および /etc/NetworkManager/conf.d などです。

1.3.1.4. スクリプトを使用したオペレーティングシステムイメージ

ファイルシステムを変更するスクリプトまたはコマンドを実行しないでください。bootc または Red Hat Edge Manager は、逸脱や整合性チェックの失敗を引き起こす可能性のある変更されたファイルを上書きできます。

代わりに、イメージのビルド中にこのようなスクリプトやコマンドを実行するため、変更はイメージの一部になります。あるいは、Red Hat Edge Manager の設定管理メカニズムを使用します。

1.3.1.5. 関連情報

1.3.2. Red Hat Edge Manager の bootc オペレーティングシステムイメージのビルド

テクノロジープレビュー: デバイスを Red Hat Edge Manager で管理できるように準備するには、Red Hat Edge Manager エージェントを含む bootc オペレーティングシステムイメージを構築します。次に、デバイス用のオペレーティングシステムディスクイメージをビルドします。

詳細は、次のセクションを参照してください。

1.3.2.1. 前提条件

bootc オペレーティングシステムイメージをビルドするには、以下の前提条件を参照してください。

1.3.2.2. Red Hat Edge Manager CLI のインストール

Red Hat Edge Manager CLI をインストールするには、以下の手順を実行します。

  1. 以下のコマンドを実行して、お使いのシステムに適したリポジトリーのサブスクリプションマネージャーを有効にします。

    subscription-manager repos --enable rhacm-2.13-for-rhel-<version>-<arch>-rpms
    Copy to Clipboard Toggle word wrap

    Red Hat Edge Manager で利用可能なリポジトリーの完全なリストは、関連情報 セクションを参照してください。

  2. パッケージマネージャーを使用して flightctl CLI をインストールします。以下のコマンドを実行します。

    sudo dnf install flightctl
    Copy to Clipboard Toggle word wrap
1.3.2.3. オプション: 早期バインディングの登録証明書の要求

イメージにエージェント設定を含める場合は、次の手順を実行します。

  1. flightctl CLI を使用して Red Hat Edge Manager サービスで認証します。以下のコマンドを実行します。

    flightctl login --username=<your_user> --password=<your_password> https://<rhem_api_server_url>
    Copy to Clipboard Toggle word wrap

    注記: CLI は、ホストの認証局プールを使用して、Red Hat Edge Manager サービスのアイデンティティーを確認します。プールに認証局証明書を追加しない場合に、自己署名証明書を使用すると、検証で TLS 検証エラーが発生する可能性があります。コマンドに --insecure-skip-tls-verify フラグを追加することで、サーバーの検証を回避できます。

  2. 次のコマンドを実行して、エージェント設定ファイルの形式で登録認証情報を取得します。

    flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
    Copy to Clipboard Toggle word wrap

    注記:

    • この --expiration=365d オプションは、認証情報が 1 年間有効であることを指定します。
    • --output=embedded オプションは、出力が登録認証情報が埋め込まれたエージェント設定ファイルであることを指定します。

      返された config.yaml には、Red Hat Edge Manager サービスの URL、認証局バンドル、およびエージェントの登録クライアント証明書およびキーが含まれます。以下の例を参照してください。

    enrollment-service:
      authentication:
        client-certificate-data: LS0tLS1CRUdJTiBD...
        client-key-data: LS0tLS1CRUdJTiBF...
      service:
        certificate-authority-data: LS0tLS1CRUdJTiBD...
        server: https://agent-api.flightctl.127.0.0.1.nip.io:7443
      enrollment-ui-endpoint: https://ui.flightctl.127.0.0.1.nip.io:8081
    Copy to Clipboard Toggle word wrap
1.3.2.4. オプション: イメージプルシークレットの使用

デバイスがプライベートリポジトリーからコンテナーに依存している場合は、レジストリーのプルシークレットを設定する必要があります。以下の手順を実行します。

  1. 使用するコンテナーイメージの種類に応じて、デバイスの次のシステムパスのいずれかまたは両方にプルシークレットを配置します。

    • オペレーティングシステムイメージは、/etc/ostree/auth.json パスを使用します。
    • アプリケーションコンテナーイメージは、/root/.config/containers/auth.json パスを使用します。

    重要: シークレットを使用する前に、プルシークレットがデバイスに存在している必要があります。

  2. プルシークレットが以下の形式であることを確認してください。

    {
      "auths": {
        "registry.example.com": {
          "auth": "base64-encoded-credentials"
        }
      }
    }
    Copy to Clipboard Toggle word wrap

詳細は、関連情報 セクションを参照してください。

1.3.2.5. bootc を使用したオペレーティングシステムイメージのビルド

Red Hat Edge Manager エージェントを含む bootc でオペレーティングシステムイメージをビルドします。オプションで、次の項目をオペレーティングシステムイメージに追加できます。

  • 初期バインディングのエージェント設定
  • 任意のドライバー
  • ホストの設定
  • 必要なアプリケーションワークロード

以下の手順を実行します。

  1. 以下の内容で Containerfile ファイルを作成して、Red Hat Edge Manager エージェントおよび設定を含む RHEL 9 ベースのオペレーティングシステムイメージをビルドします。

    FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> 
    1
    
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service && \
        systemctl mask bootc-fetch-apply-updates.timer 
    2
    Copy to Clipboard Toggle word wrap
    1
    FROM で参照される基本イメージは、既存の標準コンテナービルドツールおよびワークフローを再利用できる Linux カーネルがすでに含まれる起動可能なコンテナー (bootc) イメージです。
    2
    デフォルトの自動更新を無効にします。更新は Red Hat Edge Manager によって管理されます。

    重要: デバイスがプライベートリポジトリーからコンテナーに依存している場合は、デバイスのプルシークレットを /etc/ostree/auth.json パスに配置する必要があります。シークレットが消費される前に、プルシークレットがデバイスに存在している必要があります。

    1. オプション: podman-compose アプリケーションのサポートを有効にするには、以下のセクションを Containerfile ファイルに追加します。

      RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
          dnf -y install podman-compose && \
          dnf -y clean all && \
          systemctl enable podman.service
      Copy to Clipboard Toggle word wrap
    2. オプション: 初期バインディング用に config.yaml を作成した場合は、以下のセクションを Containerfile に追加します。

      ADD config.yaml /etc/flightctl/
      Copy to Clipboard Toggle word wrap

    詳細は、オプション: 早期バインディングの登録証明書の要求 を参照してください。

  2. 次のコマンドを実行して、Open Container Initiative (OCI) レジストリーを定義します。

    OCI_REGISTRY=registry.redhat.io
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、書き込み権限を持つイメージリポジトリーを定義します。

    OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、イメージタグを定義します。

    OCI_IMAGE_TAG=v1
    Copy to Clipboard Toggle word wrap
  5. ターゲットプラットフォームのオペレーティングシステムイメージをビルドします。

    sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
    Copy to Clipboard Toggle word wrap
1.3.2.6. Sigstore を使用した bootc オペレーティングシステムイメージの署名および公開

Sigstore を使用して bootc オペレーティングシステムイメージに署名するには、以下の手順を実行します。

  1. signingkey.pubsigningkey.private という名前の Sigstore キーペアを生成します。

    skopeo generate-sigstore-key --output-prefix signingkey
    Copy to Clipboard Toggle word wrap
  2. Podman や Skopeo などのコンテナーツールを設定して、署名済みイメージとともに Sigstore 署名を OCI レジストリーにアップロードします。

    sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF
    docker:
        ${OCI_REGISTRY}:
            use-sigstore-attachments: true
    EOF
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、OCI レジストリーにログインします。

    sudo podman login ${OCI_REGISTRY}
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、オペレーティングシステムイメージに署名し、公開します。

    sudo podman push \
        --sign-by-sigstore-private-key ./signingkey.private \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap
1.3.2.7. オペレーティングシステムディスクイメージのビルド

デバイスのファイルシステムを含むオペレーティングシステムディスクイメージをビルドします。以下の手順を実行します。

  1. 次のコマンドを実行して、output という名前のディレクトリーを作成します。

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  2. bootc-image-builder を使用して、オペレーティングシステムイメージから iso タイプのオペレーティングシステムディスクイメージを生成します。以下のコマンドを実行します。

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type iso \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap

bootc-image-builder が完了すると、${PWD}/output/bootiso/install.iso パスで ISO ディスクイメージを見つけることができます。

ディスクイメージに署名して Open Container Initiative (OCI) レジストリーに公開します。オプションで、ディスクイメージを圧縮して OCI アーティファクトとして、bootc イメージと同じ OCI レジストリーに公開できます。これにより、bootc とディスクイメージの統一されたホスティングと配布が容易になります。/diskimage-iso を追加した状態で、bootc イメージの名前が付けられたリポジトリーに ISO ディスクイメージを公開するには、次の手順を実行します。

1.3.2.8.1. 前提条件

ディスクイメージに署名して OCI レジストリーに公開します。以下の手順を実行します。

  1. ISO ディスクイメージが存在するディレクトリーの所有者を root からカレントユーザーに変更します。以下のコマンドを実行します。

    sudo chown -R $(whoami):$(whoami) "${PWD}/output"
    Copy to Clipboard Toggle word wrap
  2. /diskimage-iso が追加された bootc イメージと同じリポジトリーになるように OCI_DISK_IMAGE_REPO 環境変数を定義します。以下のコマンドを実行します。

    OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行してマニフェストリストを作成します。

    sudo podman manifest create \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、ISO ディスクイメージを OCI アーティファクトとしてマニフェストリストに追加します。

    sudo podman manifest add \
        --artifact --artifact-type application/vnd.diskimage.iso \
        --arch=amd64 --os=linux \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \
        "${PWD}/output/bootiso/install.iso"
    Copy to Clipboard Toggle word wrap
  5. Sigstore 秘密鍵でマニフェストリストに署名し、イメージをレジストリーにプッシュします。以下のコマンドを実行します。

    sudo podman manifest push --all \
         --sign-by-sigstore-private-key ./signingkey.private \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \
        docker://${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap
1.3.2.9. 関連情報

1.3.3. 特定のターゲットプラットフォームへのビルド

Red Hat OpenShift Virtualization および VMware vSphere との統合を最適化するために、証明書およびエージェント設定をイメージに埋め込むのではなく、cloud-init ユーティリティーで登録できます。さらに、プラットフォームを統合するための適切なゲストツールを含めることもできます。このプロセスは、Red Hat OpenShift Virtualization の QCOW2 や vSphere の VMDK などのプラットフォーム固有のイメージ形式を生成します。

1.3.3.1. Red Hat OpenShift Virtualization のイメージのビルド

Red Hat OpenShift Virtualization のオペレーティングシステムイメージとディスクイメージを ビルドする場合は、以下の変更を含む Red Hat Edge Manager プロセスの bootc オペレーティングシステムイメージ のビルド に従います。

  • 仮想デバイスをプロビジョニングするときに、cloud-init を介して登録証明書またはエージェント設定を挿入して、遅延バインディングを使用します。
  • open-vm-tools ゲストツールをイメージに追加します。
  • iso の代わりに、qcow2 タイプのディスクイメージを構築します。

以下の手順への変更で手順を実行します。

  1. Red Hat Edge Manager エージェントおよび仮想マシンゲストツールを含む RHEL 9 をベースとするオペレーティングシステムイメージをビルドしますが、エージェント設定を除外します。
  2. 以下の内容で、Containerfile という名前のファイルを作成します。

    FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version>
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service
    
    RUN dnf -y install cloud-init open-vm-tools && \
        dnf -y clean all && \
        ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \
        systemctl enable vmtoolsd.service
    Copy to Clipboard Toggle word wrap
  3. オプション: podman-compose アプリケーションのサポートを有効にするには、以下のセクションを Containerfile ファイルに追加します。

    RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
        dnf -y install podman-compose && \
        dnf -y clean all && \
        systemctl enable podman.service
    Copy to Clipboard Toggle word wrap

汎用イメージビルドプロセスに従って、bootc オペレーティングシステムイメージをビルド、署名、および公開します。

  1. 次のコマンドを実行して、output という名前のディレクトリーを作成します。

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、オペレーティングシステムイメージから vmdk タイプのオペレーティングシステムディスクイメージを生成します。

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type qcow2 \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap

bootc-image-builder が完了すると、ディスクイメージは ${PWD}/output/vmdk/disk.vmdk パスで見つけることができます。

Red Hat OpenShift Virtualization は Open Container Initiative (OCI)レジストリーからディスクイメージをダウンロードできますが、OCI アーティファクトの代わりにコンテナーイメージを使用します。

QCoW2 ディスクイメージをビルドし、署名し、アップロードするには、以下の手順を実行します。

  1. 以下の内容で、Containerfile.qcow2 という名前のファイルを作成します。

    FROM registry.access.redhat.com/ubi9/ubi:latest AS builder
    ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/ 
    1
    
    RUN chmod 0440 /disk/* 
    2
    
    FROM scratch
    COPY --from=builder /disk/* /disk/ 
    3
    Copy to Clipboard Toggle word wrap
    1
    QCoW2 ディスクイメージをビルダーコンテナーに追加して、必要な 107 ファイルの所有権 (QEMU ユーザー) を設定します。
    2
    必要な 0440 ファイル権限を設定します。
    3
    ファイルをスクラッチイメージにコピーします。
  2. ディスクイメージをビルド、署名、公開します。以下のコマンドを実行します。

    sudo chown -R $(whoami):$(whoami) "${PWD}/output"
    OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-qcow2
    sudo podman build -t ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} -f Containerfile.qcow2 .
    sudo podman push --sign-by-sigstore-private-key ./signingkey.private ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap
1.3.3.2. VMware vSphere のイメージのビルド

VMware vSphere 用のオペレーティングシステムイメージとディスクイメージを 構築する場合は、次の変更で Red Hat Edge Manager プロセスの bootc オペレーティングシステムイメージ のビルド に従います。

  • 仮想デバイスをプロビジョニングするときに、cloud-init を介して登録証明書またはエージェント設定を注入して、遅延バインディングを使用します。
  • open-vm-tools ゲストツールをイメージに追加します。
  • iso の代わりに vmdk タイプのディスクイメージをビルドします。

Red Hat Edge Manager エージェントおよび VM ゲストツールを含む RHEL 9 をベースとするオペレーティングシステムイメージをビルドしますが、エージェント設定を除外します。

以下の手順に変更を加えて、一般的な手順を実行します。

  1. 以下の内容で、Containerfile という名前のファイルを作成します。

    FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version>
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service && \
    
    RUN dnf -y install cloud-init open-vm-tools && \
        dnf -y clean all && \
        ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \
        systemctl enable vmtoolsd.service
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、output という名前のディレクトリーを作成します。

    mkdir -p output
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、オペレーティングシステムイメージから vmdk タイプのオペレーティングシステムディスクイメージを生成します。

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type vmdk \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
    Copy to Clipboard Toggle word wrap

bootc-image-builder が完了すると、ディスクイメージは ${PWD}/output/vmdk/disk.vmdk パスで見つけることができます。

1.4. デバイスのプロビジョニング

テクノロジープレビュー: さまざまな環境で Red Hat Edge Manager を使用してデバイスをプロビジョニングできます。Red Hat Edge Manager で使用するためにビルドしたオペレーティングシステムイメージまたはディスクイメージを使用し、ターゲット環境に応じて、物理または仮想デバイスをプロビジョニングします。

必要なアクセス権: クラスター管理者

以下のドキュメントを参照してください。

1.4.1. 物理デバイスのプロビジョニング

テクノロジープレビュー: bootc-image-builder ツールを使用してオペレーティングシステムイメージから ISO ディスクイメージを作成すると、そのイメージはダウンロード可能な RHEL ISO に似たものになります。ただし、オペレーティングシステムイメージの内容は ISO ディスクイメージに組み込まれています。

ネットワークにアクセスせずに ISO ディスクイメージをベアメタルシステムにインストールするには、カスタム ISO コンテナーイメージのデプロイ を参照してください。

ネットワーク経由で ISO をインストールする方法は、PXE ブートでの ISO bootc イメージのデプロイ を参照してください。

1.4.2. OpenShift Virtualization でのデバイスのプロビジョニング

テクノロジープレビュー: OCI コンテナーレジストリーでホストされている QCoW2 コンテナーディスクイメージを使用して、OpenShift Virtualization 上に仮想マシンをプロビジョニングできます。

オペレーティングシステムイメージに Red Hat Edge Manager エージェントの登録設定がまだ含まれていない場合は、プロビジョニング時に cloud-init ユーザーデータを介して設定を注入できます。

詳細は、関連情報 セクションを参照してください。

1.4.2.1. 前提条件
  • flightctl CLI をインストールし、Red Hat Edge Manager サービスインスタンスにログインしている。
  • oc CLI をインストールし、これを使用して OpenShift クラスターインスタンスにログインして、仮想マシンを作成するプロジェクトに変更している。
1.4.2.2. cloud-init 設定の作成

cloud-init 設定を作成するには、以下の手順を実行します。

  1. 新しい Red Hat Edge Manager エージェントの登録設定を要求し、それを config.yaml というファイルに保存します。以下のコマンドを実行します。

    flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml
    Copy to Clipboard Toggle word wrap
  2. 初回起動時にエージェント設定を正しい場所に配置する cloud-config.yaml という名前のクラウド設定ユーザーデータファイルを作成します。以下のコマンドを実行します。

    cat <<EOF > cloud-config.yaml
    #cloud-config
    write_files:
    - path: /etc/flightctl/config.yaml
      content: $(cat config.yaml | base64 -w0)
      encoding: b64
    EOF
    Copy to Clipboard Toggle word wrap
  3. クラウド設定ユーザーデータファイルを含む Kubernetes Secret を作成します。

    oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
    Copy to Clipboard Toggle word wrap
1.4.2.3. 仮想マシンの作成

QCoW2 コンテナーディスクイメージから主要なディスクを設定し、登録シークレットから設定された cloud-init 設定ドライブを持つ仮想マシンを作成します。以下の手順を実行します。

  1. 次のコマンドを実行して、VirtualMachine リソースマニフェストを含むファイルを作成します。

    cat <<EOF > my-bootc-vm.yaml
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: my-bootc-vm
    spec:
      runStrategy: RerunOnFailure
      template:
        spec:
          domain:
            cpu:
              cores: 1
            memory:
              guest: 1024M
            devices:
              disks:
                - name: containerdisk
                  disk:
                    bus: virtio
                - name: cloudinitdisk
                  disk:
                    bus: virtio
          volumes:
            - name: containerdisk
              containerDisk:
                image: ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
            - name: cloudinitdisk
              cloudInitConfigDrive:
                secretRef:
                  name: enrollment-secret
    EOF
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して、リソースマニフェストをクラスターに適用します。

    oc apply -f my-bootc-vm.yaml
    Copy to Clipboard Toggle word wrap
1.4.2.4. 関連情報

1.5. デバイスの管理

テクノロジープレビュー: Red Hat Edge Manager は、デバイスの登録から廃止までのデバイスのライフサイクルを管理します。デバイスのライフサイクルには、Red Hat Edge Manager でのデバイスの整理、モニタリング、更新など、デバイス管理も含まれます。

デバイスを個別に、またはフリートで管理できます。Red Hat Edge Manager を使用すると、多くのデバイスを個別に管理する代わりに、デバイスのフリート全体を 1 つのオブジェクトとして管理できます。

望ましい設定を指定する必要があるのは 1 度だけです。その後、Red Hat Edge Manager は、フリート内のすべてのデバイスに設定を適用します。

個々のデバイス管理を理解することは、フリートでデバイスを管理するための基盤です。以下のシナリオでは、デバイスを個別に管理することを推奨します。

  • いくつかのデバイスで設定が大幅に異なる場合。
  • 外部の自動化を使用してデバイスを更新する場合。

必要なアクセス権: クラスター管理者

次のドキュメントは、個々のデバイスの管理に重点を置いています。

フリートでのデバイス管理の詳細は、デバイスフリートの管理 を参照してください。

1.5.1. デバイスを登録する

テクノロジープレビュー: Red Hat Edge Manager を使用してデバイスを管理するには、デバイスを Red Hat Edge Manager サービスに登録する必要があります。

デバイスで初めて Red Hat Edge Manager エージェントが実行されると、エージェントは暗号キーペアを生成して登録プロセスを準備します。デバイスの暗号キーペアは、公開鍵と秘密鍵で構成されます。秘密鍵はデバイスから外部に出ることがないため、デバイスの複製やなりすましを防ぐことができます。キーペアは、登録中に Red Hat Edge Manager サービスに登録され、デバイスの廃止時に削除されます。

デバイスがまだ登録されていない場合、エージェントはサービス検出を実行して Red Hat Edge Manager サービスインスタンスを検索します。次に、デバイスは、サービスへの安全で mTLS で保護されるネットワーク接続を確立します。デバイスは、イメージのビルド時またはデバイスのプロビジョニング時に取得したデバイスの X.509 登録証明書を使用します。デバイスは、以下を含む登録要求をサービスに送信します。

  • デバイスのハードウェアとオペレーティングシステムの説明
  • 初期管理証明書を取得するためのデバイスの暗号化アイデンティティーを含む X.509 証明書署名要求

そのデバイスは信頼済みとはみなされず、認可されたユーザーが要求を許可または拒否するまで、デバイス lobby で隔離された状態のままになります。

詳細は、次のセクションを参照してください。

1.5.1.1. 前提条件
1.5.1.2. CLI を使用したデバイスの登録

デバイスを Red Hat Edge Manager サービスに登録してから管理する必要があります。以下の手順を実行します。

  1. 次のコマンドを実行して、現在承認を待機しているすべてのデバイスをリスト表示します。

    flightctl get enrollmentrequests --field-selector="status.approval.approved != true"
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           APPROVAL  APPROVER  APPROVED LABELS
    <device_name>  Pending   <none>    <none>
    Copy to Clipboard Toggle word wrap

    注記: 一意のデバイス名はエージェントにより生成され、変更できません。エージェントは、デバイス名として公開鍵の Base32 エンコードハッシュを選択します。

  2. 登録要求の名前を指定して、登録要求を承認します。オプションで、--label または -l フラグを使用してラベルをデバイスに追加できます。以下の例を参照してください。

    flightctl approve -l region=eu-west-1 -l site=factory-berlin enrollmentrequest/54shovu028bvj6stkovjcvovjgo0r48618khdd5huhdjfn6raskg
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           APPROVAL  APPROVER  APPROVED LABELS
    <device_name>  Approved  user      region=eu-west-1,site=factory-berlin
    Copy to Clipboard Toggle word wrap

登録要求を承認した後、サービスは管理証明書を発行し、デバイスをインベントリーに登録します。これでデバイスを管理する準備が整いました。

1.5.2. デバイスの表示

テクノロジープレビュー: インベントリー内のデバイスに関する詳細情報を取得するには、Red Hat Edge Manager CLI を使用できます。

1.5.2.1. 前提条件
  • Red Hat Edge Manager CLI をインストールする必要がある。Red Hat Edge Manager CLI のインストール を参照してください。
  • Red Hat Edge Manager サービスにログインする必要がある。
  • 少なくとも 1 つのデバイスを登録する必要があります。
1.5.2.2. デバイスインベントリーとデバイスの詳細の表示

デバイスインベントリー内のデバイスを表示します。以下の手順を実行します。

  1. 次のコマンドを実行して、デバイスインベントリー内のデバイスを表示します。

    flightctl get devices
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN
    <device_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、このデバイスの詳細を YAML 形式で表示します。

    flightctl get device/<device_name> -o yaml
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
      labels: 
    1
    
        region: eu-west-1
        site: factory-berlin
    spec:
      os:
        image: quay.io/flightctl/rhel:9.5 
    2
    
      config:
      - name: my-os-configuration 
    3
    
        configType: GitConfigProviderSpec
        gitRef:
          path: /configuration
          repository: my-configuration-repo
          targetRevision: production
    status:
      os:
        image: quay.io/flightctl/rhel:9.5 
    4
    
      config:
        renderedVersion: "1" 
    5
    
      applications:
        data: {} 
    6
    
        summary:
          status: Unknown 
    7
    
      resources: 
    8
    
        cpu: Healthy
        disk: Healthy
        memory: Healthy
      systemInfo: 
    9
    
        architecture: amd64
        bootID: 037750f7-f293-4c5b-b06e-481eef4e883f
        operatingSystem: linux
      summary:
        info: ""
        status: Online 
    10
    
      updated:
        status: UpToDate 
    11
    
      lastSeen: "2024-08-28T11:45:34.812851905Z" 
    12
    
    [...]
    Copy to Clipboard Toggle word wrap
    1
    デバイスに割り当てられたユーザー定義のラベル。
    2
    デバイスのターゲット OS イメージバージョン。
    3
    デバイスのターゲット OS 設定。
    4
    デバイスの現在の OS イメージバージョン。
    5
    デバイスの現在の OS 設定バージョン。
    6
    デバイスのデプロイされたアプリケーションの現時点でのリスト。
    7
    デバイス上のアプリケーションのヘルスステータス。
    8
    CPU、ディスク、およびメモリーリソースの可用性。
    9
    基本的なシステム情報。
    10
    デバイスのヘルスステータス。
    11
    デバイスの更新ステータス。
    12
    デバイスの最後のチェックイン時刻と日付。

1.5.3. ラベルおよびラベルセレクター

テクノロジープレビュー: 個々のデバイス、フリート、その他のリソースを含むリソースにラベルを割り当てることで整理できます。たとえば、ラベルを使用してロケーション、ハードウェアタイプ、目的を記録できます。Red Hat Edge Manager ラベルは、Kubernetes ラベルとラベルセレクターと同じ構文、原則、および Operator に従います。

デバイスのインベントリーを表示するとき、またはデバイスに操作を適用するときに、ラベルの付いたデバイスを選択できます。

ラベルは、キーを使用してデバイスをグループ化する key=value 形式に従います。たとえば、ラベルが site=<location> の命名規則に従う場合、サイトごとにデバイスをグループ化できます。

キーのみを含むラベルを使用することもできます。

ラベルが有効であるためには、次のルールに従う必要があります。

  • キーと値はそれぞれ 63 文字以下である必要があります。
  • キーと値は、英数字 (a-zA-Z0-9) で構成可能です。
  • キーと値には、ダッシュ (-)、アンダースコア (_)、ドット (.) を含めることができますが、これらを先頭または末尾に配置することはできません。
  • 値は省略できます。

次の方法でラベルをリソースに適用できます。

  • イメージのビルド時にデフォルトのラベルセットを定義し、デプロイ時にすべてのデバイスに自動適用されるようにします。
  • 登録時に初期ラベルを割り当てます。
  • 登録後、ラベルを割り当てます。

リソースにラベルが付けられる場合、ラベルセレクターを作成することでリソースのサブセットを選択できます。ラベルセレクターは、同じラベルのセットを持つリソースを選択するためのラベルのコンマ区切りリストです。

以下の例を参照してください。

Expand
ラベルセレクターの例選択したデバイス

site=factory-berlin

site ラベルキーと factory-berlin ラベルの値を持つすべてのデバイス。

site!=factory-berlin

site ラベルキーがあるものの、ラベルの値が factory-berlin ではないすべてのデバイス。

site in (factory-berlin,factory-madrid)

site ラベルキーとラベルの値が factory-berlin または factory-madrid のいずれかを持つすべてのデバイス。

詳細は、Labels and Selectors を参照してください。

1.5.4. ラベルの使用

テクノロジープレビュー: ラベルを使用してデバイスを整理できます。

1.5.4.1. CLI を使用したデバイスとそのラベルの表示

デバイスとそれに関連するラベルを表示します。ラベルを使用して、デバイスおよびデバイスフリートを整理できます。

以下の手順を実行します。

  1. -o wide オプションを使用して、インベントリー内のデバイスを表示します。

    flightctl get devices -o wide
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago  region=eu-west-1,site=factory-berlin
    <device2_name>  <none>   <none>  Online  Up-to-date  <none>        1 minute ago   region=eu-west-1,site=factory-madrid
    Copy to Clipboard Toggle word wrap
  2. -l <key=value> オプションを使用して、特定のラベルまたはラベルセットでインベントリー内のデバイスを表示します。

    flightctl get devices -l site=factory-berlin -o wide
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago  region=eu-west-1,site=factory-berlin
    Copy to Clipboard Toggle word wrap
1.5.4.2. CLI を使用したラベルの更新

CLI を使用してデバイスでラベルを更新します。以下の手順を実行します。

  1. 次のコマンドを実行して、デバイスの現在の定義をファイルにエクスポートします。

    flightctl get device/<device1_name> -o yaml > my_device.yaml
    Copy to Clipboard Toggle word wrap
  2. 任意のエディターを使用して my_device.yaml ファイルを編集します。以下の例を参照してください。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      labels:
        some_key: some_value
        some_other_key: some_other_value
      name: <device1_name>
    spec:
    [...]
    Copy to Clipboard Toggle word wrap
  3. ファイルを保存し、次のコマンドを実行して更新されたデバイス定義を適用します。

    flightctl apply -f my_device.yaml
    Copy to Clipboard Toggle word wrap
  4. 以下のコマンドを実行して、変更が適用されていることを確認します。

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 minutes ago  some_key=some_value,some_other_key=some_other_value
    <device2_name>  <none>   <none>  Online  Up-to-date  <none>        4 minutes ago  region=eu-west-1,site=factory-madrid
    Copy to Clipboard Toggle word wrap

1.5.5. フィールドセレクター

フィールドセレクターは、特定のリソースフィールドの値に基づいて、個々のデバイス、フリート、およびその他のリソースを含む Red Hat Edge Manager リソースのリストをフィルタリングします。

フィールドセレクターは、Kubernetes のフィールドセレクターおよびラベルセレクターと同じ構文、原則、Operator に従いますが、より高度な検索ユースケース用に追加の Operator も利用できます。

1.5.5.1. サポートされるフィールド

Red Hat Edge Manager リソースには、選択可能なメタデータフィールドのセットが表示されます。

各リソースは以下のメタデータフィールドをサポートします。

  • metadata.name
  • metadata.owner
  • metadata.creationTimestamp

注記: ラベルをクエリーするには、ラベルセレクターを使用して詳細で柔軟なラベルのフィルターを行います。

詳細は、ラベルとラベルセレクター を参照してください。

1.5.5.2. 追加のサポートされるフィールドのリスト

メタデータフィールドに加えて、各リソースには選択可能な固有のフィールドセットがあり、リソース固有の属性に基づいて、フィルタリングと選択にさらなる柔軟性を提供します。

以下の表は、各リソースの種類でフィルタリングがサポートされるフィールドのリストです。

Expand

種類

フィールド

証明書署名要求

status.certificate

デバイス

status.summary.status

status.applicationsSummary.status

status.updated.status

status.lastSeen

status.lifecycle.status

登録要求

status.approval.approved

status.certificate

フリート

spec.template.spec.os.image

リポジトリー

spec.type

spec.url

Resource Sync

spec.repository

1.5.5.3. フィールド検出

Red Hat Edge Manager リソースによっては、追加のサポートされるフィールドを公開する場合があります。flightctl コマンドに --field-selector オプションを使用することで、サポートされているフィールドを確認できます。サポートされていないフィールドを使用しようとすると、エラーメッセージに利用可能なサポート対象フィールドがリスト表示されます。以下の例を参照してください。

flightctl get device --field-selector='text'
Copy to Clipboard Toggle word wrap
Error: listing devices: 400, message: unknown or unsupported selector: unable to resolve selector name "text". Supported selectors are: [metadata.alias metadata.creationTimestamp metadata.name metadata.nameoralias metadata.owner status.applicationsSummary.status status.lastSeen status.summary.status status.updated.status]
Copy to Clipboard Toggle word wrap

フィールド text は、フィルタリングのための有効なフィールドではありません。エラーメッセージは、Device リソースの --field-selector で使用できるサポート対象のフィールドのリストを提供します。

サポートされているフィールドのいずれかを使用することができます。

flightctl get devices --field-selector 'metadata.alias contains cluster'
Copy to Clipboard Toggle word wrap

metadata.alias フィールドは、包含 Operator contains を使用して、値 cluster があるかどうかがチェックされます。

1.5.5.3.1. 例

名前による特定デバイスの除外

次のコマンドは、名前で特定のデバイスを除外します。

flightctl get devices --field-selector 'metadata.name!=<device_name>'
Copy to Clipboard Toggle word wrap

所有者、ラベル、および作成タイムスタンプでフィルタリングします。

このコマンドは、us リージョンにあり、2024 に作成された Fleet/pos-fleet が所有するデバイスを取得します。

flightctl get devices --field-selector 'metadata.owner=Fleet/pos-fleet, metadata.creationTimestamp >= 2024-01-01T00:00:00Z, metadata.creationTimestamp < 2025-01-01T00:00:00Z' -l 'region=us'
Copy to Clipboard Toggle word wrap

所有者、ラベル、およびデバイスのステータスでフィルタリングします。

次のコマンドは、us リージョンにあり、Unknown または OutOfDate のいずれかの status.updated.status で、Fleet/pos-fleet が所有するデバイスを取得します。

flightctl get devices --field-selector 'metadata.owner=Fleet/pos-fleet, status.updated.status in (Unknown, OutOfDate)' -l 'region=us'
Copy to Clipboard Toggle word wrap
1.5.5.4. サポート対象の Operator
Expand

Operator

記号

説明

Exists

--field-selector <field>

フィールドが存在するかチェックします。たとえば、--field-selector 'metadata.owner' フィールドセレクターは、metadata.owner フィールドを持つリソースを返します。

DoesNotExist

!

フィールドが存在しないか確認します。

Equals

=

フィールドが値と等しいか確認します。

DoubleEquals

==

別の形式の等価性チェック。

NotEquals

!=

フィールドが値と等しくないか確認します。

GreaterThan

>

フィールドが値よりも大きいか確認します。

GreaterThanOrEquals

>=

フィールドが値以上であるか確認します。

LessThan

<

フィールドが値未満か確認します。

LessThanOrEquals

フィールドが値以下であるか確認します。

In

in

フィールドが値のリスト内にあるか確認します。

NotIn

notin

フィールドが値のリストにないか確認します。

Contains

contains

フィールドに値があるか確認します。

NotContains

notcontains

フィールドに値が含まれていないか確認します。

1.5.5.5. フィールドタイプ別の Operator の使用量

各フィールドタイプは、特定の Operator のサブセットをサポートします。

Expand

フィールドタイプ

サポート対象の Operator

文字列

Equals: フィールドの値が指定された文字列と完全に一致する場合に一致します。

DoubleEquals: フィールドの値が指定された文字列と完全に一致する場合に一致します。Equals の代替です。

NotEquals: フィールドの値が指定された文字列と完全に一致しない場合に一致します。

In: フィールドの値がリスト内の少なくとも 1 つの文字列と一致する場合に一致します。

NotIn: フィールドの値がリスト内の文字列のいずれにも一致しない場合に一致します。

Contains: フィールド値に指定された部分文字列が含まれる場合に一致します。

NotContains: フィールドの値に指定された部分文字列が含まれていない場合に一致します。

Exists: フィールドが存在する場合に一致します。

DoesNotExist: フィールドが存在しない場合に一致します。

テキスト文字列

タイムスタンプ

Equals: フィールドの値が指定されたタイムスタンプと完全に一致する場合に一致します。

DoubleEquals: フィールドの値が指定されたタイムスタンプと完全に一致する場合に一致します。Equals の代替です。

NotEquals: フィールドの値が指定されたタイムスタンプと完全に一致しない場合に一致します。

GreaterThan: フィールドの値が指定されたタイムスタンプよりも後の場合に一致します。

GreaterThanOrEquals: フィールドの値が指定されたタイムスタンプの後または等しい場合に一致します。

LessThan: フィールドの値が指定されたタイムスタンプの前の場合に一致します。

LessThanOrEquals: フィールドの値が指定されたタイムスタンプの前または等しい場合に一致します。

In: フィールドの値がリスト内の少なくとも 1 つのタイムスタンプと一致する場合に一致します。

NotIn: フィールドの値がリスト内のタイムスタンプのいずれにも一致しない場合に一致します。

Exists: フィールドが存在する場合に一致します。

DoesNotExist: フィールドが存在しない場合に一致します。

RFC 3339 形式

数値

Equals: フィールドの値が指定された数と等しい場合に一致します。

DoubleEquals: フィールドの値が指定された数と等しい場合に一致します。Equals の代替です。

NotEquals: フィールドの値が指定された数と等しくない場合に一致します。

GreaterThan: フィールドの値が指定された数よりも大きい場合に一致します。

GreaterThanOrEquals: フィールドの値が指定された数以上であれば一致します。

LessThan: フィールドの値が指定された数よりも小さい場合に一致します。

LessThanOrEquals: フィールドの値が指定された数値以下である場合に一致します。

In: フィールドの値がリスト内の少なくとも 1 つの数と等しい場合に一致します。

NotIn: フィールドの値がリスト内の数値に等しくない場合に一致します。

Exists: フィールドが存在する場合に一致します。

DoesNotExist: フィールドが存在しない場合に一致します。

番号形式

ブール値

Equals: 値が true または false の場合に一致します。

DoubleEquals: 値が true または false の場合に一致します。Equals の代替です。

NotEquals: 値が指定された値の逆の場合に一致します。

In: 値 true または false がリストにある場合に一致します。リストに含めることができるのは true または false のみであるため、この Operator の使用は制限されています。

NotIn: 値がリストにない場合に一致します。

Exists: フィールドが存在する場合に一致します。

DoesNotExist: フィールドが存在しない場合に一致します。

ブール値の形式 (truefalse)

配列

Contains: 配列に指定された値がある場合に一致します。

NotContains: 配列に指定された値が含まれていない場合に一致します。

In: 配列が指定された値と重複する場合に一致します。

NotIn: 配列が指定された値と重複しない場合に一致します。Exists: フィールドが存在する場合に一致します。

DoesNotExist: フィールドが存在しない場合に一致します。

配列要素

1.5.6. オペレーティングシステムの更新

テクノロジープレビュー: デバイス仕様でターゲットオペレーティングシステムイメージの名前またはバージョンを更新することで、デバイスのオペレーティングシステムを更新できます。

Red Hat Edge Manager エージェントがサービスと通信すると、エージェントは要求された更新を検出します。その後、エージェントはバックグラウンドで、新しいオペレーティングシステムのバージョンのダウンロードと検証を自動的に開始します。

Red Hat Edge Manager エージェントは、更新ポリシーに従って実際のシステム更新をスケジュールします。スケジュールされた更新時に、エージェントは現在実行中のオペレーティングシステムを中断することなく、新しいバージョンをインストールします。

最後に、デバイスは新規バージョンで再起動します。

Red Hat Edge Manager は現在、以下のイメージタイプとイメージ参照形式をサポートしています。

Expand

イメージタイプ

イメージ参照

bootc

コンテナーレジストリーへの OCI イメージ参照。例: quay.io/flightctl-example/rhel:9.5

プロセス中に、エージェントはステータスの更新をサービスに送信します。デバイスのステータスを表示することで、更新プロセスを監視できます。詳細は、デバイスの表示 を参照してください。

1.5.6.1. CLI でのオペレーティングシステムの更新

CLI を使用してデバイスを更新します。以下の手順を実行します。

  1. 次のコマンドを実行して、デバイスの現在のリソースマニフェストを取得します。

    flightctl get device/<device_name> -o yaml > my_device.yaml
    Copy to Clipboard Toggle word wrap
  2. Device リソースを編集して、新しいオペレーティングシステム名とバージョンターゲットを指定します。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      os:
        image: quay.io/flightctl/rhel:9.5
    [...]
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、更新された Device リソースを適用します。

    flightctl apply -f <device_name>.yaml
    Copy to Clipboard Toggle word wrap

1.5.7. エッジデバイスのオペレーティングシステム設定

テクノロジープレビュー: 最大限の一貫性と再現性を実現するために、オペレーティングシステムレベルのホスト設定をイメージに含めることができます。

設定を更新するには、新しいオペレーティングシステムイメージを作成し、新しいイメージでデバイスを更新します。

ただし、以下の場合には、新しいイメージでデバイスを更新することは実用的ではありません。

  • イメージ内に設定がない場合。
  • 設定がデバイスに固有のものである必要がある場合。
  • この設定は、オペレーティングシステムイメージを更新して再起動せずに、ランタイム時に更新できる必要があります。

このような場合には、デバイスのファイルシステムに存在する設定ファイルのセットを宣言できます。Red Hat Edge Manager エージェントは、すべてのファイルがファイルシステムで正常に更新されるか、更新前の状態にロールバックするかを確認しながら、設定ファイルに更新を適用します。ユーザーがデバイスのオペレーティングシステムと設定セットの両方を同時に更新すると、Red Hat Edge Manager エージェントは最初にオペレーティングシステムを更新し、その後、指定された設定ファイルのセットを適用します。

Red Hat Edge Manager エージェントが順番に適用する設定セットのリストを指定することもできます。競合が発生した場合は、最後に適用された設定セットは有効です。

重要: Red Hat Edge Manager エージェントがディスクの設定を更新した後、実行中のアプリケーションは、設定を有効にするために、新しい設定をメモリーにリロードする必要があります。更新に再起動が必要な場合、systemd は新しい設定と正しい順序でアプリケーションを自動的に再起動します。更新に再起動が含まれない場合、多くのアプリケーションは設定ファイルへの変更を検出し、ファイルを自動的にリロードできます。アプリケーションが変更検出をサポートしていない場合は、特定の条件が満たされている場合に、デバイスのライフサイクルフックを使用してスクリプトまたはコマンドを実行できます。

1.5.7.1. 設定プロバイダー

Red Hat Edge Manager では、設定プロバイダーと呼ばれる複数のソースから設定を提供できます。Red Hat Edge Manager は現在、以下の設定プロバイダーをサポートします。

Git 設定プロバイダー
Git リポジトリーからデバイス設定ファイルを取得します。
Kubernetes Secret プロバイダー
Kubernetes クラスターからシークレットを取得し、そのコンテンツをデバイスのファイルシステムに書き込みます。
HTTP 設定プロバイダー
HTTP (S) エンドポイントからデバイス設定ファイルを取得します。
インライン設定プロバイダー
外部システムをクエリーしなくても、デバイスマニフェストでデバイス設定ファイルをインラインで指定できます。

以下のセクションでは、設定プロバイダーの詳細を説明します。

1.5.7.1.1. Git リポジトリーからの設定

デバイス設定を GitHub や GitLab などの Git リポジトリーに保存できます。次に、Git 設定プロバイダーを追加して、Red Hat Edge Manager がリポジトリーからデバイスのファイルシステムに設定を同期できるようにします。

Git 設定プロバイダーは以下のパラメーターを取ります。

Expand

パラメーター

説明

リポジトリー

Red Hat Edge Manager で定義された Repository リソースの名前。

TargetRevision

チェックアウトするリポジトリーのブランチ、タグ、またはコミット。

Path

ファイルおよびサブディレクトリーがデバイスのファイルシステムに同期されるリポジトリー内のディレクトリーへの絶対パス。Path ディレクトリーは、MountPath パラメーターが指定されていない限り、デバイス上の root ディレクトリー (/) に対応します。

MountPath

オプション: リポジトリーの内容を書き込むためのデバイスのファイルシステム内のディレクトリーへの絶対パス。デフォルトでは、値はファイルシステムの root (/) です。

Repository リソースは、Red Hat Edge Manager が使用する必要のある Git リポジトリー、プロトコル、およびアクセス認証情報を定義します。リポジトリーは一度だけセットアップする必要があります。セットアップ後、リポジトリーを使用して、個々のデバイスまたはデバイスフリートを設定できます。

1.5.7.1.2. Kubernetes クラスターからのシークレット

Red Hat Edge Manager は、Red Hat Edge Manager が Kubernetes シークレット用に実行されている Kubernetes クラスターのみをクエリーできます。そのシークレットの内容は、デバイスのファイルシステムのパスに書き込むことができます。

Kubernetes Secret Provider は以下のパラメーターを取ります。

Expand

パラメーター

説明

名前

シークレットの名前。

NameSpace

シークレットの namespace。

MountPath

シークレットの内容を書き込むためのデバイスのファイルシステム内のディレクトリー。

注記: Red Hat Edge Manager には、定義された namespace のシークレットにアクセスする権限が必要です。たとえば、ClusterRoleClusterRoleBinding を作成すると、flightctl-worker サービスアカウントがその namespace のシークレットを取得し、リスト表示できます。

1.5.7.1.3. HTTP サーバーからの設定

Red Hat Edge Manager は、設定のために HTTP サーバーにクエリーを実行できます。HTTP サーバーは、デバイスに対して静的または動的に生成された設定を提供できます。

HTTP 設定プロバイダーは以下のパラメーターを取ります。

Expand

パラメーター

説明

リポジトリー

Red Hat Edge Manager で定義された Repository リソースの名前。

接尾辞

Repository リソースで定義されたベース URL に追加する接尾辞。接尾辞には、/path/to/endpoint?query=param などのパスおよびクエリーパラメーターを含めることができます。

FilePath

HTTP サーバーの応答を書き込むためのデバイスのファイルシステム内のファイルへの絶対パス。

Repository リソースは、Red Hat Edge Manager が接続するための HTTP サーバーを指定し、使用するプロトコルとアクセスの認証情報を指定します。レポジトリーは、一度セットアップする必要があります。その後、レポジトリーを使用して複数のデバイスまたはデバイスフリートを設定できます。

1.5.7.1.4. デバイス仕様のインライン設定

設定はデバイス仕様にインラインで指定できます。インラインデバイス仕様を使用する場合、Red Hat Edge Manager は設定を取得するために外部システムに接続する必要はありません。

Inline 設定プロバイダーは、ファイル仕様のリストを取ります。各ファイル仕様は以下のパラメーターを取ります。

Expand

パラメーター

説明

Path

コンテンツを書き込むためのデバイスのファイルシステム内のファイルへの絶対パス。指定したパスにファイルがすでに存在する場合、ファイルは上書きされます。

Content

ファイルの UTF-8 または base64 でエンコードされたコンテンツ。

ContentEncoding

コンテンツのエンコード方法を定義します。plain または base64 のどちらかである必要があります。デフォルト値は plain に設定されます。

モード

オプション: ファイルの権限モード。先頭にゼロで 8 進数 (例: 0644) を指定するか、先頭にゼロのない 10 進数 (例: 420) として指定できます。setuidsetgid、および sticky ビットがサポートされています。指定しない場合、ファイルの権限モードはデフォルトで 0644 に設定されます。

User

オプション: ファイルの所有者。名前または数値 ID として指定します。デフォルト値は root に設定されます。

Group

オプション: ファイルのグループ。名前または数値 ID として指定します。

1.5.7.2. 関連情報

1.5.8. MicroShift クラスターを自動登録するためのフリートの設定

テクノロジープレビュー: MicroShift を含むオペレーティングシステムイメージを実行しているデバイスフリートがある場合は、MicroShift クラスターを Red Hat Advanced Cluster Management に自動登録するようにフリートを設定できます。

1.5.8.1. デバイステンプレートの設定

フリート内での自動登録を有効にするには、デバイステンプレートに設定を追加します。以下の手順を実行します。

  1. crd.yaml ファイルの filePathrepository、および suffix を含む acm-crd リソース設定を Fleet リソースに追加します。以下の例を参照してください。

    apiVersion: flightctl.io/v1alpha1
    kind: Fleet
    metadata:
     name: fleet-acm
    spec:
     selector:
      matchLabels:
       fleet: acm
     template:
      spec:
       os:
        image: <your os image>
    config:
       - name: acm-crd
        httpRef:
         filePath: /var/local/acm-import/crd.yaml
         repository: acm-registration
         suffix: /agent-registration/crds/v1
    Copy to Clipboard Toggle word wrap
  2. 次の例のように、filePathrepositorysuffix を使用して acm-import リソース設定を追加します。

    - name: acm-import
        httpRef:
         filePath: /var/local/acm-import/import.yaml
         repository: acm-registration
         suffix: /agent-registration/manifests/{{.metadata.name}}
    Copy to Clipboard Toggle word wrap
  3. オプション: MicroShift クラスターが Red Hat Advanced Cluster Management イメージをプルしなかった場合は、テンプレートに次の追加部分に示すように、pull-secret リソースを追加します。

    - name: pull-secret
        inline:
        - path: "/etc/crio/openshift-pull-secret"
         content: "{\"auths\":{...}}"
    Copy to Clipboard Toggle word wrap
  4. crd.yaml ファイルと import.yaml ファイルで kubectl apply -f を実行するには、次の条件付き if 要件を含む apply-acm-manifests リソースを追加します。

    - name: apply-acm-manifests
        inline:
        - path: "/etc/flightctl/hooks.d/afterupdating/50-acm-registration.yaml"
         content: |
          - if:
           - path: /var/local/acm-import/crd.yaml
            op: [created]
           run: kubectl apply -f /var/local/acm-import/crd.yaml
           envVars:
            KUBECONFIG: /var/lib/microshift/resources/kubeadmin/kubeconfig
          - if:
           - path: /var/local/acm-import/import.yaml
            op: [created]
           run: kubectl apply -f /var/local/acm-import/import.yaml
           envVars:
            KUBECONFIG: /var/lib/microshift/resources/kubeadmin/kubeconfig
    Copy to Clipboard Toggle word wrap
  5. コンソールで、デバイスに fleet:acm というラベルを付け、Approve をクリックすると、fleet-acm フリートが自動的に選択されます。ラベルを使用してデバイスを管理する方法は、デバイスフリートの管理 を参照してください。

1.5.9. CLI の Git リポジトリーからのデバイス設定の管理

テクノロジープレビュー: Git リポジトリーでデバイス設定を作成して適用します。

以下の手順を実行します。

  1. site-settings という名前の Repository リソースの次の定義が含まれる site-settings-repo.yaml などのファイルを作成します。

    apiVersion: flightctl.io/v1alpha1
    kind: Repository
    metadata:
      name: site-settings
    spec:
      type: git
      url: https://github.com/<your_org>/<your_repo>.git
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、Repository リソースを作成します。

    flightctl apply -f site-settings-repo.yaml
    Copy to Clipboard Toggle word wrap
  3. 以下のコマンドを実行して、リソースが正しく作成され、Red Hat Edge Manager がアクセスできることを確認します。

    flightctl get repository/site-settings
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           TYPE  REPOSITORY URL                                 ACCESSIBLE
    site-settings  git   https://github.com/<your_org>/<your_repo>.git  True
    Copy to Clipboard Toggle word wrap
  4. デバイス仕様を更新して、example-site 設定をデバイスに適用します。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      config: 
    1
    
      - name: example-site
        configType: GitConfigProviderSpec
        gitRef:
          repository: site-settings
          targetRevision: production
          path: /etc/example-site 
    2
    
    [...]
    Copy to Clipboard Toggle word wrap
    1
    この例の設定では、site-settings リポジトリーの production ブランチにある example-site ディレクトリー内のすべてのファイルを取得し、それらを root ディレクトリー (/) に配置します。
    2
    ディレクトリー構造を作成して、ターゲットパスが書き込み可能であることを確認します。bootc システムでは、root ディレクトリー (/) は書き込み可能ではありません。

1.5.10. デバイスのライフサイクルフック

テクノロジープレビュー: Red Hat Edge Manager エージェントは、デバイスライフサイクルフックを使用して、デバイスライフサイクルの特定のポイントでユーザー定義のコマンドを実行できます。たとえば、アプリケーションデータのバックアップを作成するオペレーティングシステムイメージにシェルスクリプトを追加できます。次に、エージェントがオペレーティングシステムの更新を開始する前に、スクリプトが実行され、正常に完了するように指定できます。

別の例として、特定のアプリケーションやシステムサービスは、ファイルがディスク上で変更されても、設定ファイルを自動的にリロードしません。エージェントが更新プロセスを完了した後に呼び出される別のフックとしてコマンドを指定することで、設定ファイルを手動でリロードできます。

次のデバイスのライフサイクルフックがサポートされています。

Expand

ライフサイクルフック

説明

beforeUpdating

エージェントが更新の準備を完了した後、ただし、オペレーティングシステムを変更する前に、フックが呼び出されます。このフックのアクションが失敗を返した場合、エージェントは更新をキャンセルします。

afterUpdating

フックは、エージェントがディスクに更新を書き込んだ後に呼び出されます。このフックのアクションが失敗を返した場合、エージェントは更新をキャンセルしてロールバックします。

beforeRebooting

フックは、システムが再起動する前に呼び出されます。エージェントは、アクションの完了またはタイムアウトまで再起動をブロックします。このフックの何らかのアクションが失敗を返した場合、エージェントは更新をキャンセルしてロールバックします。

afterRebooting

フックは、エージェントが再起動後に最初に起動すると呼び出されます。このフックの何らかのアクションが失敗を返した場合、エージェントは失敗を報告しますが、起動を継続します。

1.5.10.1. ルールファイル

デバイスのファイルシステムの以下のいずれかのロケーションに、ルールファイルを追加することで、デバイスのライフサイクルフックを定義できます。

  • /usr/lib/flightctl/hooks.d/<lifecycle_hook_name>/ ドロップインディレクトリーのルールは読み取り専用です。/usr ディレクトリーにルールを追加するには、イメージのビルド中にオペレーティングシステムイメージにルールを追加する必要があります。
  • /etc/flightctl/hooks.d/<lifecycle_hook_name>/ ドロップインディレクトリーのルールは読み書きが可能です。複数の方法を使用して、ランタイム時にルールを更新できます。

ファイルを作成して配置するときは、以下を考慮する必要があります。

  • ルールの名前はすべて小文字である必要があります。
  • 両方のロケーションでルールを定義すると、ルールはマージされます。
  • 複数のルールファイルをライフサイクルフックディレクトリーに追加すると、ファイルはファイル名の辞書的な順序で処理されます。
  • 両方のロケーションで同じファイル名を持つファイルを定義する場合、/etc フォルダー内のファイルは、/usr フォルダー内の同じ名前のファイルよりも優先されます。

ルールファイルは YAML 形式で記述され、1 つ以上のアクションのリストが含まれます。アクションは、外部コマンドを実行する指示である場合があります。

フックに多くのアクションを指定すると、アクションは順番に実行され、次のアクションを開始する前に 1 つのアクションを終了します。

アクションが失敗を返した場合、以下のアクションはスキップされます。

run アクションは以下のパラメーターを取ります。

Expand

パラメーター

説明

以下を実行します。

実行するコマンドへの絶対パス。その後にフラグまたは引数が続きます (例: /usr/bin/nmcli connection reload)。コマンドはシェルで実行されないため、$PATH$HOME などのシェル変数や、|; などのチェーンコマンドは使用できません。必要に応じて、実行するコマンドとしてシェルを指定してシェルを起動できます (例: /usr/bin/bash -c 'echo $SHELL $HOME $USER')。

EnvVars

オプション: コマンドの環境変数として設定するキーと値のペアのリスト。

WorkDir

オプション: コマンドが実行されるディレクトリー。

Timeout

オプション: アクションが完了するまで許可される最大時間。期間は、単一の正の整数として指定し、その後に時間単位を指定します。sm、および h 単位は、それぞれ秒、分、および時間に対応しています。

if

オプション: アクションを実行するために true でなければならない条件のリスト。指定されていない場合、アクションは無条件に実行されます。

デフォルトでは、アクションはフックがトリガーされるたびに実行されます。ただし、afterUpdating フックの場合、If パラメーターを使用して、アクションを実行するために true でなければならない条件を追加できます。それ以外の場合、アクションはスキップされます。

たとえば、更新中に特定のファイルまたはディレクトリーが変更された場合にのみアクションを実行するには、以下のパラメーターを取るパス条件を定義できます。

Expand

パラメーター

説明

Path

アクションを実行する条件として、更新中に変更される必要があるファイルまたはディレクトリーへの絶対パス。スラッシュ (/) を使用してパスを指定します。ディレクトリーへのパスの場合は、スラッシュ (/) で終了する必要があります。ファイルへのパスを指定する場合は、条件を満たすようにファイルを変更する必要があります。ディレクトリーへのパスを指定する場合は、そのディレクトリーまたはそのサブディレクトリー内のファイルが、その条件を満たすように変更されている必要があります。

Op

createdupdated、および removed などのファイル操作のリスト。変更の種類を、アクションの実行の条件として指定したパスに制限します。

afterUpdating フックでアクションのパス条件を指定する場合、コマンドの引数に含めることができ、変更されたファイルの絶対パスに置き換えられる次の変数があります。

Expand

変数

説明

${ Path }

パス条件で指定されたファイルまたはディレクトリーへの絶対パス。

${ Files }

更新時に変更され、パス条件でカバーされるファイルの絶対パスのスペース区切りリスト。

${ CreatedFiles }

更新時に作成され、パス条件でカバーされるファイルの絶対パスのスペース区切りリスト。

${ UpdatedFiles }

更新時に更新され、パス条件でカバーされるファイルの絶対パスのスペース区切りリスト。

${ RemovedFiles }

更新時に削除され、パス条件でカバーされるファイルの絶対パスのスペース区切りリスト。

Red Hat Edge Manager エージェントには、/usr/lib/flightctl/hooks.d/afterupdating/00-default.yaml で定義された組み込みのルールセットが含まれています。特定のファイルが変更された場合、以下のコマンドが実行されます。

Expand

File

コマンド

説明

/etc/systemd/system/

systemctl daemon-reload

systemd ユニットへの変更は、systemd デーモンに systemd マネージャー設定をリロードするよう通知することでアクティベートされます。これにより、すべてのジェネレーターが再実行され、すべてのユニットファイルがリロードされ、依存関係ツリー全体が再作成されます。

/etc/NetworkManager/system-connections/

nmcli conn reload

NetworkManager のシステム接続への変更は、NetworkManager デーモンにすべての接続をリロードするよう通知することでアクティベートされます。詳細は、関連情報 セクションを参照してください。

/etc/firewalld/

firewall-cmd --reload

firewalld の永続的な設定への変更は、firewalld に、新しいランタイム設定としてファイアウォールルールをリロードするよう通知することでアクティベートされます。

1.5.10.2. 関連情報

1.5.11. デバイスリソースのモニタリング

テクノロジープレビュー: デバイスリソースのリソースモニターを設定し、リソースの使用率が定義されたしきい値を超えたときにアラートを作成できます。エージェントが Red Hat Edge Manager サービスにアラートを出すと、サービスは重大度レベルに応じてデバイスのステータスを degraded または error に設定します。

リソースモニターは以下のパラメーターを取ります。

Expand

パラメーター

説明

MonitorType

監視するリソース。現在、CPUMemory、および Disk リソースがサポートされています。

SamplingInterval

モニターが使用量をサンプリングする間隔で、正の整数の後に時間単位 (s は秒、m は分、h は時間) として指定されます。

AlertRules

アラートルールのリスト。

Path

Disk モニター用のみ。監視するディレクトリーへの絶対パス。使用率は、定義されたパスがマウントポイントではない場合でも、パスを含むファイルシステムを反映します。

アラートルールは以下のパラメーターを取ります。

Expand

パラメーター

説明

Severity

アラートルールの重大度は、InfoWarning、または Critical です。重大度レベルとモニターごとに 1 つのアラートルールのみが許可されます。

Duration

サンプリング時にリソース使用量が測定され、平均化される期間で、正の整数の後に時間単位 (s は秒、m は分、h は時間) として指定されます。期間はサンプリング間隔よりも短くする必要があります。

Percentage

アラートをトリガーする使用量のしきい値 (パーセンテージの値)。値は、% 記号なしの 0 から 100 までです。

Description

人間が判読できるアラートの説明。デバッグに役立つアラートの詳細を追加します。デフォルトでは、アラートの説明は load is above >% for more than になります。

1.5.11.1. CLI を使用したデバイスリソースのモニタリング

CLI を使用してデバイスのリソースを監視し、パフォーマンスを追跡して問題のトラブルシューティングを行うツールとコマンドを提供します。

以下の手順を実行します。

  • デバイス仕様の spec.resources セクションにリソースモニターを追加します。たとえば、ディスク用に次のモニターを追加します。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      resources:
      - monitorType: Disk
        samplingInterval: 5s 
    1
    
        path: /application_data 
    2
    
        alertRules:
        - severity: Warning 
    3
    
          duration: 30m
          percentage: 75
          description: Disk space for application data is >75% full for over 30m.
        - severity: Critical 
    4
    
          duration: 10m
          percentage: 90
          description: Disk space for application data is >90% full over 10m.
    [...]
    Copy to Clipboard Toggle word wrap
    1
    5 秒ごとに使用量をサンプリングします。
    2
    /applications_data パスに関連付けられたファイルシステムのディスク使用量を確認します。
    3
    平均使用量が 30 分超にわたって 75% を超えると警告を開始します。
    4
    平均使用量が 10 分にわたって 90% を超えると、重大なアラートを開始します。

1.6. エッジデバイスでのアプリケーションの管理

テクノロジープレビュー: デバイス仕様内のアプリケーションのリストを更新することで、デバイス上のアプリケーションをデプロイ、更新、または削除できます。Red Hat Edge Manager エージェントが確認して仕様の変更を検出すると、エージェントは、Open Container Initiative (OCI) 互換レジストリーから新規または更新されたアプリケーションパッケージとイメージをダウンロードします。次に、エージェントはパッケージを適切なアプリケーションランタイムにデプロイしたり、そのランタイムからパッケージを削除したりします。

Red Hat Edge Manager は、podman-compose ツールをアプリケーションのランタイムと形式としてサポートします。

1.6.1. 前提条件

1.6.2. アプリケーションパッケージイメージのビルド

Red Hat Edge Manager は、Open Container Initiative (OCI) と互換性のあるレジストリーからアプリケーションパッケージをダウンロードできます。podman-compose 形式でアプリケーションパッケージを含む OCI コンテナーイメージをビルドし、そのイメージを OCI レジストリーにプッシュできます。

以下の手順を実行します。

  1. Podman Compose の仕様に従う podman-compose.yaml というファイルで、アプリケーションの機能を定義します。

    1. 以下の内容で Containerfile というファイルを作成します。
    FROM scratch 
    1
    
    COPY podman-compose.yaml /podman-compose.yaml
    LABEL appType="compose" 
    2
    Copy to Clipboard Toggle word wrap
    1
    compose ファイルを scratch コンテナーに埋め込みます。
    2
    appType=compose ラベルを追加します。
  2. コンテナーイメージをビルドして OCI レジストリーにプッシュします。

    1. 次のコマンドを実行して、書き込み権限を持つイメージリポジトリーを定義します。

      OCI_IMAGE_REPO=quai.io/<your_org>/<your_image>
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、イメージタグを定義します。

      OCI_IMAGE_TAG=v1
      Copy to Clipboard Toggle word wrap
    3. アプリケーションコンテナーイメージをビルドします。以下のコマンドを実行します。

      podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
      Copy to Clipboard Toggle word wrap
    4. コンテナーイメージをプッシュします。
    podman push ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
    Copy to Clipboard Toggle word wrap

1.6.3. CLI を使用したデバイスへのアプリケーションのデプロイ

CLI を使用して OCI レジストリーからデバイスにアプリケーションパッケージをデプロイします。

以下の手順を実行します。

  1. デプロイするアプリケーションパッケージを Device リソースの spec.applications フィールドに指定します。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      applications:
      - name: wordpress 
    1
    
        image: quay.io/rhem-demos/wordpress-app:latest 
    2
    
        envVars: 
    3
    
          WORDPRESS_DB_HOST: <database_host>
          WORDPRESS_DB_USER: <user_name>
          WORDPRESS_DB_PASSWORD: <password>
    [...]
    Copy to Clipboard Toggle word wrap
    1
    Web コンソールや CLI でアプリケーションをリスト表示する際に使用される、ユーザー定義のアプリケーション名。
    2
    OCI レジストリーのアプリケーションパッケージへの参照。
    3
    オプション: デプロイメントツールに環境変数やコマンドラインフラグとして渡されるキーと値のペアのリスト。

    注記: デバイス仕様の applications セクションでアプリケーションごとに、対応するデバイスステータス情報を確認できます。

  2. デバイスのステータス情報を確認して、デバイスへのアプリケーションデプロイメントのステータスを確認します。以下のコマンドを実行します。

    flightctl get device/<your_device_id> -o yaml
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    [...]
    spec:
      applications:
      - name: example-app
        image: quay.io/flightctl-demos/example-app:v1
    status:
      applications:
      - name: example-app
        ready: 3/3
        restarts: 0
        status: Running
      applicationsSummary:
        info: All application workloads are healthy.
        status: Healthy
    [...]
    Copy to Clipboard Toggle word wrap

1.7. デバイスフリートの管理

テクノロジープレビュー: Red Hat Edge Manager は、デバイスフリート を通じて多数のデバイスとワークロードの管理を簡素化します。フリートは、共通のデバイステンプレートと管理ポリシーによって管理されるデバイスのグループを定義するリソースです。

デバイステンプレートに変更を加えた場合に、Red Hat Edge Manager エージェントが新しいターゲット仕様を検出すると、フリート内のすべてのデバイスが変更を受け取ります。

また、フリート全体のステータスサマリーを確認できるため、フリートでのデバイスのモニタリングも簡素化されます。

フリートレベル管理には、以下の利点があります。

  • 各デバイスに対して 1 回ではなく、各フリートに対して 1 回だけ操作を実行するため、オペレーションがスケーリングされます。
  • 設定ミスや設定ドリフトのリスクを最小限に抑えます。
  • デバイスをフリートに追加するか、フリート内のデバイスを置き換える際に、ターゲット設定を自動的に適用します。

フリート仕様は以下の機能で構成されています。

ラベルセレクター
どのデバイスがフリートの一部であるかを決定します。
デバイステンプレート
フリート内のデバイスに Red Hat Edge Manager が適用する設定を定義します。
ポリシー
デバイステンプレートへの変更がどのようにデバイスにロールアウトされるかなど、デバイスの管理方法を管理します。

個別に管理されるデバイスとフリートで管理されるデバイスの両方を同時に使用できます。デバイスがフリートに選択されると、Red Hat Edge Manager はデバイステンプレートに基づいて、新しいデバイスのデバイス仕様を作成します。フリートのデバイステンプレートを更新するか、新しいデバイスがフリートに参加すると、Red Hat Edge Manager はフリート内で新しい仕様を適用します。

デバイスがフリートに選択されていない場合、そのデバイスはユーザー管理または管理対象外とみなされます。ユーザー管理のデバイスの場合、デバイスの仕様を手動で、または外部の自動化を通じて更新する必要があります。

重要: デバイスは、同時に複数のフリートに所属することはできません。

詳細は、ラベルとラベルセレクター を参照してください。

1.7.1. フリートへのデバイスの選択

デフォルトでは、デバイスはフリートに割り当てられません。代わりに、各フリートは、デバイスがフリートに追加されるために必要なラベルを定義するセレクターを使用します。

フリートでラベルを使用する方法を理解するには、次の例を参照してください。

次のリストは、Point-of-Sales (POS) 端末装置とそのラベルを示しています。

Expand

デバイス

ラベル

A

type: pos-terminalregion: eaststage: production

B

type: pos-terminalregion: eaststage: development

C

type: pos-terminalregion: weststage: production

D

type: pos-terminalregion: weststage: development

すべての POS 端末が同じ設定を使用し、同じ運用チームによって管理される場合は、type=pos-terminal ラベルセレクターを使用して pos-terminals と呼ばれる単一のフリートを定義できます。すると、そのフリートにはデバイス A、B、C、D が含まれます。

ただし、開発環境または実稼働環境用に、異なる組織ごとに別々のフリートを作成したい場合もあるかもしれません。type=pos-terminal, stage=development ラベルセレクターを使用して、開発用のフリートを定義できます。これにより、デバイス C と D が選択されます。その後、type=pos-terminal, stage=production ラベルセレクターを使用して、実稼働環境用の別のフリートを定義できます。正しいラベルセレクターを使用することで、両方のフリートを個別に管理できます。

重要: 2 つのフリートが同じデバイスを選択しない方法で、セレクターを定義する必要があります。たとえば、あるフリートが region=east を選択し、別のフリートが stage=production を選択した場合、両方のフリートがデバイス A を選択しようとします。2 つのフリートが同じデバイスを選択しようとすると、Red Hat Edge Manager は、現在割り当てられているフリート (存在する場合) にデバイスを保持し、影響を受けるフリートの OverlappingSelectors 条件を true に設定します。

1.7.2. デバイステンプレート

フリートのデバイステンプレートには、テンプレートの更新時にフリート内のすべてのデバイスに適用されるデバイス仕様が含まれています。

たとえば、フリートのデバイステンプレートで、フリート内のすべてのデバイスが quay.io/flightctl/rhel:9.5 オペレーティングシステムイメージを実行する必要があることを指定できます。

次に、Red Hat Edge Manager サービスはターゲット仕様をフリート内のすべてのデバイスにロールアウトし、Red Hat Edge Manager エージェントは各デバイスを適宜更新します。

デバイステンプレートの他の仕様項目を変更でき、Red Hat Edge Manager は同じ方法で変更を適用します。

しかし、フリート内のすべてのデバイスがまったく同じ仕様である必要がない場合もあります。Red Hat Edge Manager では、テンプレートにデバイス名またはラベルの値に基づいて設定されるプレースホルダーを含めることができます。

プレースホルダーの構文は、Go テンプレート と一致します。ただし、単純なテキストとアクションのみを使用できます。

プレースホルダーでの条件付きまたはループの使用はサポートされません。

{{ .metadata.labels.key }} または {{ .metadata.name }} など、デバイスのメタデータから任意のものを参照できます。

プレースホルダーで以下の関数を使用することもできます。

  • upper 関数により、値が大文字に変更されます。たとえば、関数は {{ upper .metadata.name }} です。
  • lower 関数により、値が小文字に変更されます。たとえば、関数は {{ lower .metadata.labels.key }} です。
  • replace 関数は、部分文字列のすべての出現を別の文字列に置き換えます。たとえば、関数は {{ replace "old" "new" .metadata.labels.key }} です。
  • getOrDefault 関数は、存在しないラベルにアクセスした場合にデフォルト値を返します。たとえば、関数は {{ getOrDefault .metadata.labels "key" "default" }} です。

パイプラインで関数を組み合わせることができます。たとえば、組み合わせた関数は {{ getOrDefault .metadata.labels "key" "default" | upper | replace " " "-" }} です。

注記: 適切な Go テンプレート構文を使用していることを確認してください。たとえば、ハイフンにより {{ .metadata.labels.target-revision }} は有効ではありません。代わりに、フィールドを {{ index .metadata.labels "target-revision" }} として参照する必要があります。

次の方法で、デバイステンプレートでプレースホルダーを使用できます。

  • デプロイメントステージでデバイスにラベルを付けることができます。たとえば、ステージラベルは stage: testingstage: production です。次に、使用するオペレーティングシステムイメージを参照する際に、stage キーのラベルをプレースホルダーとして使用できます。たとえば、quay.io/myorg/myimage:latest-{{ .metadata.labels.stage }} のように指定したり、Git リポジトリー内の設定フォルダーを参照したりできます。
  • デプロイメントサイトによってデバイスにラベルを付けることができます。たとえば、デプロイメントサイトは site: factory-berlin および site: factory-madrid などです。
  • 次に、Kubernetes でネットワークアクセス認証情報を含むシークレットを参照する際に、site キーのラベルをパラメーターとして使用できます。

デバイステンプレートの次のフィールドは、プレースホルダーをサポートします。

Expand

フィールド

サポートされているプレースホルダー

オペレーティングシステムイメージ

リポジトリー名、イメージ名、イメージタグ

Git 設定プロバイダー

ターゲットリビジョン、パス

HTTP 設定プロバイダー

URL 接尾辞、パス

インライン設定プロバイダー

コンテンツ、パス

1.7.3. CLI を使用したフリートへのデバイスの選択

テクノロジープレビュー: デバイスをフリートに追加するためのラベルセレクターを定義します。

以下のタスクを完了します。

  1. 以下のコマンドを実行して、ラベルセレクターがフリートに追加するデバイスを返すことを確認します。

    flightctl get devices -l type=pos-terminal -l stage=development
    Copy to Clipboard Toggle word wrap
  2. コマンドを実行し、予想されるデバイスのリストが返された場合は、次の YAML ファイルを使用してデバイスを選択するフリートを定義できます。

    apiVersion: flightctl.io/v1alpha1
    kind: Fleet
    metadata:
      name: my_fleet
    spec:
      selector:
        matchLabels:
          type: pos-terminal
          stage: development
    [...]
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して変更を適用します。

    flightctl apply -f my_fleet.yaml
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、他のフリートのセレクターと重複を確認します。

    flightctl get fleets/my_fleet -o json | jq -r '.status.conditions[] | select(.type=="OverlappingSelectors").status'
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    False
    Copy to Clipboard Toggle word wrap

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat