32
24

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 3 years have passed since last update.

KubernetesAdvent Calendar 2019

Day 9

Operatorの開発の始め方...の前に必要な知識

Posted at

Operatorとは?

Operatorは、Kubernetesの拡張機能の一つです。
ステートフルなアプリケーションの運用を自動化するために数年前から注目を浴びています。

技術的にはCustom Resource Definition(CRD) + Custom Controllerの組み合わせで実現します。

crd_controller.png

Operator(CRD + Controller)を作るための方法は複数種類があります。
本記事では、それらの開発の概要を紹介します。

Operatorについての参考記事:
Kubernetes Operator
Operator Basic in CNDK2019

Operatorの開発方法まとめ

  1. Kubernetes Way(CRD + client-go, code-generator)で開発する
  2. Kubebuilderで開発する
  3. Operator SDKで開発する
  4. controller-runtime, controller-toolsを使う
  5. その他(kudo, meta-controllerなど)

5を除いて、順に説明していきます。

各ツールとライブラリの整理

Operatorを開発するためのツールやライブラリには非常に多くの種類があります。
さらにわかりにくいことに、ライブラリにも高レイヤのものと低レイヤのものがあります。

KubebuilderやOperator SDKなどのSDKとcontroller-runtimeやcontroller-tools, client-goなどのライブラリなどの関係性を図に表したものが下記です。

controller_method.png

さらにもう少しSDKとライブラリの関係性を補足したものが下記です。

スクリーンショット 2019-11-29 21.37.06.png

ここではローレベルなライブラリであるclient-goやcode-generatorの下に、各コンポーネント(Informer, Schemeなど)がありますが、ここでは無視して構いません。

Operator開発方法の概要

1. Kubernetes Way(CRD + client-go, code-generator)で開発する

client-gocode-generatorは、Kubernetesの公式ライブラリです。
Kubernetes標準API Resource(Pod,Deployment,Serviceなど)やController(ReplicaSet Controller, Deployment Controllerなど)の開発にも使われています。

この開発方法の特徴としては、低レベルなAPIを活用して開発することになります。
そのため、初めて手を出すには他の方法と比べて難易度が高いです。
実際にOperatorを作る必要性にかられたとしても、おそらく他の方法を選択するケースがほとんどでしょう。

この開発方法のより細かい詳細を知りたい場合は、
ゼロから始めるKubernetes Controllerの資料がこの世で最も詳しいはずです。

2. Kubebuilderで開発する

KubebuilderはKubernetesコミュニティであるSIGsで開発されているOperatorを作るためのSDKです。

チュートリアルも整備されており、Operator開発を始めたい方に非常にオススメできるツールです。
1の方法と比べて格段に開発しやすくなっています。

逆にいうとKubebuilderやOperator SDKは1のKubernetes Wayを隠蔽している部分も多く、いざ開発するとあたかもオーパーツを扱っているかのような錯覚を受けるかもしれません(ここでは、原理が分からないのになぜか動く、という意味で書いています)

その際は1の方法の原理を見ていくと、疑問が氷解するはずです。
ゼロから始めるKubernetes Controllerが参考になります(2回目の登場ですが、宣伝したいわけではありません...他に選択肢がないだけです)。

3. Operator SDKで開発する

Operator SDKもKubebuilderと同じように、Operatorを開発を簡単にするためのSDKとして開発されています。
主にRed Hatが開発をサポートしています。

KubebuilderもOperator SDKも裏側は前述したcontroller-runtimeとcontroller-toolsを使っているので、どちらでも技術トランスファーは容易でしょう。

Red HatはOperator FrameworkというエコシステムでOperator Lifecycleを支援しているので、その恩恵を受けられます。

KubebuilderとOperator SDKのどっちがいいの? と思ったら、好きな方を選びましょう。

4. controller-runtime, controller-toolsを使う

これは上級編です。
KubebuilderやOperator SDKの根本ともいえる、controller-runtimeとcontroller-toolsを個別に使うことでもOperatorは作成できます。

KubebuilderやOperator SDKは、あくまでOperator作成に必要なファイル(goやyamlなど)のテンプレートを生成することが主目的です。

そのため、そうしたライブラリを使ってOperatorを自作することも可能です。
ただ、よほどのユースケースでなければオススメはしません(KubebuilderやOperator SDKを使いましょう)。

本格的にOperatorの開発を開始したい場合

Operatorを作るには、Reconciliation Loopを実装することになります。
名前の通り、Loopで実行するためのロジックを書くことになるので、プログラミング言語における"Hello World"にあたるものはありません。

そのため、Operatorを試しに作る、というのも初めて触る方には難しいかもしれません。

そんな人にオススメなのがSample Controllerです。
Sample ControllerはKubernetes公式で用意したサンプルのControllerです。
このリポジトリでは1のKubernetes Wayで書かれています。

このSample Controllerを試しにKubebuilderやOperator SDKで書いてみたい...!
でもどう書けばいいんだろう?
と思うかもしれません。

KubebuilderとOperator SDKでSample Controllerを再実装したリポジトリを用意していますので、こちらのリポジトリをご参照ください。

https://github.com/govargo/sample-controller-kubebuilder
https://github.com/govargo/sample-controller-operatorsdk

参考本

Kubernetes Controllerの低〜高ライブラリの説明から、Kubebuilder・Operator SDKでのSample Controller実装について一から説明している本を用意しているので、本格的にOperatorに入門したい方・興味がある方はご参照ください。

https://go-vargo.booth.pm/items/1574698
https://go-vargo.booth.pm/items/1566979

以上がOperator開発の前に知っておきたい知識についての説明でした。
参考になれば幸いです。

32
24
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
32
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?