5.6. Java ベースの Operator
5.6.1. Java ベースの Operator の Operator SDK の使用を開始する リンクのコピーリンクがクリップボードにコピーされました!
Java ベースの Operator SDK はテクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Operator SDK によって提供されるツールおよびライブラリーを使用して Java ベースの Operator をセットアップし、実行することに関連した基本内容を示すには、Operator 開発者は Java ベースの Memcached の Operator のサンプル、分散キー/値のストアをビルドして、クラスターへデプロイすることができます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Container Platform の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Container Platform リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Container Platform 4.16 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Container Platform の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
OpenShift Container Platform で非推奨となったか、削除された主な機能の最新の一覧は、OpenShift Container Platform リリースノートの 非推奨および削除された機能 セクションを参照してください。
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
5.6.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
5.6.1.2. Java ベースの Operator の作成とデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK を使用して Memcached の単純な Java ベースの Operator をビルドし、デプロイできます。
手順
プロジェクトを作成します。
プロジェクトディレクトリーを作成します。
mkdir memcached-operator
$ mkdir memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロジェクトディレクトリーに移動します。
cd memcached-operator
$ cd memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow quarkusプラグインを指定してoperator-sdk initコマンドを実行し、プロジェクトを初期化します。operator-sdk init \ --plugins=quarkus \ --domain=example.com \ --project-name=memcached-operator$ operator-sdk init \ --plugins=quarkus \ --domain=example.com \ --project-name=memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
API を作成します。
単純な Memcached API を作成します。
operator-sdk create api \ --plugins quarkus \ --group cache \ --version v1 \ --kind Memcached$ operator-sdk create api \ --plugins quarkus \ --group cache \ --version v1 \ --kind MemcachedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator イメージをビルドし、プッシュします。
デフォルトの
Makefileターゲットを使用して Operator をビルドし、プッシュします。プッシュ先となるレジストリーを使用するイメージのプル仕様を使用してIMGを設定します。make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator を実行します。
CRD をインストールします。
make install
$ make installCopy to Clipboard Copied! Toggle word wrap Toggle overflow プロジェクトをクラスターにデプロイします。
IMGをプッシュしたイメージに設定します。make deploy IMG=<registry>/<user>/<image_name>:<tag>
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サンプルカスタムリソース (CR) を作成します。
サンプル CR を作成します。
oc apply -f config/samples/cache_v1_memcached.yaml \ -n memcached-operator-system$ oc apply -f config/samples/cache_v1_memcached.yaml \ -n memcached-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow Operator を調整する CR を確認します。
oc logs deployment.apps/memcached-operator-controller-manager \ -c manager \ -n memcached-operator-system$ oc logs deployment.apps/memcached-operator-controller-manager \ -c manager \ -n memcached-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Delete a CR.
次のコマンドを実行して CR を削除します。
oc delete -f config/samples/cache_v1_memcached.yaml -n memcached-operator-system
$ oc delete -f config/samples/cache_v1_memcached.yaml -n memcached-operator-systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow クリーンアップします。
以下のコマンドを実行して、この手順の一部として作成されたリソースをクリーンアップします。
make undeploy
$ make undeployCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.1.3. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
- Java ベースの Operator のビルドに関する詳細な手順は、Java ベースの Operator の Operator SDK チュートリアル を参照してください。
5.6.2. Java ベースの Operator の Operator SDK チュートリアル リンクのコピーリンクがクリップボードにコピーされました!
Java ベースの Operator SDK はテクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Operator 開発者は、Operator SDK での Java プログラミング言語のサポートを利用して、Java ベースの Memcached の Operator のサンプルをビルドして、分散キー/値のストアを作成し、そのライフサイクルを管理することができます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Container Platform の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Container Platform リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Container Platform 4.16 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Container Platform の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
OpenShift Container Platform で非推奨となったか、削除された主な機能の最新の一覧は、OpenShift Container Platform リリースノートの 非推奨および削除された機能 セクションを参照してください。
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
このプロセスは、Operator Framework の 2 つの重要な設定要素を使用して実行されます。
- Operator SDK
-
operator-sdkCLI ツールおよびjava-operator-sdkライブラリー API - Operator Lifecycle Manager (OLM)
- クラスター上の Operator のインストール、アップグレード、ロールベースのアクセス制御 (RBAC)
このチュートリアルでは、Java ベースの Operator の Operator SDK の使用を開始する よりも詳細に説明します。
5.6.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
5.6.2.2. プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK CLI を使用して memcached-operator というプロジェクトを作成します。
手順
プロジェクトのディレクトリーを作成します。
mkdir -p $HOME/projects/memcached-operator
$ mkdir -p $HOME/projects/memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow ディレクトリーに切り替えます。
cd $HOME/projects/memcached-operator
$ cd $HOME/projects/memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow quarkusプラグインを指定してoperator-sdk initコマンドを実行し、プロジェクトを初期化します。operator-sdk init \ --plugins=quarkus \ --domain=example.com \ --project-name=memcached-operator$ operator-sdk init \ --plugins=quarkus \ --domain=example.com \ --project-name=memcached-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.2.1. PROJECT ファイル リンクのコピーリンクがクリップボードにコピーされました!
operator-sdk init コマンドで生成されるファイルの 1 つに、Kubebuilder の PROJECT ファイルがあります。プロジェクトルートから実行される後続の operator-sdk コマンドおよび help 出力は、このファイルを読み取り、プロジェクトタイプが Java であることを認識しています。以下に例を示します。
domain: example.com layout: - quarkus.javaoperatorsdk.io/v1-alpha projectName: memcached-operator version: "3"
domain: example.com
layout:
- quarkus.javaoperatorsdk.io/v1-alpha
projectName: memcached-operator
version: "3"
5.6.2.3. API およびコントローラーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK CLI を使用してカスタムリソース定義 (CRD) API およびコントローラーを作成します。
手順
以下のコマンドを実行して API を作成します。
operator-sdk create api \ --plugins=quarkus \ --group=cache \ --version=v1 \ --kind=Memcached$ operator-sdk create api \ --plugins=quarkus \1 --group=cache \2 --version=v1 \3 --kind=Memcached4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
treeコマンドを実行して、ファイル構造を表示します。tree
$ treeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.3.1. API の定義 リンクのコピーリンクがクリップボードにコピーされました!
Memcached カスタムリソース (CR) の API を定義します。
手順
create apiプロセスの一部として生成された以下のファイルを編集します。MemcachedSpec.javaファイルの以下の属性を更新して、MemcachedCR の必要な状態を定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MemcachedStatus.javaファイルの以下の属性を更新して、MemcachedCR の観察された状態を定義します。注記以下の例では、Node ステータスフィールドを示しています。実際には、通常のステータスプロパティー を使用することが推奨されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Memcached.javaファイルを更新して、MemcachedSpec.javaとMemcachedStatus.javaファイルの両方に拡張する Memcached API のスキーマを定義します。@Version("v1") @Group("cache.example.com") public class Memcached extends CustomResource<MemcachedSpec, MemcachedStatus> implements Namespaced {}@Version("v1") @Group("cache.example.com") public class Memcached extends CustomResource<MemcachedSpec, MemcachedStatus> implements Namespaced {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.3.2. CRD マニフェストの生成 リンクのコピーリンクがクリップボードにコピーされました!
MemcachedSpec および MemcachedStatus ファイルを使用して API を定義したら、CRD マニフェストを生成できます。
手順
memcached-operatorディレクトリーから以下のコマンドを実行し、CRD を生成します。mvn clean install
$ mvn clean installCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下の例のように、
target/kubernetes/memcacheds.cache.example.com-v1.ymlファイルの CRD の内容を確認します。cat target/kubernetes/memcacheds.cache.example.com-v1.yaml
$ cat target/kubernetes/memcacheds.cache.example.com-v1.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.3.3. カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
CRD マニフェストの生成後に、カスタムリソース (CR) を作成できます。
手順
memcached-sample.yamlという Memcached CR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.4. コントローラーの実装 リンクのコピーリンクがクリップボードにコピーされました!
新規 API およびコントローラーの作成後に、コントローラーロジックを実装することができます。
手順
以下の依存関係を
pom.xmlファイルに追加します。<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency><dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、生成されたコントローラーファイル
MemcachedReconciler.javaを以下の実装例に置き換えます。例5.10
MemcachedReconciler.javaの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントローラーのサンプルは、それぞれの
Memcachedカスタムリソース (CR) について以下の調整 (reconciliation) ロジックを実行します。- Memcached デプロイメントが存在しない場合に作成する。
-
デプロイメントのサイズが、
MemcachedCR 仕様で指定されたサイズになるようにする。 -
MemcachedCR ステータスをmemcachedPod の名前で更新する。
次のサブセクションでは、実装例のコントローラーがリソースを監視する方法と reconcile ループがトリガーされる方法を説明しています。これらのサブセクションを省略し、直接 Operator の実行 に進むことができます。
5.6.2.4.1. reconcile ループ リンクのコピーリンクがクリップボードにコピーされました!
すべてのコントローラーには、reconcile ループを実装する
Reconcile()メソッドのある reconciler オブジェクトがあります。以下の例のように、reconcile ループにはDeployment引数が渡されます。Deployment deployment = client.apps() .deployments() .inNamespace(resource.getMetadata().getNamespace()) .withName(resource.getMetadata().getName()) .get();Deployment deployment = client.apps() .deployments() .inNamespace(resource.getMetadata().getNamespace()) .withName(resource.getMetadata().getName()) .get();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例で示すように、
Deploymentがnullの場合、デプロイメントを作成する必要があります。Deploymentの作成後に、調整が必要であるかどうかを判別できます。調整が必要ない場合は、UpdateControl.noUpdate()の値を返します。必要な場合は、UpdateControl.updateStatus(resource) の値を返します。if (deployment == null) { Deployment newDeployment = createMemcachedDeployment(resource); client.apps().deployments().create(newDeployment); return UpdateControl.noUpdate(); }if (deployment == null) { Deployment newDeployment = createMemcachedDeployment(resource); client.apps().deployments().create(newDeployment); return UpdateControl.noUpdate(); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deploymentの取得後に、以下の例のように現在のレプリカおよび必要なレプリカを取得します。int currentReplicas = deployment.getSpec().getReplicas(); int requiredReplicas = resource.getSpec().getSize();int currentReplicas = deployment.getSpec().getReplicas(); int requiredReplicas = resource.getSpec().getSize();Copy to Clipboard Copied! Toggle word wrap Toggle overflow currentReplicasがrequiredReplicasに一致しない場合、以下の例のようにDeploymentを更新する必要があります。if (currentReplicas != requiredReplicas) { deployment.getSpec().setReplicas(requiredReplicas); client.apps().deployments().createOrReplace(deployment); return UpdateControl.noUpdate(); }if (currentReplicas != requiredReplicas) { deployment.getSpec().setReplicas(requiredReplicas); client.apps().deployments().createOrReplace(deployment); return UpdateControl.noUpdate(); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例は、Pod とその名前のリストを取得する方法を示しています。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リソースが作成されたかどうかを確認し、Memcached リソースで Pod の名前を確認します。これらの条件のいずれかに不一致が存在する場合は、以下の例のように調整を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.4.2. labelsForMemcached の定義 リンクのコピーリンクがクリップボードにコピーされました!
labelsForMemcached は、リソースに割り当てるラベルのマッピングを返すユーティリティーです。
5.6.2.4.3. createMemcachedDeployment の定義 リンクのコピーリンクがクリップボードにコピーされました!
createMemcachedDeployment メソッドは fabric8 DeploymentBuilder クラスを使用します。
5.6.2.5. Operator の実行 リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK CLI を使用して Operator をビルドし、実行する方法は 3 つあります。
- クラスター外で Go プログラムとしてローカルに実行します。
- クラスター上のデプロイメントとして実行します。
- Operator をバンドルし、Operator Lifecycle Manager (OLM) を使用してクラスター上にデプロイします。
5.6.2.5.1. クラスター外でローカルに実行する。 リンクのコピーリンクがクリップボードにコピーされました!
Operator プロジェクトをクラスター外の Go プログラムとして実行できます。これは、デプロイメントとテストを迅速化するという開発目的において便利です。
手順
以下のコマンドを実行して Operator をコンパイルします。
mvn clean install
$ mvn clean installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して CRD をデフォルトの namespace にインストールします。
oc apply -f target/kubernetes/memcacheds.cache.example.com-v1.yml
$ oc apply -f target/kubernetes/memcacheds.cache.example.com-v1.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
customresourcedefinition.apiextensions.k8s.io/memcacheds.cache.example.com created
customresourcedefinition.apiextensions.k8s.io/memcacheds.cache.example.com createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように
rbac.yamlという名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、
rbac.yamlファイルを適用してcluster-admin権限をmemcached-quarkus-operator-operatorに付与します。oc apply -f rbac.yaml
$ oc apply -f rbac.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力して Operator を実行します。
java -jar target/quarkus-app/quarkus-run.jar
$ java -jar target/quarkus-app/quarkus-run.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記javaコマンドは Operator を実行し、プロセスが終了するまで実行の状態を継続します。残りのコマンドを完了するには、別のターミナルが必要になります。以下のコマンドを使用して
memcached-sample.yamlファイルを適用します。kubectl apply -f memcached-sample.yaml
$ kubectl apply -f memcached-sample.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
memcached.cache.example.com/memcached-sample created
memcached.cache.example.com/memcached-sample createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、Pod が起動していることを確認します。
oc get all
$ oc get allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE pod/memcached-sample-6c765df685-mfqnz 1/1 Running 0 18s
NAME READY STATUS RESTARTS AGE pod/memcached-sample-6c765df685-mfqnz 1/1 Running 0 18sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.5.2. クラスター上でのデプロイメントとしての実行 リンクのコピーリンクがクリップボードにコピーされました!
Operator プロジェクトは、クラスター上でデプロイメントとして実行できます。
手順
以下の
makeコマンドを実行して Operator イメージをビルドし、プッシュします。以下の手順のIMG引数を変更して、アクセス可能なリポジトリーを参照します。Quay.io などのリポジトリーサイトにコンテナーを保存するためのアカウントを取得できます。イメージをビルドします。
make docker-build IMG=<registry>/<user>/<image_name>:<tag>
$ make docker-build IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Operator の SDK によって生成される Dockerfile は、
go buildに関するGOARCH=amd64を明示的に参照します。これは、AMD64 アーキテクチャー以外の場合はGOARCH=$TARGETARCHに修正できます。Docker は、-platformで指定された値に環境変数を自動的に設定します。Buildah では、そのために-build-argを使用する必要があります。詳細は、Multiple Architectures を参照してください。イメージをリポジトリーにプッシュします。
make docker-push IMG=<registry>/<user>/<image_name>:<tag>
$ make docker-push IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記両方のコマンドのイメージの名前とタグ (例:
IMG=<registry>/<user>/<image_name>:<tag>) を Makefile に設定することもできます。IMG ?= controller:latestの値を変更して、デフォルトのイメージ名を設定します。
以下のコマンドを実行して CRD をデフォルトの namespace にインストールします。
oc apply -f target/kubernetes/memcacheds.cache.example.com-v1.yml
$ oc apply -f target/kubernetes/memcacheds.cache.example.com-v1.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
customresourcedefinition.apiextensions.k8s.io/memcacheds.cache.example.com created
customresourcedefinition.apiextensions.k8s.io/memcacheds.cache.example.com createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように
rbac.yamlという名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要rbac.yamlファイルは、後のステップで適用されます。以下のコマンドを実行して Operator をデプロイします。
make deploy IMG=<registry>/<user>/<image_name>:<tag>
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、前のステップで作成した
rbac.yamlファイルを適用してcluster-admin権限をmemcached-quarkus-operator-operatorに付与します。oc apply -f rbac.yaml
$ oc apply -f rbac.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、Operator が実行されていることを確認します。
oc get all -n default
$ oc get all -n defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE pod/memcached-quarkus-operator-operator-7db86ccf58-k4mlm 0/1 Running 0 18s
NAME READY UP-TO-DATE AVAILABLE AGE pod/memcached-quarkus-operator-operator-7db86ccf58-k4mlm 0/1 Running 0 18sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
memcached-sample.yamlを適用し、memcached-samplePod を作成します。oc apply -f memcached-sample.yaml
$ oc apply -f memcached-sample.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
memcached.cache.example.com/memcached-sample created
memcached.cache.example.com/memcached-sample createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、Pod が起動していることを確認します。
oc get all
$ oc get allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE pod/memcached-quarkus-operator-operator-7b766f4896-kxnzt 1/1 Running 1 79s pod/memcached-sample-6c765df685-mfqnz 1/1 Running 0 18s
NAME READY STATUS RESTARTS AGE pod/memcached-quarkus-operator-operator-7b766f4896-kxnzt 1/1 Running 1 79s pod/memcached-sample-6c765df685-mfqnz 1/1 Running 0 18sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.5.3. Operator のバンドルおよび Operator Lifecycle Manager を使用したデプロイ リンクのコピーリンクがクリップボードにコピーされました!
5.6.2.5.3.1. Operator のバンドル リンクのコピーリンクがクリップボードにコピーされました!
Operator Bundle Format は、Operator SDK および Operator Lifecycle Manager (OLM) のデフォルトパッケージ方法です。Operator SDK を使用して OLM に対して Operator を準備し、バンドルイメージとして Operator プロジェクトをビルドしてプッシュできます。
前提条件
- 開発ワークステーションに Operator SDK CLI がインストールされている。
-
OpenShift CLI (
oc) v4.16 以降がインストールされている。 - Operator プロジェクトが Operator SDK を使用して初期化されている。
手順
以下の
makeコマンドを Operator プロジェクトディレクトリーで実行し、Operator イメージをビルドし、プッシュします。以下の手順のIMG引数を変更して、アクセス可能なリポジトリーを参照します。Quay.io などのリポジトリーサイトにコンテナーを保存するためのアカウントを取得できます。イメージをビルドします。
make docker-build IMG=<registry>/<user>/<operator_image_name>:<tag>
$ make docker-build IMG=<registry>/<user>/<operator_image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Operator の SDK によって生成される Dockerfile は、
go buildに関するGOARCH=amd64を明示的に参照します。これは、AMD64 アーキテクチャー以外の場合はGOARCH=$TARGETARCHに修正できます。Docker は、-platformで指定された値に環境変数を自動的に設定します。Buildah では、そのために-build-argを使用する必要があります。詳細は、Multiple Architectures を参照してください。イメージをリポジトリーにプッシュします。
make docker-push IMG=<registry>/<user>/<operator_image_name>:<tag>
$ make docker-push IMG=<registry>/<user>/<operator_image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Operator SDK
generate bundleおよびbundle validateのサブコマンドを含む複数のコマンドを呼び出すmake bundleコマンドを実行し、Operator バンドルマニフェストを作成します。make bundle IMG=<registry>/<user>/<operator_image_name>:<tag>
$ make bundle IMG=<registry>/<user>/<operator_image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator のバンドルマニフェストは、アプリケーションを表示し、作成し、管理する方法を説明します。
make bundleコマンドは、以下のファイルおよびディレクトリーを Operator プロジェクトに作成します。-
ClusterServiceVersionオブジェクトを含むbundle/manifestsという名前のバンドルマニフェストディレクトリー -
bundle/metadataという名前のバンドルメタデータディレクトリー -
config/crdディレクトリー内のすべてのカスタムリソース定義 (CRD) -
Dockerfile
bundle.Dockerfile
続いて、これらのファイルは
operator-sdk bundle validateを使用して自動的に検証され、ディスク上のバンドル表現が正しいことを確認します。-
以下のコマンドを実行し、バンドルイメージをビルドしてプッシュします。OLM は、1 つ以上のバンドルイメージを参照するインデックスイメージを使用して Operator バンドルを使用します。
バンドルイメージをビルドします。イメージをプッシュしようとするレジストリー、ユーザー namespace、およびイメージタグの詳細で
BUNDLE_IMGを設定します。make bundle-build BUNDLE_IMG=<registry>/<user>/<bundle_image_name>:<tag>
$ make bundle-build BUNDLE_IMG=<registry>/<user>/<bundle_image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow バンドルイメージをプッシュします。
docker push <registry>/<user>/<bundle_image_name>:<tag>
$ docker push <registry>/<user>/<bundle_image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2.5.3.2. Operator Lifecycle Manager を使用した Operator のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Operator Lifecycle Manager (OLM) は、Kubernetes クラスターで Operator (およびそれらの関連サービス) をインストールし、更新し、ライフサイクルを管理するのに役立ちます。OLM はデフォルトで OpenShift Container Platform にインストールされ、Kubernetes 拡張として実行されるため、追加のツールなしにすべての Operator のライフサイクル管理機能に Web コンソールおよび OpenShift CLI (oc) を使用できます。
Operator Bundle Format は、Operator SDK および OLM のデフォルトパッケージ方法です。Operator SDK を使用して OLM でバンドルイメージを迅速に実行し、適切に実行されるようにできます。
前提条件
- 開発ワークステーションに Operator SDK CLI がインストールされている。
- Operator バンドルイメージがビルドされ、レジストリーにプッシュされている。
-
Kubernetes ベースのクラスターに OLM がインストールされている (OpenShift Container Platform 4.16 など、
apiextensions.k8s.io/v1CRD を使用する場合は v1.16.0 以降)。 -
cluster-admin権限を持つアカウントを使用してocでクラスターにログインしている。
手順
以下のコマンドを入力してクラスターで Operator を実行します。
operator-sdk run bundle \ -n <namespace> \ <registry>/<user>/<bundle_image_name>:<tag>$ operator-sdk run bundle \1 -n <namespace> \2 <registry>/<user>/<bundle_image_name>:<tag>3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
run bundleコマンドは、有効なファイルベースのカタログを作成し、OLM を使用して Operator バンドルをクラスターにインストールします。- 2
- オプション: デフォルトで、このコマンドは
~/.kube/configファイルの現在アクティブなプロジェクトに Operator をインストールします。-nフラグを追加して、インストールに異なる namespace スコープを設定できます。 - 3
- イメージを指定しない場合、コマンドは
quay.io/operator-framework/opm:latestをデフォルトのインデックスイメージとして使用します。イメージを指定した場合は、コマンドはバンドルイメージ自体をインデックスイメージとして使用します。
重要OpenShift Container Platform 4.11 の時点で、Operator カタログに関して、
run bundleコマンドはデフォルトでファイルベースのカタログ形式をサポートします。Operator カタログに関して、非推奨の SQLite データベース形式は引き続きサポートされますが、今後のリリースで削除される予定です。Operator の作成者はワークフローをファイルベースのカタログ形式に移行することが推奨されます。このコマンドにより、以下のアクションが行われます。
- バンドルイメージをインジェクトしてインデックスイメージを作成します。インデックスイメージは不透明で一時的なものですが、バンドルを実稼働環境でカタログに追加する方法を正確に反映します。
- 新規インデックスイメージを参照するカタログソースを作成します。これにより、OperatorHub が Operator を検出できるようになります。
-
OperatorGroup、Subscription、InstallPlan、および RBAC を含むその他の必要なリソースすべてを作成して、Operator をクラスターにデプロイします。
5.6.3. Java ベースの Operator のプロジェクトレイアウト リンクのコピーリンクがクリップボードにコピーされました!
Java ベースの Operator SDK はテクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
operator-sdk CLI は、各 Operator プロジェクトに多数のパッケージおよびファイルを生成、または スキャフォールディング することができます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Container Platform の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Container Platform リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Container Platform 4.16 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Container Platform の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
OpenShift Container Platform で非推奨となったか、削除された主な機能の最新の一覧は、OpenShift Container Platform リリースノートの 非推奨および削除された機能 セクションを参照してください。
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
5.6.3.1. Java ベースのプロジェクトレイアウト リンクのコピーリンクがクリップボードにコピーされました!
operator-sdk init コマンドで生成される Java ベースの Operator プロジェクトには、以下のファイルおよびディレクトリーが含まれます。
| ファイルまたはディレクトリー | 目的 |
|---|---|
|
| Operator の実行に必要な依存関係が含まれるファイル。 |
|
|
API を表すファイルが含まれるディレクトリー。ドメインが |
|
| コントローラーの実装を定義する Java ファイル。 |
|
| Memcached CR の必要な状態を定義する Java ファイル。 |
|
| Memcached CR の観察される状態を定義する Java ファイル。 |
|
| Memcached API のスキーマを定義する Java ファイル。 |
|
| CRD yaml ファイルが含まれるディレクトリー。 |
5.6.4. プロジェクトを新しい Operator SDK バージョン用に更新する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 4.18 は Operator SDK 1.38.0 をサポートします。ワークステーションに 1.31.0 CLI がすでにインストールされている場合は、最新バージョンをインストール して CLI を 1.36.1 に更新できます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Container Platform の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Container Platform リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Container Platform 4.16 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Container Platform の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
OpenShift Container Platform で非推奨となったか、削除された主な機能の最新の一覧は、OpenShift Container Platform リリースノートの 非推奨および削除された機能 セクションを参照してください。
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
ただし、既存の Operator プロジェクトと Operator SDK 1.36.1 との互換性を確保するには、1.31.0 以降に導入された関連する重大な変更に対応するために、更新手順を実行する必要があります。更新手順は、以前に 1.31.0 で作成または保守していた Operator プロジェクトで、手動で実行する必要があります。
5.6.4.1. Java ベースの Operator プロジェクトを Operator SDK 1.36.1 用に更新する リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、1.36.1 との互換性を確保するために、既存の Java ベースの Operator プロジェクトを更新します。
前提条件
- Operator SDK 1.36.1 がインストールされている。
- Operator SDK 1.31.0 で作成または保守されている Operator プロジェクトがある。
手順
次の例に示すように、Operator プロジェクトの Makefile を編集して、Operator SDK バージョンを
v1.36.1-ocpに更新します。Makefile の例
Set the Operator SDK version to use. By default, what is installed on the system is used. This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
# Set the Operator SDK version to use. By default, what is installed on the system is used. # This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit. OPERATOR_SDK_VERSION ?= v1.36.1-ocpCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux (RHEL) 9 ベースのイメージを使用するように
kube-rbac-proxyコンテナーを更新します。次のファイルで
kube-rbac-proxyコンテナーのエントリーを見つけます。-
config/default/manager_auth_proxy_patch.yaml -
Operator プロジェクトの
bundle/manifests/<operator_name>.clusterserviceversion.yaml(チュートリアルのmemcached-operator.clusterserviceversion.yamlなど)
-
プル仕様のイメージ名を
ose-kube-rbac-proxyからose-kube-rbac-proxy-rhel9に更新し、タグをv4.17に更新します。v4.17イメージタグを使用したose-kube-rbac-proxy-rhel9プル仕様の例# ... containers: - name: kube-rbac-proxy image: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9:v4.16 # ...# ... containers: - name: kube-rbac-proxy image: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9:v4.16 # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
kustomize/v2プラグインは、現在 stable であり、go/v4、ansible/v1、helm/v1、hybrid/v1-alphaプラグインを使用するときにプラグインチェーンで使用されるデフォルトのバージョンです。このデフォルトのスキャフォールドの詳細は、Kubebuilder ドキュメントの Kustomize v2 を参照してください。 Operator プロジェクトでマルチプラットフォームビルドまたはマルチアーキテクチャービルドを使用する場合は、プロジェクト Makefile 内の既存の
docker-buildxターゲットを次の定義に置き換えます。Makefile の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator プロジェクトの Kubernetes バージョンを、1.29 を使用するようにアップグレードする必要があります。プロジェクト構造、Makefile、
go.modファイルに次の変更を加える必要があります。重要go/v3プラグインは Kubebuilder によって非推奨化が進められています。そのため、Operator SDK も今後のリリースでgo/v4に移行します。go.modファイルを更新して、依存関係をアップグレードします。k8s.io/api v0.29.2 k8s.io/apimachinery v0.29.2 k8s.io/client-go v0.29.2 sigs.k8s.io/controller-runtime v0.17.3
k8s.io/api v0.29.2 k8s.io/apimachinery v0.29.2 k8s.io/client-go v0.29.2 sigs.k8s.io/controller-runtime v0.17.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アップグレードした依存関係をダウンロードします。
go mod tidy
$ go mod tidyCopy to Clipboard Copied! Toggle word wrap Toggle overflow