9.3. oc-mirror プラグインを使用したカスタム Operator カタログの作成


幅広い Operator を使用してカスタムカタログを作成し、oc-mirror OpenShift CLI (oc)プラグインを使用してそれらをミラーリングできます。

9.3.1. Red Hat が提供する Operator カタログとミラーレジストリーの使用

カタログをフィルタリングし、イメージを削除して、特定の Operator を取得し、oc-mirror OpenShift CLI (oc)プラグインを使用してそれらをミラーリングできます。非接続設定で Operator を使用するか、Red Hat Enterprise Linux (RHEL)イメージに埋め込まれた Operator を使用することもできます。

  • ミラーリング用にシステムを設定する方法は、以下の関連情報セクションのリンクを参照してください。
  • Red Hat が提供する Operator カタログから Operator をデプロイする準備ができている場合は、それらをミラーリングするか、RHEL イメージに組み込むために、oc-mirror プラグインを使用したカタログコンテンツの検査 セクションから始めます。

9.3.2. ミラーレジストリーを作成するための oc-mirror プラグインについて

MicroShift で oc-mirror OpenShift CLI (oc)プラグインを使用して、Operator カタログからイメージをフィルタリングおよび削除できます。その後、フィルターされたカタログコンテンツをミラーレジストリーにミラーリングしたり、非接続またはオフラインのデプロイメントでコンテナーイメージを使用したりできます。

インターネットに接続された Red Hat ホストレジストリーから切断されたイメージレジストリーにコンテンツをミラーリングする手順は、選択したレジストリーに関係なく同じです。カタログの内容をミラーリングした後、ミラーレジストリーからこのコンテンツを取得するように各クラスターを設定します。

9.3.2.1. ミラーレジストリーを作成する際の接続に関する考慮事項

レジストリーを入力するときは、次のいずれかの接続シナリオを使用できます。

接続ミラーリング
インターネットとミラーレジストリーの両方にアクセスできるホストがあるが、クラスターノードにはアクセスできない場合、そのマシンからコンテンツを直接ミラーリングできます。
非接続ミラーリング

インターネットとミラーレジストリーの両方にアクセスできるホストがない場合は、イメージをファイルシステムにミラーリングしてから、そのホストまたはリムーバブルメディアを非接続環境に持ち込む必要があります。

重要

コンテナーレジストリーは、プロビジョニングするクラスター内のすべてのマシンから到達可能である必要があります。レジストリーに到達できない場合、ワークロードの再配置など、インストール、更新、およびその他の操作は失敗します。

到達不能なレジストリーによって発生する問題を回避するには、次の標準的な方法を使用します。

  • ミラーレジストリーを高可用性の方法で実行します。
  • ミラーレジストリーが少なくともクラスターの製品可用性と一致していることを確認します。

9.3.3. oc-mirror プラグインを使用したカタログ内容の検査

次の手順例を使用してカタログを選択し、OpenShift Container Platform Operator を一覧表示し、oc-mirror プラグインイメージセット設定ファイルに追加します。カタログを選択して Operator を一覧表示するには、oc mirror v1 を使用する必要があります。

注記

独自のカタログと Operator を使用する場合は、イメージを内部レジストリーに直接プッシュできます。

前提条件

  • OpenShift CLI (oc)をアンインストールしている。
  • Operator Lifecycle Manager (OLM)をインストールしている。
  • oc-mirror プラグインをインストールしている。

手順

  1. 次のコマンドを実行して、フィルタリング可能な Red Hat 提供の Operator カタログのリストを取得します。

    $ oc mirror list operators --version 4.18 --catalogs
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、Red Hat Operators カタログの Operator の一覧を取得します。

    $ oc mirror list operators <--catalog=<catalog_source>> 
    1
    Copy to Clipboard Toggle word wrap
    1
    registry.redhat.io/redhat/redhat-operator-index:v4.18 または quay.io/operatorhubio/catalog:latest などのカタログソースを指定します。
  3. Operator を選択します。この例では、amq-broker-rhel9 Operator を使用します。
  4. オプション: フィルタリングする Operator のチャネルとバージョンを検査するには、次のコマンドを入力します。

    1. 次のコマンドを実行して、チャネルのリストを取得します。

      $ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.18 --package=amq-broker-rhel9
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、チャネル内のバージョンのリストを取得します。

      $ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.18 --package=amq-broker-rhel9 --channel=7.13.x
      Copy to Clipboard Toggle word wrap

