0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Operator SDK Go言語チュートリアルの進め方

Last updated at Posted at 2024-04-21

Operator-SDK公式のGo言語チュートリアルは、MemcachedのOperatorを開発するチュートリアルとして提供されています。

この記事は、Operator-SDKの公式のGo言語チュートリアルを参考に、独自のOperatorを開発するための補足資料です。また、最新のOperator-SDKや付属するサンプルには追従していないため、その点の修正にも言及しています。

※ 本記事は、Operato-SDK v1.34.1をベースとしたものです。

Kubernetes Operator とは

Operatorは、カスタムリソースを使用してKubernetesアプリケーションとコンポーネントを管理するKubernetesの拡張機能です。

まずは、Operator SDKのチュートリアルを進める上で、Operatorの基本的な概念や用語を習得しておきましょう。

Operator SDKとは

Operator SDKは、オペレーターの構築に必要な複雑なロジックを抽象化した基本機能を提供することで、開発者の負担を軽減するツールです。

Operatorの構築には、Operator SDK以外にも補助となるツールが色々と提供されており、Operator SDKもその一つです。

公式資料の補足として、以下のOperator SDKをベースとする動画チュートリアルも参考になります。着手の前に確認しておきましょう。

今回は、Operator-SDKの公式のGo言語チュートリアルを参考に進めますが、上記のチュートリアルにも沿った実装の説明となります。

Operator-SDKによる独自Operatorの開発

Operator-SDKの公式のGo言語チュートリアルは、MemcachedのOperatorを開発するチュートリアルとして提供されています。今回は、Memcachedを題材とする「Go Operator Tutorial」の手順を沿って、独自のOperatorを開発する手順を説明します。

なお、本記事は「Go Operator Tutorial」の補足記事として、独自のOperatorを開発するための要点や注意点にのみ記載しています。実際のコマンドや手順については、公式のチュートリアルを参照しつつ進めて下さい。

STEP1: Create a new project

まず、最初のステップであるOperator-SDKのによるプロジェクト生成(初期化)です。プロジェクトディレクトリ、ドメイン名、リポジトリURLを変更して生成します。

変更項目 チュートリアルでの指定
ディレクトリ memcached-operator
--domain example.com
--repo github.com/example/memcached-operator

生成プロジェクトディレクトリは単なる生成ディレクトリですが、独自のドメイン名や、運用するレポジトリが確定している場合には、それに合わせて変更しておきましょう。

GO 1.22での対応

operator-sdk(v1.34.1)はGo1.21ベースであり、operator-sdkで生成されたスケルトンプロジェクトを、現在の最新版であるGo1.22でビルドすると、コントローラーツールに起因した、エラーが発生します。

解決するには、生成されたMakefileにあるCONTROLLER_TOOLS_VERSIONを修正してください。

- CONTROLLER_TOOLS_VERSION ?= v0.13.0
+ CONTROLLER_TOOLS_VERSION ?= v0.14.0

既にビルド済の場合には、生成済みのファイルを削除(rm bin/*)してからビルドしてください。

STEP2: Create a new API and Controller

次は、Custom Resource Definition (CRD) APIとコントローラーの作成です。チュートリアルでは、API種別(kind)としてMemcached、グループ(group)、バージョン(version)ともに暫定的なものが指定されていますので、変更して生成します。

変更項目 チュートリアルでの指定 関連資料
--kind Memcached Kubernetes API Concepts
--group cache API概要, Kubernetes API Reference Docs
--version v1alpha1 API概要, Kubernetes API Reference Docs, Versions in CustomResourceDefinitions

既存のOperator実装をOperatorHub.ioで確認すると、グループにはに公式(Kubernetes API Reference Docs)に定義されているapiextensions.k8s.ioが選択されているようです。

Define the API

今回は、このチュートリアルで実装済みのコントローラーの流用が目的なため、まずはチュートリアル通りにCustom Resource (CR)を追加します。

チュートリアル通りにSizeContainerPortConditionを、STEP1で生成された対象の定義ファイル(api/<version>/<kind>_types.go)にCustom Resource (CR)として追加します。

STEP3:Implement the Controller

次は、STEP2の定義に沿った、コントローラーの実装です。公式のチュートリアルでは、実装済みのMemechachedコントローラーのファイルをコピーすることを前提に説明されています。

今回は、以下にある最新のMemechachedコントローラーのサンプルを改修することで、独自のOperatorを実装していきます。

Operator-SDKのサンプルを参考に、STEP1で生成されたコントローラーディレクトリ(internal\controller)にある実装を置き換えて修正します。

STEP2で、追加したCRDのスキーマ定義に合わせたサンプルのため、Kind名(Memcached)に関連する修正が主にとなります。

また、本サンプルは対象となるイメージ名を環境変数(MEMCACHED_IMAGE)で指定しているので、STEP2のKind名の変更に伴い、環境変数の名称も修正しておきましょう。

※ Operator-SDKのバージョンにより、公式チュートリアルにはないPrometheus監視動作が含まれている場合があります。必要に応じて削除してください。

STEP4: Configure the operator’s image registry

この章については、チュートリアルに記載されている通りです。

STEP1で生成されたMakefileを修正します。

STEP5: Run the Operator

チュートリアルに記載されている通り、STEP3で変更した環境変数を設定してテスト(make test)実行しましょう。

また、STEP1ではGithubアクション(.github/workflows/make.yml)でのテストも生成されているため、同様に変更した環境変数をenvに追加しておきましょう。

最後に

本記事では、Operator-SDKの公式のGo言語チュートリアルを参考にして、独自のOperatorを開発する手順を紹介しました。この記事が、独自のOperatorを開発する最初の一歩となれば幸いです。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?