5.12. Operator バンドルの検証
Operator の作成者は、Operator SDK で bundle validate
コマンドを実行して Operator バンドルのコンテンツおよび形式を検証できます。リモート Operator バンドルイメージまたはローカル Operator バンドルディレクトリーでコマンドを実行できます。
5.12.1. bundle validate コマンドについて
Operator SDK scorecard
コマンドは設定ファイルおよびテストイメージに基づいて Operator でテストを実行できますが、bundle validate
サブコマンドは、ローカルバンドルディレクトリーおよびリモートバンドルイメージのコンテンツおよび構造を検証できます。
bundle validate
コマンドの構文
$ operator-sdk bundle validate <bundle_dir_or_image> <flags>
bundle validate
コマンドは、make bundle
コマンドを使用してバンドルをビルドすると自動的に実行されます。
バンドルイメージはリモートレジストリーからプルされ、検証前にローカルにビルドされます。ローカルバンドルディレクトリーには Operator メタデータおよびマニフェストが含まれている必要があります。バンドルメタデータとマニフェストには、以下のバンドルレイアウトと同様の構造が必要です。
バンドルレイアウトの例
./bundle ├── manifests │ ├── cache.my.domain_memcacheds.yaml │ └── memcached-operator.clusterserviceversion.yaml └── metadata └── annotations.yaml
エラーが検出されない場合、バンドルテストは検証に合格し、終了コード 0
で終了します。
出力例
INFO[0000] All validation tests have completed successfully
エラーが検出されると、テストは検証に失敗し、終了コード 1
で終了します。
出力例
ERRO[0000] Error: Value cache.example.com/v1alpha1, Kind=Memcached: CRD "cache.example.com/v1alpha1, Kind=Memcached" is present in bundle "" but not defined in CSV
警告が含まれるバンドルテストは、エラーが検出されていない限り、終了コード 0
で検証を終了すことができます。テストはエラーが発生した場合にのみ失敗します。
出力例
WARN[0000] Warning: Value : (memcached-operator.v0.0.1) annotations not found INFO[0000] All validation tests have completed successfully
bundle validate
サブコマンドの詳細を確認するには、以下のコマンドを実行してください。
$ operator-sdk bundle validate -h
5.12.2. ビルトインのバンドル検証テスト
Operator SDK には、スイートに編成された事前定義済みのバリデーターが同梱されています。バリデーターを指定せずに bundle validate
コマンドを実行すると、デフォルトのテストが実行されます。デフォルトテストは、バンドルが Operator Framework コミュニティーによって定義された仕様に準拠していることを確認します。詳細は、「Bundle format」を参照してください。
OperatorHub の互換性や非推奨の Kubernetes API などの問題の有無をテストするために、オプションのバリデーターを実行できます。オプションバリデーターは、必ずデフォルトのテストに追加して実行されます。
オプションのテストスイートの bundle validate
コマンドの構文
$ operator-sdk bundle validate <bundle_dir_or_image> --select-optional <test_label>
名前 | 説明 | ラベル |
---|---|---|
Operator Framework | このバリデーターは、Operator Framework によって提供されるバリデーターのスイート全体に対して Operator バンドルをテストします。 |
|
OperatorHub | このバリデーターは、OperatorHub との互換性に関して、Operator バンドルをテストします。 |
|
Good Practices | このバリデーターは、Operator バンドルが Operator Framework で定義されるグッドプラクティスに準拠するかどうかをテストします。これは、空の CRD 記述またはサポート対象外の Operator Lifecycle Manager (OLM) リソースなどの問題の有無をチェックします。 |
|
関連情報
5.12.3. bundle validate コマンドの実行
デフォルトのバリデーターは、bundle validate
コマンドを実行するたびにテストを実行します。オプションのバリデーターは、--select-optional
フラグを使用して実行できます。オプションバリデーターは、デフォルトのテストに追加してテストを実行します。
前提条件
- Operator プロジェクトが Operator SDK を使用して生成されていること。
手順
ローカルバンドルディレクトリーに対してデフォルトのバリデーターを実行する場合は、Operator プロジェクトディレクトリーから以下のコマンドを入力します。
$ operator-sdk bundle validate ./bundle
リモート Operator バンドルイメージに対してデフォルトのバリデーターを実行する必要がある場合は、以下のコマンドを入力します。
$ operator-sdk bundle validate \ <bundle_registry>/<bundle_image_name>:<tag>
ここでは、以下のようになります。
- <bundle_registry>
-
バンドルがホストされるレジストリーを指定します (例:
quay.io/example
)。 - <bundle_image_name>
-
バンドルイメージの名前を指定します (例:
memcached-operator
)。 - <tag>
v1.31.0
などのバンドルイメージのタグを指定します。注記Operator バンドルイメージを検証する必要がある場合は、イメージをリモートレジストリーでホストする必要があります。Operator SDK はイメージをプルし、テストを実行する前にこれをローカルにビルドします。
bundle validate
コマンドは、ローカルバンドルイメージのテストをサポートしません。
Operator バンドルに対して追加のバリデーターを実行する必要がある場合は、以下のコマンドを入力します。
$ operator-sdk bundle validate \ <bundle_dir_or_image> \ --select-optional <test_label>
ここでは、以下のようになります。
- <bundle_dir_or_image>
-
~/projects/memcached
またはquay.io/example/memcached-operator:v1.31.0
などのローカルバンドルディレクトリーまたはリモートバンドルイメージを指定します。 - <test_label>
実行するバリデーターの名前を指定します (例:
name=good-practices
)。出力例
ERRO[0000] Error: Value apiextensions.k8s.io/v1, Kind=CustomResource: unsupported media type registry+v1 for bundle object WARN[0000] Warning: Value k8sevent.v0.0.1: owned CRD "k8sevents.k8s.k8sevent.com" has an empty description
5.12.4. Operator のマルチプラットフォーム対応の検証
bundle validate
コマンドを実行すると、Operator のマルチプラットフォーム対応性を検証できます。このコマンドは、Operator プロジェクトが次の条件を満たしていることを確認します。
- Operator のマネージャーイメージは、クラスターサービスバージョン (CSV) ファイルでラベル付けされているプラットフォームをサポートします。
- Operator の CSV には、Operator Lifecycle Manager (OLM) および OperatorHub でサポートされているプラットフォームのラベルが含まれています。
手順
次のコマンドを実行して、Operator プロジェクトが複数のアーキテクチャーに対応しているかどうかを検証します。
$ operator-sdk bundle validate ./bundle \ --select-optional name=multiarch
検証メッセージの例
INFO[0020] All validation tests have completed successfully
マネージャーイメージに CSV ラベルがない場合のエラーメッセージの例
ERRO[0016] Error: Value test-operator.v0.0.1: not all images specified are providing the support described via the CSV labels. Note that (SO.architecture): (linux.ppc64le) was not found for the image(s) [quay.io/example-org/test-operator:v1alpha1] ERRO[0016] Error: Value test-operator.v0.0.1: not all images specified are providing the support described via the CSV labels. Note that (SO.architecture): (linux.s390x) was not found for the image(s) [quay.io/example-org/test-operator:v1alpha1] ERRO[0016] Error: Value test-operator.v0.0.1: not all images specified are providing the support described via the CSV labels. Note that (SO.architecture): (linux.amd64) was not found for the image(s) [quay.io/example-org/test-operator:v1alpha1] ERRO[0016] Error: Value test-operator.v0.0.1: not all images specified are providing the support described via the CSV labels. Note that (SO.architecture): (linux.arm64) was not found for the image(s) [quay.io/example-org/test-operator:v1alpha1]
OperatorHub フラグが欠落している場合のエラーメッセージの例
WARN[0014] Warning: Value test-operator.v0.0.1: check if the CSV is missing the label (operatorframework.io/arch.<value>) for the Arch(s): ["amd64" "arm64" "ppc64le" "s390x"]. Be aware that your Operator manager image ["quay.io/example-org/test-operator:v1alpha1"] provides this support. Thus, it is very likely that you want to provide it and if you support more than amd64 architectures, you MUST,use the required labels for all which are supported.Otherwise, your solution cannot be listed on the cluster for these architectures