次のステップ

  • この手順で収集した情報を使用して、イメージセット設定ファイルを作成および編集します。
  • 変換されたイメージセット設定ファイルからのイメージをミラーレジストリーまたはディスクにミラーリングします。

9.3.4. イメージセット設定ファイルの作成

ImageSetConfiguration YAML ファイルを作成する必要があります。このイメージセット設定ファイルは、ミラーリングする Operator と oc-mirror プラグインの設定の両方を指定します。エントリーが、使用する予定の MicroShift と Operator の両方と互換性を持つように、イメージセット設定ファイルの内容を編集します。

注記

oc mirror v2 は、metadata の代わりにキャッシュシステムを使用します。キャッシュシステムは、1 つのステップが失敗した場合にミラーリングプロセス全体を開始する必要がなくなります。代わりに、失敗したステップのトラブルシューティングを行うと、失敗前に存在していたミラーイメージがプロセスによって再ミラーリングされません。

前提条件

手順

  1. 次の例をガイドとして使用して、MicroShift の ImageSetConfiguration YAML を作成して編集します。

    編集された MicroShift イメージセット設定ファイルの例

    kind: ImageSetConfiguration
    apiVersion: mirror.openshift.io/v2alpha1
    mirror:
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.18 
    1
    
        packages:
        - name: amq-broker-rhel9 
    2
    
          channels:
          - name: 7.13.x 
    3
    
      additionalImages: 
    4
    
       - name: quay.io/rh_ee_aguidi/multi-platform-container:latest
       - name: quay.io/rh_ee_aguidi/empty-image:latest
    Copy to Clipboard Toggle word wrap

    1
    イメージを取得する Operator カタログを設定します。
    2
    イメージセットに含める Operator パッケージを指定します。カタログ内のすべてのパッケージを取得するには、このフィールドを削除してください。
    3
    イメージセットに含める Operator パッケージの特定のチャネルのみを指定します。そのチャネルでバンドルを使用しない場合も、常に Operator パッケージのデフォルトチャネルを含める必要があります。oc mirror list operators --catalog=<catalog_name> --package=<package_name> コマンドを実行すると、デフォルトチャネルを見つけることができます。
    4
    イメージセットに含める追加のイメージを指定します。追加のイメージを指定する必要がない場合は、このフィールドを削除してください。
    重要

    プラットフォーム フィールド、関連フィールド、および Helm は MicroShift ではサポートされていません。

  2. 更新されたファイルを ImageSetConfiguration.yaml として保存します。

次のステップ

  • oc-mirror プラグインを使用して、イメージセットをターゲットミラーレジストリーに直接ミラーリングします。
  • CRI-O を設定します。
  • カタログソースをクラスターに適用します。

9.3.4.1. oc-mirror プラグイン v2 の ImageSet 設定パラメーター

oc-mirror プラグイン v2 には、ミラーリングするイメージを定義するイメージセット設定ファイルが必要です。次の表に、ImageSetConfiguration リソースで使用可能なパラメーターを示します。

注記

minVersion および maxVersion プロパティーを使用して特定の Operator バージョン範囲をフィルターすると、複数のチャネルヘッドエラーが発生する可能性があります。エラーメッセージには、multiple channel heads があることが示されます。これは、フィルターを適用すると、Operator の更新グラフが切り捨てられるためです。

OLM の要件として、すべての Operator チャネルに、1 つのエンドポイント (つまり最新バージョンの Operator) を持つ更新グラフを構成するバージョンが含まれている必要があります。フィルター範囲を適用すると、更新グラフが 2 つ以上の個別のグラフ、または複数のエンドポイントを持つグラフに変換されることがあります。

このエラーを回避するには、最新バージョンの Operator を除外しないでください。それでもエラーが発生する場合は、Operator に応じて、maxVersion プロパティーを増やすか、minVersion プロパティーを減らす必要があります。Operator グラフはそれぞれ異なる可能性があるため、エラーが解決するまでこれらの値を調整する必要がある場合があります。

Expand
表9.2 ImageSetConfiguration パラメーター
パラメーター説明

apiVersion

ImageSetConfiguration コンテンツの API バージョン。

文字列の例: mirror.openshift.io/v2alpha1

mirror

イメージセットの設定。

オブジェクト

mirror.additionalImages

イメージセットの追加のイメージ設定。

オブジェクトの配列

以下に例を示します。

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

mirror.additionalImages.name

ミラーリングするイメージのタグまたはダイジェスト。

