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.17 でリリースされるバージョンの 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-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロジェクトディレクトリーに移動します。
cd memcached-operator
$ cd memcached-operator
Copy 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-operator
Copy 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 Memcached
Copy 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 install
Copy 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-system
Copy 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-system
Copy 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-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クリーンアップします。
以下のコマンドを実行して、この手順の一部として作成されたリソースをクリーンアップします。
make undeploy
$ make undeploy
Copy 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.17 でリリースされるバージョンの 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-sdk
CLI ツールおよび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-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ディレクトリーに切り替えます。
cd $HOME/projects/memcached-operator
$ cd $HOME/projects/memcached-operator
Copy 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-operator
Copy 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=Memcached
4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
tree
コマンドを実行して、ファイル構造を表示します。tree
$ tree
Copy 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
ファイルの以下の属性を更新して、Memcached
CR の必要な状態を定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MemcachedStatus.java
ファイルの以下の属性を更新して、Memcached
CR の観察された状態を定義します。注記以下の例では、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 install
Copy 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.yaml
Copy 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 デプロイメントが存在しない場合に作成する。
-
デプロイメントのサイズが、
Memcached
CR 仕様で指定されたサイズになるようにする。 -
Memcached
CR ステータスをmemcached
Pod の名前で更新する。
次のサブセクションでは、実装例のコントローラーがリソースを監視する方法と 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 install
Copy 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.yml
Copy 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 created
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力して Operator を実行します。
java -jar target/quarkus-app/quarkus-run.jar
$ java -jar target/quarkus-app/quarkus-run.jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記java
コマンドは Operator を実行し、プロセスが終了するまで実行の状態を継続します。残りのコマンドを完了するには、別のターミナルが必要になります。以下のコマンドを使用して
memcached-sample.yaml
ファイルを適用します。kubectl apply -f memcached-sample.yaml
$ kubectl apply -f memcached-sample.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
memcached.cache.example.com/memcached-sample created
memcached.cache.example.com/memcached-sample created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、Pod が起動していることを確認します。
oc get all
$ oc get all
Copy 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 18s
Copy 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.yml
Copy 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 created
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、Operator が実行されていることを確認します。
oc get all -n default
$ oc get all -n default
Copy 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 18s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して
memcached-sample.yaml
を適用し、memcached-sample
Pod を作成します。oc apply -f memcached-sample.yaml
$ oc apply -f memcached-sample.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
memcached.cache.example.com/memcached-sample created
memcached.cache.example.com/memcached-sample created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
以下のコマンドを実行して、Pod が起動していることを確認します。
oc get all
$ oc get all
Copy 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 18s
Copy 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.17 以降がインストールされている。 - 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.17 など、
apiextensions.k8s.io/v1
CRD を使用する場合は 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.17 でリリースされるバージョンの 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.17 は Operator SDK 1.36.1 をサポートします。ワークステーションに 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.17 でリリースされるバージョンの 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-ocp
Copy 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.17 # ...
# ... containers: - name: kube-rbac-proxy image: registry.redhat.io/openshift4/ose-kube-rbac-proxy-rhel9:v4.17 # ...
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.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、アップグレードした依存関係をダウンロードします。
go mod tidy
$ go mod tidy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow