Kubebuilderでカスタムコントローラーを作ってみた

Posted on
Kubernetes

年末年始で時間があったので、前々から挑戦したいと思っていたカスタムコントローラーの開発に挑戦してみました。

作ったもの

以前、App Runnerの検証用に作ったToDoアプリケーション(Rails)をシュッと立ち上げるカスタムコントローラーを作りました。「Gotodo」というカスタムリソースを作成することで、アプリケーションを起動するために必要な各種リソースがデプロイされます。

具体的に作成するカスタムリソースは、以下のとおりです。

apiVersion: application.kennyg51.dev/v1
kind: Gotodo
metadata:
  labels:
    app.kubernetes.io/name: gotodo
    app.kubernetes.io/instance: gotodo-sample
    app.kubernetes.io/part-of: gotodo-controller
    app.kubernetes.io/managed-by: kustomize
    app.kubernetes.io/created-by: gotodo-controller
  name: sample
spec:
  replicas: 1

上記のカスタムリソースをデプロイすることで、カスタムコントローラーによって以下のリソースが作成されます。

GoToDo Controller Architecture

  • アプリケーション
    • Deployment
    • Service
  • データベース(MySQL)
    • Deployment
    • Service
    • ConfigMap(データベース初期化用のSQLをマウントするため)

リソースはできてもそのままではアクセスできないのでkubectl port-forwardでローカルから繋げるようにします。

kubectl port-forward svc/gotodo-app-sample 8080:80

ブラウザからアプリケーションを表示し、タスクの登録・削除ができます。

GoToDo Controller App

またカスタムリソースを削除することで、作成されたリソースもカスタムコントローラーによって削除されます。

学んだこと

そもそもGoに関する知識がほぼない状態だったので、Goの基本的な文法をおさらいする所からはじめました。またGoを使った実際の開発経験もなかったので、詳解Go言語Webアプリケーション開発を読みました。カスタムコントローラーとは直接関係はなく内容も正直なところ僕には難しかったですが、7割くらい取り組むことで、Goを使った開発の雰囲気を想像できるようになりました。(これは2ヶ月前くらいからコツコツ取り組んでいました)

カスタムコントローラーの開発についてはつくって学ぶKubebuilderが素晴らしかったです。実際に手を動かしながら通読しました。また実践入門 Kubernetesカスタムコントローラーへの道も以前購入していたので目を通しました。

これから

自作のカスタムコントローラーをひとまず動かしてみることが目的だったので、大量のツッコミどころに目をつむって開発を進めました。(具体的には、データの永続化とかテスト書いてないとか)ぶっちゃけ他の人が使って役に立つものでは一切ないので、学んだことを試してみる自分用のオモチャとして今後も活用していこうと思います!