文字列の例: registry.redhat.io/ubi8/ubi:latest

mirror.blockedImages

ミラーリングをブロックするタグまたはダイジェスト (SHA) を持つイメージのリスト。

文字列配列の例: docker.io/library/alpine

mirror.operators

イメージセットの Operators 設定。

オブジェクトの配列

以下に例を示します。

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.18
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

mirror.operators.catalog

イメージセットに含める Operator カタログ。

文字列の例: registry.redhat.io/redhat/redhat-operator-index:v4.15

mirror.operators.full

true の場合、完全なカタログ、Operator パッケージ、または Operator チャネルをダウンロードします。

ブール値。デフォルト値は false です。

mirror.operators.packages

Operator パッケージ設定

オブジェクトの配列

以下に例を示します。

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:4.18
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

mirror.operators.packages.name

イメージセットに含める Operator パッケージ名

文字列の例: elasticsearch-operator

mirror.operators.packages.channels

Operator パッケージのチャネル設定。

オブジェクト

mirror.operators.packages.channels.name

イメージセットに含める、パッケージ内で一意の Operator チャネル名。

文字列の例: fast または stable-v4.15

mirror.operators.packages.channels.maxVersion

Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。

文字列の例: 5.2.3-31

mirror.operators.packages.channels.minVersion

存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。

文字列の例: 5.2.3-31

mirror.operators.packages.maxVersion

Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。

文字列の例: 5.2.3-31

mirror.operators.packages.minVersion

存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。

文字列の例: 5.2.3-31

mirror.operators.targetCatalog

参照されるカタログをミラーリングするための代替名とオプションの namespace 階層。

文字列の例: my-namespace/my-operator-catalog

mirror.operators.targetCatalogSourceTemplate

oc-mirror プラグイン v2 が生成した catalogSource カスタムリソースを完了するために使用するテンプレートのディスク上のパス。

文字列の例: /tmp/catalog-source_template.yaml テンプレートファイルの例:

apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: discarded
  namespace: openshift-marketplace
spec:
  image: discarded
  sourceType: grpc
  updateStrategy:
    registryPoll:
      interval: 30m0s
Copy to Clipboard Toggle word wrap

mirror.operators.targetTag

targetName または targetCatalog に追加する代替タグ。

文字列の例: v1

9.3.4.1.1. DeleteImageSetConfiguration パラメーター

oc-mirror プラグイン v2 でイメージの削除を使用するには、ミラーレジストリーから削除するイメージを定義する DeleteImageSetConfiguration.yaml 設定ファイルを使用する必要があります。次の表は、DeleteImageSetConfiguration リソースで使用可能なパラメーターを示しています。

Expand
表9.3 DeleteImageSetConfiguration パラメーター
パラメーター説明

apiVersion

DeleteImageSetConfiguration コンテンツの API バージョン。

文字列の例: mirror.openshift.io/v2alpha1

delete

削除するイメージセットの設定。

オブジェクト

delete.additionalImages

削除イメージセットの追加イメージ設定。

オブジェクトの配列の例:

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest
Copy to Clipboard Toggle word wrap

delete.additionalImages.name

削除するイメージのタグまたはダイジェスト。

文字列の例: registry.redhat.io/ubi8/ubi:latest

delete.operators

削除イメージセットの Operator の設定。

オブジェクトの配列の例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'
Copy to Clipboard Toggle word wrap

delete.operators.catalog

削除イメージセットに含める Operator カタログ。

文字列の例: registry.redhat.io/redhat/redhat-operator-index:v4.15

delete.operators.full

true の場合、完全なカタログ、Operator パッケージ、または Operator チャネルが削除されます。

ブール値。デフォルト値は false です。

delete.operators.packages

Operator パッケージ設定

オブジェクトの配列の例:

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:{product-version}
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'
Copy to Clipboard Toggle word wrap

delete.operators.packages.name

削除イメージセットに含める Operator パッケージ名。

文字列の例: elasticsearch-operator

delete.operators.packages.channels

Operator パッケージのチャネル設定。

オブジェクト

delete.operators.packages.channels.name

削除イメージセットに含める、パッケージ内で一意の Operator チャネル名。

文字列の例: fast または stable-v4.15

delete.operators.packages.channels.maxVersion

選択したチャネル内で削除する Operator の最大バージョン。

文字列の例: 5.2.3-31

delete.operators.packages.channels.minVersion

Operator が存在する選択範囲内で削除する Operator の最小バージョン。

