Operator FrameworkではOperatorをGo言語で作ることになっていますが、まだまだGoはハードルが高い人もいるし、
そもそも状態を常時管理する必要が無いようなステートレスなコンテナにいちいちイチからOperatorを作るのは面倒です。
Operator Framework自体がOperatorを簡単に実装できるようにするフレームワークではありますが、そういった要件を考慮してさらに開発を簡単にするラッパーが開発されています。
前者は、既存のhelmチャートをOperatorに変換するもの、後者はAnsibleでOperatorを作るものです。
この記事では、Helm App Operator Kit
を紹介します。
Helm App Operator Kit
helmはKubernetesの世界で既に広く使われているパッケージマネージャーであり、多くのhelmチャートが作られています。
この資産、helmチャートからOperatorを作ることができれば便利そうですね。
helmチャートをOperator化することで、
- CustomResourceによる宣言的なインストール、アップデート、設定変更が可能
- 上記によりhelmコマンドやTillerをインストールすることなくkubectlでインストールやアップデートが完結する
- Operator Lifecyle Managerによる管理対象にできる
といったメリットがあります。これを実現するのがHelm App Operator Kitです。
公式ベージにTomcatのhelmチャートをOperator化する例があるので試してみたいと思います。
前提
- ローカルマシンにDockerがインストールされていること
- QuayやDockerHubに自分で管理しているリポジトリがあること
- kubectlコマンドで操作できるKubernetes環境があること
Helm App Operator Kitのダウンロード
git cloneしてくるだけです。
|
|
HelmチャートからOperatorのコンテナイメージをビルドする
Helm App Operator Kit
では、build-argsにhelmチャートのtarballをURLで指定してdocker buildすることで、helmチャートをコンテナイメージに変換します。
|
|
なお、Tomcatのhelmチャートは何故かHostPortを空けようとするのでOpenShift環境だと権限の関係でPodがデプロイされません。tarをダウンロードして、変更することで修正できます。 以下に修正したものをアップロードしましたのでご使用ください。 https://s3-ap-northeast-1.amazonaws.com/literalice-helm-charts/tomcat-0.1.0.tgz
これで、Operatorのコンテナイメージが作成されコンテナレジストリにPushされました。
Operatorをインストールする
さて、今回作成したTomcat Operatorは、以下のようなCRが作成、変更、削除されたときにTomcatを指定通りにインストールしたりアンインストールします。
スキーマは、docker build
時に指定したKINDなどのパラメーターと、helmチャートのvalues.yaml
に従い決定されます。
|
|
このCRをapplyすれば、TomcatがKubernetes上にプロビジョニングされるというわけですね。
このCRを作成するためには、まずCRDを作成しなければなりません。
サンプルのディレクトリには既に用意されているので、以下コマンドを適用するだけです。
|
|
|
|
次に、Operatorをインストールします。テンプレートが用意されているので、プレースホルダを先ほどビルドしたOperatorコンテナイメージに置換して使用します。
|
|
OperatorでTomcatをインストールする
これで、Tomcatをインストールする準備ができました。
以下のようにCRを適用すると、OperatorがTomcatをインストールしてくれるはずです。
|
|
OperatorでTomcatのPodを変更する
このTomcat PodはOperatorで管理されているので、対応するCRをeditすることで設定を変更できます。
|
|
|
|
Tomcat Podのインスタンス数を確認してみます。
|
|
このように、Podが減少していることが分かります。
Tomcatをアンインストールするには、対応するCRを削除します。
|
|
kubectl delete tomcat
。すごく直観的で分かりやすいと思いませんか?
Operator Lifecycle Manager(OLM)でTomcat Operatorを管理する
OLMをKubernetesにインストールしている場合は、Tomcat OperatorをOLMで管理することもできます。
|
|
さて、 OpenShiftの場合、v3.11からOLMの管理画面が付いているので、以下のように画面で動作を確認できます。
せっかくなので、管理画面からTomatをインストールしてみます。
上記画面で、「Create Tomcat Server」を押下します。
作成については、CRのYAMLを画面上でapplyできるだけですね。 kubectl apply -f cr.yaml
に相当する操作です。
画面上でtomcatインスタンスの一覧が確認できます。
コマンドラインからも、Tomcatが起動していることが確認できます。
|
|
まとめ
helmチャートがあれば、Helm App Operator Kit
でOperatorを生成できます。
Operatorによるサービスのインストール、設定は、エンドユーザーにとってkubectl
で操作が完結する、複雑な設定が隠蔽されシンプルなCRで設定できるなどのメリットがあります。
もし、今helmチャートで管理しているサービスがあるなら、Operator化を検討してはいかがでしょうか。