This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.5.4. Go ベースの Operator
5.4.1. Go ベースの Operator の Operator SDK の使用を開始する リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK によって提供されるツールおよびライブラリーを使用して Go ベースの Operator をセットアップし、実行することに関連した基本内容を示すには、Operator 開発者は Go ベースの Memcached の Operator のサンプル、分散キー/値のストアをビルドして、クラスターへデプロイすることができます。
5.4.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Operator SDK CLI がインストールされていること。
-
OpenShift CLI (
oc
) v4.9+ がインストールされていること。 -
cluster-admin
パーミッションを持つアカウントを使用して、oc
で OpenShift Container Platform 4.9 クラスターにログインしていること。 - クラスターがイメージをプルできるようにするには、イメージをプッシュするリポジトリーを public として設定するか、またはイメージプルシークレットを設定する必要があります。
5.4.1.2. Go ベースの Operator の作成およびデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK を使用して Memcached の単純な Go ベースの 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 operator-sdk init
コマンドを実行してプロジェクトを初期化します。operator-sdk init \ --domain=example.com \ --repo=github.com/example-inc/memcached-operator
$ operator-sdk init \ --domain=example.com \ --repo=github.com/example-inc/memcached-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、デフォルトで Go プラグインを使用します。
API を作成します。
単純な Memcached API を作成します。
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
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.4.1.3. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
- Go ベースの Operator のビルドに関する詳細な手順は、Go ベースの Operator の Operator SDK チュートリアル を参照してください。
5.4.2. Go ベースの Operator の Operator SDK チュートリアル リンクのコピーリンクがクリップボードにコピーされました!
Operator 開発者は、Operator SDK での Go プログラミング言語のサポートを利用して、Go ベースの Memcached Operator のサンプルをビルドして、分散キー/値のストアを作成し、そのライフサイクルを管理することができます。
このプロセスは、Operator Framework の 2 つの重要な設定要素を使用して実行されます。
- Operator SDK
-
operator-sdk
CLI ツールおよびcontroller-runtime
ライブラリー API - Operator Lifecycle Manager (OLM)
- クラスター上の Operator のインストール、アップグレード、ロールベースのアクセス制御 (RBAC)
このチュートリアルでは、Go ベースの Operator の Operator SDK の使用を開始する よりも詳細に説明します。
5.4.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Operator SDK CLI がインストールされていること。
-
OpenShift CLI (
oc
) v4.9+ がインストールされていること。 -
cluster-admin
パーミッションを持つアカウントを使用して、oc
で OpenShift Container Platform 4.9 クラスターにログインしていること。 - クラスターがイメージをプルできるようにするには、イメージをプッシュするリポジトリーを public として設定するか、またはイメージプルシークレットを設定する必要があります。
5.4.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 Go モジュールのサポートをアクティブにします。
export GO111MODULE=on
$ export GO111MODULE=on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow operator-sdk init
コマンドを実行してプロジェクトを初期化します。operator-sdk init \ --domain=example.com \ --repo=github.com/example-inc/memcached-operator
$ operator-sdk init \ --domain=example.com \ --repo=github.com/example-inc/memcached-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記operator-sdk init
コマンドは、デフォルトで Go プラグインを使用します。operator-sdk init
コマンドは、Go モジュール と使用するgo.mod
ファイルを生成します。生成されるファイルには有効なモジュールパスが必要であるため、$GOPATH/src/
外のプロジェクトを作成する場合は、--repo
フラグが必要です。
5.4.2.2.1. PROJECT ファイル リンクのコピーリンクがクリップボードにコピーされました!
operator-sdk init
コマンドで生成されるファイルの 1 つに、Kubebuilder の PROJECT
ファイルがあります。プロジェクトルートから実行される後続の operator-sdk
コマンドおよび help
出力は、このファイルを読み取り、プロジェクトタイプが Go であることを認識しています。以下に例を示します。
5.4.2.2.2. Manager について リンクのコピーリンクがクリップボードにコピーされました!
Operator の主なプログラムは、Manager を初期化して実行する main.go
ファイルです。Manager はすべてのカスタムリソース (CR) API 定義の Scheme を自動的に登録し、コントローラーおよび Webhook を設定して実行します。
Manager は、すべてのコントローラーがリソースの監視をする namespace を制限できます。
mgr, err := ctrl.NewManager(cfg, manager.Options{Namespace: namespace})
mgr, err := ctrl.NewManager(cfg, manager.Options{Namespace: namespace})
デフォルトで、Manager は Operator が実行される namespace を監視します。すべての namespace を確認するには、namespace
オプションを空のままにすることができます。
mgr, err := ctrl.NewManager(cfg, manager.Options{Namespace: ""})
mgr, err := ctrl.NewManager(cfg, manager.Options{Namespace: ""})
MultiNamespacedCacheBuilder
関数を使用して、特定の namespace セットを監視することもできます。
var namespaces []string mgr, err := ctrl.NewManager(cfg, manager.Options{ NewCache: cache.MultiNamespacedCacheBuilder(namespaces), })
var namespaces []string
mgr, err := ctrl.NewManager(cfg, manager.Options{
NewCache: cache.MultiNamespacedCacheBuilder(namespaces),
})
5.4.2.2.3. 複数グループ API について リンクのコピーリンクがクリップボードにコピーされました!
API およびコントローラーを作成する前に、Operator に複数の API グループが必要かどうかを検討してください。このチュートリアルでは、単一グループ API のデフォルトケースについて説明しますが、複数グループ API をサポートするようにプロジェクトのレイアウトを変更するには、以下のコマンドを実行します。
operator-sdk edit --multigroup=true
$ operator-sdk edit --multigroup=true
このコマンドにより、PROJECT
ファイルが更新されます。このファイルは、以下の例のようになります。
domain: example.com layout: go.kubebuilder.io/v3 multigroup: true ...
domain: example.com
layout: go.kubebuilder.io/v3
multigroup: true
...
複数グループプロジェクトの場合、API Go タイプのファイルが apis/<group>/<version>/
ディレクトリーに作成され、コントローラーは controllers/<group>/
ディレクトリーに作成されます。続いて、Dockerfile が適宜更新されます。
追加リソース
- 複数グループのプロジェクトへの移行に関する詳細は、Kubebuilder のドキュメント を参照してください。
5.4.2.3. API およびコントローラーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK CLI を使用してカスタムリソース定義 (CRD) API およびコントローラーを作成します。
手順
以下のコマンドを実行して、グループ
cache
、バージョン、v1
、および種類Memcached
を指定して API を作成します。operator-sdk create api \ --group=cache \ --version=v1 \ --kind=Memcached
$ operator-sdk create api \ --group=cache \ --version=v1 \ --kind=Memcached
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロンプトが表示されたら
y
を入力し、リソースとコントローラーの両方を作成します。Create Resource [y/n] y Create Controller [y/n] y
Create Resource [y/n] y Create Controller [y/n] y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Writing scaffold for you to edit... api/v1/memcached_types.go controllers/memcached_controller.go ...
Writing scaffold for you to edit... api/v1/memcached_types.go controllers/memcached_controller.go ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このプロセスでは、api/v1/memcached_types.go
で Memcached
リソース API が生成され、controllers/memcached_controller.go
でコントローラーが生成されます。
5.4.2.3.1. API の定義 リンクのコピーリンクがクリップボードにコピーされました!
Memcached
カスタムリソース (CR) の API を定義します。
手順
api/v1/memcached_types.go
で Go タイプの定義を変更し、以下のspec
およびstatus
を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow リソースタイプ用に生成されたコードを更新します。
make generate
$ make generate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒント*_types.go
ファイルの変更後は、make generate
コマンドを実行し、該当するリソースタイプ用に生成されたコードを更新する必要があります。上記の Makefile ターゲットは
controller-gen
ユーティリティーを呼び出して、api/v1/zz_generated.deepcopy.go
ファイルを更新します。これにより、API Go タイプの定義は、すべての Kind タイプが実装する必要のあるruntime.Object
インターフェイスを実装します。
5.4.2.3.2. CRD マニフェストの生成 リンクのコピーリンクがクリップボードにコピーされました!
API が spec
フィールドと status
フィールドおよびカスタムリソース定義 (CRD) 検証マーカーで定義された後に、CRD マニフェストを生成できます。
手順
以下のコマンドを実行し、CRD マニフェストを生成して更新します。
make manifests
$ make manifests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この Makefile ターゲットは
controller-gen
ユーティリティーを呼び出し、config/crd/bases/cache.example.com_memcacheds.yaml
ファイルに CRD マニフェストを生成します。
5.4.2.3.2.1. OpenAPI 検証 リンクのコピーリンクがクリップボードにコピーされました!
OpenAPIv3 スキーマは、マニフェストの生成時に spec.validation
ブロックの CRD マニフェストに追加されます。この検証ブロックにより、Kubernetes が作成または更新時に Memcached CR のプロパティーを検証できます。
API の検証を設定するには、マーカーまたはアノテーションを使用できます。これらのマーカーには、+kubebuilder:validation
接頭辞が常にあります。
5.4.2.4. コントローラーの実装 リンクのコピーリンクがクリップボードにコピーされました!
新規 API およびコントローラーの作成後に、コントローラーロジックを実装することができます。
手順
この例では、生成されたコントローラーファイル
controllers/memcached_controller.go
を以下の実装例に置き換えます。例5.2
memcached_controller.go
の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントローラーのサンプルは、それぞれの
Memcached
カスタムリソース (CR) について以下の調整 (reconciliation) ロジックを実行します。- Memcached デプロイメントを作成します (ない場合)。
-
デプロイメントのサイズが、
Memcached
CR 仕様で指定されたものと同じであることを確認します。 -
Memcached
CR ステータスをmemcached
Pod の名前に置き換えます。
次のサブセクションでは、実装例のコントローラーがリソースを監視する方法と reconcile ループがトリガーされる方法を説明しています。これらのサブセクションを省略し、直接 Operator の実行 に進むことができます。
5.4.2.4.1. コントローラーによって監視されるリソース リンクのコピーリンクがクリップボードにコピーされました!
controllers/memcached_controller.go
の SetupWithManager()
関数は、CR およびコントローラーによって所有され、管理される他のリソースを監視するようにコントローラーがビルドされる方法を指定します。
NewControllerManagedBy()
は、さまざまなコントローラー設定を可能にするコントローラービルダーを提供します。
For(&cachev1.Memcached{})
は、監視するプライマリーリソースとして Memcached
タイプを指定します。Memcached
タイプのそれぞれの Add、Update、または Delete イベントの場合、reconcile ループに Memcached
オブジェクトの (namespace および name キーから成る) reconcile Request
引数が送られます。
Owns(&appsv1.Deployment{})
は、監視するセカンダリーリソースとして Deployment
タイプを指定します。Add、Update、または Delete イベントの各 Deployment
タイプの場合、イベントハンドラーは各イベントを、デプロイメントのオーナーの reconcile request にマップします。この場合、デプロイメントが作成された Memcached
オブジェクトがオーナーです。
5.4.2.4.2. コントローラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
多くの他の便利な設定を使用すると、コントローラーを初期化できます。以下に例を示します。
MaxConcurrentReconciles
オプションを使用して、コントローラーの同時調整の最大数を設定します。デフォルトは1
です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 述語を使用した監視イベントをフィルターリングします。
-
EventHandler のタイプを選択し、監視イベントが reconcile ループの reconcile request に変換する方法を変更します。プライマリーリソースおよびセカンダリーリソースよりも複雑な Operator 関係の場合は、
EnqueueRequestsFromMapFunc
ハンドラーを使用して、監視イベントを任意の reconcile request のセットに変換することができます。
これらの設定およびその他の設定に関する詳細は、アップストリームの Builder および Controller の GoDocs を参照してください。
5.4.2.4.3. reconcile ループ リンクのコピーリンクがクリップボードにコピーされました!
すべてのコントローラーには、reconcile ループを実装する Reconcile()
メソッドのある reconciler オブジェクトがあります。この reconcile ループには、キャッシュからプライマリーリソースオブジェクトの Memcached
を検索するために使用される namespace および name キーである Request
引数が渡されます。
返り値、結果、およびエラーに基づいて、Request は再度キューに入れられ、reconcile ループが再びトリガーされる可能性があります。
Result.RequeueAfter
を設定して、猶予期間後にも要求を再びキューに入れることができます。
import "time" // Reconcile for any reason other than an error after 5 seconds return ctrl.Result{RequeueAfter: time.Second*5}, nil
import "time"
// Reconcile for any reason other than an error after 5 seconds
return ctrl.Result{RequeueAfter: time.Second*5}, nil
RequeueAfter
を定期的な CR の調整に設定している Result
を返すことができます。
reconciler、クライアント、およびリソースイベントとの対話に関する詳細は、Controller Runtime Client API のドキュメントを参照してください。
5.4.2.4.4. パーミッションおよび RBAC マニフェスト リンクのコピーリンクがクリップボードにコピーされました!
コントローラーには、管理しているリソースと対話するために特定の RBAC パーミッションが必要です。これらは、以下のような RBAC マーカーを使用して指定されます。
config/rbac/role.yaml
の ClusterRole
オブジェクトマニフェストは、make manifests
コマンドが実行されるたびに controller-gen
ユーティリティーを使用して、以前のマーカーから生成されます。
5.4.2.5. プロキシーサポートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Operator の作成者は、ネットワークプロキシーをサポートする Operator を開発できるようになりました。クラスター管理者は、Operator Lifecycle Manager (OLM) によって処理される環境変数のプロキシーサポートを設定します。Operator は以下の標準プロキシー変数の環境を検査し、値をオペランドに渡して、プロキシーされたクラスターをサポートする必要があります。
-
HTTP_PROXY
-
HTTPS_PROXY
-
NO_PROXY
このチュートリアルでは、HTTP_PROXY
を環境変数の例として使用します。
前提条件
- クラスター全体の egress プロキシーが有効にされているクラスター。
手順
controllers/memcached_controller.go
ファイルを編集し、以下のパラメーターを追加します。operator-lib
ライブラリーからproxy
パッケージをインポートします。import ( ... "github.com/operator-framework/operator-lib/proxy" )
import ( ... "github.com/operator-framework/operator-lib/proxy" )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow proxy.ReadProxyVarsFromEnv
helper 関数を調整ループに、結果をオペランド環境に追加します。for i, container := range dep.Spec.Template.Spec.Containers { dep.Spec.Template.Spec.Containers[i].Env = append(container.Env, proxy.ReadProxyVarsFromEnv()...) } ...
for i, container := range dep.Spec.Template.Spec.Containers { dep.Spec.Template.Spec.Containers[i].Env = append(container.Env, proxy.ReadProxyVarsFromEnv()...) } ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下を
config/manager/manager.yaml
ファイルに追加して、Operator デプロイメントに環境変数を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2.6. Operator の実行 リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK CLI を使用して Operator をビルドし、実行する方法は 3 つあります。
- クラスター外で Go プログラムとしてローカルに実行します。
- クラスター上のデプロイメントとして実行します。
- Operator をバンドルし、Operator Lifecycle Manager (OLM) を使用してクラスター上にデプロイします。
Go ベースの Operator を OpenShift Container Platform でのデプロイメントとして、または OLM を使用するバンドルとして実行する前に、プロジェクトがサポートされているイメージを使用するように更新されていることを確認します。
5.4.2.6.1. クラスター外でローカルに実行する。 リンクのコピーリンクがクリップボードにコピーされました!
Operator プロジェクトをクラスター外の Go プログラムとして実行できます。これは、デプロイメントとテストを迅速化するという開発目的において便利です。
手順
以下のコマンドを実行して、
~/.kube/config
ファイルに設定されたクラスターにカスタムリソース定義 (CRD) をインストールし、Operator をローカルで実行します。make install run
$ make install run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2.6.2. クラスター上でのデプロイメントとしての実行 リンクのコピーリンクがクリップボードにコピーされました!
Operator プロジェクトは、クラスター上でのデプロイメントとして実行することができます。
前提条件
- プロジェクトを更新してサポートされるイメージを使用することで、OpenShift Container Platform で実行する Go ベースの 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
の値を変更して、デフォルトのイメージ名を設定します。
以下のコマンドを実行して 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 デフォルトで、このコマンドは
<project_name>-system
の形式で Operator プロジェクトの名前で namespace を作成し、デプロイメントに使用します。このコマンドは、config/rbac
から RBAC マニフェストもインストールします。Operator が実行されていることを確認します。
oc get deployment -n <project_name>-system
$ oc get deployment -n <project_name>-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE <project_name>-controller-manager 1/1 1 1 8m
NAME READY UP-TO-DATE AVAILABLE AGE <project_name>-controller-manager 1/1 1 1 8m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2.6.3. Operator のバンドルおよび Operator Lifecycle Manager を使用したデプロイ リンクのコピーリンクがクリップボードにコピーされました!
5.4.2.6.3.1. Operator のバンドル リンクのコピーリンクがクリップボードにコピーされました!
Operator Bundle Format は、Operator SDK および Operator Lifecycle Manager (OLM) のデフォルトパッケージ方法です。Operator SDK を使用して OLM に対して Operator を準備し、バンドルイメージをとして Operator プロジェクトをビルドしてプッシュできます。
前提条件
- 開発ワークステーションに Operator SDK CLI がインストールされていること。
-
OpenShift CLI (
oc
) v4.9+ がインストールされていること。 - Operator プロジェクトが Operator SDK を使用して初期化されていること。
- Operator が Go ベースの場合、プロジェクトを更新して OpenShift Container Platform での実行をサポートするイメージを使用する必要がある。
手順
以下の
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.4.2.6.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 バンドルイメージ。
-
(OpenShift Container Platform 4.9 など、
apiextensions.k8s.io/v1
CRD を使用する場合は v1.16.0 以降の) Kubernetes ベースのクラスターに OLM がインストールされていること。 -
cluster-admin
パーミッションのあるアカウントを使用してoc
でクラスターへログインしていること。 - Operator が Go ベースの場合、プロジェクトを更新して OpenShift Container Platform での実行をサポートするイメージを使用する必要がある。
手順
以下のコマンドを入力してクラスターで Operator を実行します。
operator-sdk run bundle \ [-n <namespace>] \ <registry>/<user>/<bundle_image_name>:<tag>
$ operator-sdk run bundle \ [-n <namespace>] \
1 <registry>/<user>/<bundle_image_name>:<tag>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- デフォルトで、このコマンドは
~/.kube/config
ファイルの現在アクティブなプロジェクトに Operator をインストールします。-n
フラグを追加して、インストールに異なる namespace スコープを設定できます。
このコマンドにより、以下のアクションが行われます。
- バンドルイメージをインジェクトしてインデックスイメージを作成します。インデックスイメージは不透明で一時的なものですが、バンドルを実稼働環境でカタログに追加する方法を正確に反映します。
- 新規インデックスイメージを参照するカタログソースを作成します。これにより、OperatorHub が Operator を検出できるようになります。
-
OperatorGroup
、Subscription
、InstallPlan
、および RBAC を含むその他の必要なオブジェクトすべてを作成して、Operator をクラスターにデプロイします。
5.4.2.7. カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
Operator のインストール後に、Operator によってクラスターに提供されるカスタムリソース (CR) を作成して、これをテストできます。
前提条件
-
クラスターにインストールされている
Memcached
CR を提供する Memcached Operator の例
手順
Operator がインストールされている namespace へ変更します。たとえば、
make deploy
コマンドを使用して Operator をデプロイした場合は、以下のようになります。oc project memcached-operator-system
$ oc project memcached-operator-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow config/samples/cache_v1_memcached.yaml
でMemcached
CR マニフェストのサンプルを編集し、以下の仕様が含まれるようにします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR を作成します。
oc apply -f config/samples/cache_v1_memcached.yaml
$ oc apply -f config/samples/cache_v1_memcached.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Memcached
Operator が、正しいサイズで CR サンプルのデプロイメントを作成することを確認します。oc get deployments
$ oc get deployments
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE memcached-operator-controller-manager 1/1 1 1 8m memcached-sample 3/3 3 3 1m
NAME READY UP-TO-DATE AVAILABLE AGE memcached-operator-controller-manager 1/1 1 1 8m memcached-sample 3/3 3 3 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ステータスが Memcached Pod 名で更新されていることを確認するために、Pod および CR ステータスを確認します。
Pod を確認します。
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE memcached-sample-6fd7c98d8-7dqdr 1/1 Running 0 1m memcached-sample-6fd7c98d8-g5k7v 1/1 Running 0 1m memcached-sample-6fd7c98d8-m7vn7 1/1 Running 0 1m
NAME READY STATUS RESTARTS AGE memcached-sample-6fd7c98d8-7dqdr 1/1 Running 0 1m memcached-sample-6fd7c98d8-g5k7v 1/1 Running 0 1m memcached-sample-6fd7c98d8-m7vn7 1/1 Running 0 1m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CR ステータスを確認します。
oc get memcached/memcached-sample -o yaml
$ oc get memcached/memcached-sample -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
デプロイメントサイズを更新します。
config/samples/cache_v1_memcached.yaml
ファイルを更新し、Memcached
CR のspec.size
フィールドを3
から5
に変更します。oc patch memcached memcached-sample \ -p '{"spec":{"size": 5}}' \ --type=merge
$ oc patch memcached memcached-sample \ -p '{"spec":{"size": 5}}' \ --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator がデプロイメントサイズを変更することを確認します。
oc get deployments
$ oc get deployments
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY UP-TO-DATE AVAILABLE AGE memcached-operator-controller-manager 1/1 1 1 10m memcached-sample 5/5 5 5 3m
NAME READY UP-TO-DATE AVAILABLE AGE memcached-operator-controller-manager 1/1 1 1 10m memcached-sample 5/5 5 5 3m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このチュートリアルの一環として作成したリソースをクリーンアップします。
Operator のテストに
make deploy
コマンドを使用した場合は、以下のコマンドを実行します。make undeploy
$ make undeploy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator のテストに
operator-sdk run bundle
コマンドを使用した場合は、以下のコマンドを実行します。operator-sdk cleanup <project_name>
$ operator-sdk cleanup <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.3. Go ベースの Operator のプロジェクトレイアウト リンクのコピーリンクがクリップボードにコピーされました!
operator-sdk
CLI は、各 Operator プロジェクトに多数のパッケージおよびファイルを生成、または スキャフォールディング することができます。
5.4.3.1. Go ベースのプロジェクトレイアウト リンクのコピーリンクがクリップボードにコピーされました!
operator-sdk init
コマンドを使用して生成される Go ベースの Operator プロジェクト (デフォルトタイプ) には、以下のディレクトリーおよびファイルが含まれます。
ファイルまたはディレクトリー | 目的 |
---|---|
|
Operator のメインプログラム。これは、 |
|
CRD の API を定義するディレクトリーツリー。 |
|
コントローラーの実装。 |
| クラスターにコントローラーをデプロイするために使用される Kubernetes マニフェスト (CRD、RBAC、および証明書を含む)。 |
| コントローラーのビルドおよびデプロイに使用するターゲット。 |
| コンテナーエンジンが Operator をビルドするために使用する手順。 |
| CRD の登録、RBAC のセットアップ、およびデプロイメントとして Operator のデプロイをする Kubernetes マニフェスト。 |