文字列の例: 5.2.3-31

delete.operators.packages.maxVersion

Operator が存在するすべてのチャネルで削除する最大バージョンの Operator。

文字列の例: 5.2.3-31

delete.operators.packages.minVersion

Operator が存在するすべてのチャネルで削除する最小バージョンの Operator。

文字列の例: 5.2.3-31

9.3.5. ミラーからミラーへのミラーリング

oc-mirror プラグインを使用して、イメージセットの作成中にアクセス可能なターゲットミラーレジストリーにイメージセットを直接ミラーリングできます。

前提条件

  • 必要なコンテナーイメージを取得するためにインターネットにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • oc-mirror CLI プラグインをインストールしている。
  • イメージセット設定ファイルを作成した。

手順

  • 次のコマンドを実行して、指定されたイメージセット設定から指定されたレジストリーにイメージをミラーリングします。

    $ oc-mirror --config imageset-config.yaml --workspace file://<emphasis><v2_workspace></emphasis> \
    1
    
      docker://<emphasis><remote_registry></emphasis> --v2 
    2
    Copy to Clipboard Toggle word wrap
    1
    ミラー間プロセスに the-- workspace フラグを使用する必要があります。&lt ;v2_workspace& gt; は、ミラーリングプロセスのカスタムリソースを格納するために使用するディレクトリーに置き換えます。
    2
    & lt;remote_registry& gt; をイメージセットファイルをミラーリングするレジストリーの名前に置き換えます。レジストリーは docker:// で始まる必要があります。ミラーレジストリーに最上位の namespace を指定する場合は、これ以降の実行でもこれと同じ namespace を使用する必要があります。

    出力例

    Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalog
    Copy to Clipboard Toggle word wrap

    重要

    MicroShift で CRI-O の手動設定の参照コンテンツとして、ImageDigestMirrorSet YAML ファイルを使用する必要があります。リソースを MicroShift クラスターに直接適用することはできません。

検証

  1. 次のコマンドを実行して、cluster-resources サブディレクトリーの内容を一覧表示します。

    $ ls <v2_workspace>/working-dir/cluster-resources/ 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt ;v2_workspace&gt; は、ミラーリングプロセスのカスタムリソースを保存するために使用したディレクトリーに置き換えます。

次のステップ

  • CRI-O を手動で設定するために使用する ImageDigestMirrorSet YAML コンテンツを変換します。
  • 必要に応じて、非接続またはオフラインで使用するために、ミラーからディスクにイメージをミラーリングします。

トラブルシューティング

9.3.6. Operator のレジストリーミラーを使用するための CRI-O の設定

oc-mirror プラグインで作成された ImageDigestMirrorSet YAML ファイルを、MicroShift で使用される CRI-O コンテナーランタイム設定と互換性のある形式に変換する必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • Operator Lifecycle Manager (OLM)をインストールしている。
  • oc-mirror プラグインをインストールしている。
  • yq バイナリーをインストールしている。
  • ImageDigestMirrorSet および CatalogSource YAML ファイルは、cluster-resources サブディレクトリーで利用できます。

手順

  1. 次のコマンドを実行して、ImageDigestMirrorSet YAML ファイルの内容を確認します。

    $ cat <v2_workspace>/working-dir/cluster-resources/imagedigestmirrorset.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt ;v2_workspace&gt; を、ミラーリングリソースを生成したときに使用したディレクトリー名に置き換えます。

    出力例

    apiVersion: config.openshift.io/v1
    kind: ImageDigestMirrorSet
    metadata:
      labels:
        operators.openshift.org/catalog: "true"
      name: operator-0
    spec:
      imageDigestMirrors:
      - mirrors:
        - registry.example.com/amq7
        source: registry.redhat.io/amq7
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、imagedigestmirrorset.yaml を CRI-O 設定の準備が整った形式に変換します。

    yq '.spec.imageDigestMirrors[] as $item ireduce([]; . + [{"mirror": $item.mirrors[], "source": ($item | .source)}]) | .[] |
      "[[registry]]
          prefix = \"" + .source + "\"
          location = \"" + .mirror + "\"
          mirror-by-digest-only = true
          insecure = true
          "' ./mirror1/working-dir/cluster-resources/imagedigestmirrorset.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    [[registry]]
          prefix = "registry.redhat.io/amq7"
          location = "registry.example.com/amq7"
          mirror-by-digest-only = true
          insecure = true
    Copy to Clipboard Toggle word wrap

  3. /etc/containers/registries.conf.d/ ディレクトリーの CRI-O 設定ファイルに出力を追加します。

    crio-config.yaml ミラー設定ファイルの例

    [[registry]]
          prefix = "registry.redhat.io/amq7"
          location = "registry.example.com/amq7"
          mirror-by-digest-only = true
          insecure = true
    
    [[registry]]
        prefix = ""
        location = "quay.io"
        mirror-by-digest-only = true
    [[registry.mirror]]
        location = "<registry_host>:<port>" 
    1
    
        insecure = false
    Copy to Clipboard Toggle word wrap

    1
    ミラーレジストリーサーバーのホスト名およびポートを指定します(例: microshift-quay:8443 )。
  4. 次のコマンドで MicroShift を再起動して、CRI-O 設定の変更を適用します。

    $ sudo systemctl restart crio
    Copy to Clipboard Toggle word wrap

9.3.7. oc-mirror プラグインで作成されたカスタムカタログのインストール

イメージセットをミラーレジストリーにミラーリングした後、生成された CatalogSource カスタムリソース (CR) をクラスターに適用する必要があります。Operator Lifecycle Manager (OLM)は CatalogSource CR を使用して、ミラーレジストリーで使用可能な Operator に関する情報を取得します。次に、カスタムカタログをサブスクライブするためのサブスクリプション CR を作成して適用する必要があります。

前提条件

  • イメージセットをレジストリーミラーにミラーリングしている。
  • CRI-O コンテナーのランタイム設定に、イメージ参照情報を追加している。

手順

  1. 次のコマンドを実行して、results ディレクトリーからカタログソース設定ファイルを適用し、カタログソースオブジェクトを作成します。

    $ oc apply -f ./<v2_workspace>/working-dir/cluster-resources/catalogSource-cs-redhat-catalog.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt ;v2_workspace&gt; は、ミラーリングプロセスのカスタムリソースを保存するために使用したディレクトリーに置き換えます。

    出力例

    catalogsource.operators.coreos.com/cs-redhat-catalog created
    Copy to Clipboard Toggle word wrap

  2. 詳細は、以下のサンプルファイルを参照してください。

    カタログソース設定ファイルの例

    apiVersion: operators.coreos.com/v2alpha1
    kind: CatalogSource
    metadata:
      name: redhat-catalog
      namespace: openshift-marketplace 
    1
    
    spec:
      sourceType: grpc
      image: registry.example.com/redhat/redhat-catalog:v4.18
      updateStrategy:
        registryPoll:
          interval: 60m
    Copy to Clipboard Toggle word wrap

    1
    グローバル namespace を指定します。metadata.namespaceopenshift-marketplace に設定すると、カタログはすべての namespace 内のカタログを参照できるようになります。どの namespace のサブスクリプションでも、openshift-marketplace namespace で作成されたカタログを参照できます。
  3. 以下のコマンドを実行して、CatalogSource リソースが正常にインストールされたことを確認します。

    $ oc get catalogsource --all-namespaces
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE               NAME                  DISPLAY               TYPE   PUBLISHER   AGE
    openshift-marketplace   certified-operators   Certified Operators   grpc   Red Hat     37m
    openshift-marketplace   community-operators   Community Operators   grpc   Red Hat     37m
    openshift-marketplace   redhat-marketplace    Red Hat Marketplace   grpc   Red Hat     37m
    openshift-marketplace   redhat-catalog        Red Hat Catalog     grpc   Red Hat     37m
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを使用して、カタログソースが実行されていることを確認します。

    $ oc get pods -n openshift-marketplace
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                             READY   STATUS    RESTARTS   AGE
    cs-redhat-catalog-4227b   2/2     Running   0          2m5s
    Copy to Clipboard Toggle word wrap

  5. 次の例のような Subscription CR を作成します。

    Subscription CR の例

    apiVersion: operators.coreos.com/v2alpha1
    kind: Subscription
    metadata:
      name: amq-broker
      namespace: openshift-operators
    spec:
      channel: 7.13.x
      name: amq-broker-rhel9
      source: cs-redhat-catalog
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap

  6. 次のコマンドを実行して、Subscription CR 設定を適用します。

    $ oc apply -f ./<subscription_cr.yaml> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <subscription _cr.yaml> でサブスクリプションの名前を指定します (例: amq-​broker-subscription-cr.yaml )。

    出力例

    subscription.operators.coreos.com/amq-broker created
    Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat