Kubernetes Director (KubeDirector) を使ってみた。
この記事はKubernetes Advent Calendarの穴埋め記事です。
Kubernetes Director (KubeDirector)をご存知でしょうか。
Statefulなアプリケーションを管理するためのカスタムコントローラです。
アプリケーション固有のオペレーターと違い、KubeDirectorにはアプリケーション固有のロジックはなく、アプリケーションの情報はカスタムリソースの設定として定義していきます。
KubeDirectorインストール
KubeDirectorはGKEやEKS、Local Kubernetesなどで使用できます。今回はLocal Kubernetesでやってみます。
$ git clone https://github.com/bluek8s/kubedirector.git
$ cd kubedirector/
$ git checkout v0.3.0
$ make deploy
デプロイが完了すると、以下のCustomResourceDefinitionが作成されます。
KubeDirectorApp
: KubeDirectorからデプロイ可能なアプリケーションを定義しますKubeDirectorCluster
: KubeDirectorAppによって定義されたアプリケーションのインスタンスを定義しますKubeDirectorConfig
: KubeDirectorの設定を定義します
また、サンプルのアプリケーションとして、以下のアプリケーションがKubeDirectorAppのカスタムリソースとして追加されます。
cassandra311
: Cassandra 3.11 on centos 7.xcdh5142cm
: CDH 5.14.2 with YARN support. Includes Pig, Hive, and Hue.centos7x
: CentOS 7x utility with no preinstalled appsspark221e2
: Spark 2.2.1 with Jupytertensorflowgpu-jupyter
: TensorFlow GPU with jupyter notebooktensorflowjupyter
: TensorFlow1.9 CPU with centos7x
KubeDirector設定
早速アプリケーションをデプロイしたいところですが、その前KubeDirectorをしておきたいと思います。
設定は、KubeDirectorConfigのカスタムリソースで、kd-global-config
の名前で作成すると反映させることができます。
設定可能な値はこちらで確認できます。
サンプル。
デフォルトのStorageClassやServiceType、Systemdのサポートなどが設定できます。
アプリケーションデプロイ
こちらのサンプルにある永続ストレージを使用するSparkのアプリケーションをデプロイしてみたいと思います。
$ kubectl apply -f cr-cluster-spark221e2-stor.yaml
すると、↑ のyamlファイルに書かれた以下のオブジェクトが作成されます。
- Sparkのcontroller 1podが入ったStatefulSet (40Giの永続ストレージ付き)
- Sparkのworkerノード 2podが入ったStatefulSet
- Jupyterノード 1podが入ったStatefulSet (40Giの永続ストレージ付き)
アプリケーションの作成
こちらにあるサンプルをベースに変更していくのがスムーズかと思います。
ポイントは以下の3点です。
- アプリケーションのメタデータはKubeDirectorAppのカスタムリソースで定義可能です
- コンテナイメージにアプリケーションのベースを入れておきます
- コンテナ起動時にセットアップスクリプトが流せます
まとめ
KubeDirectorを使用すると既存のStatefulなアプリケーションを容易にコンテナ環境に移すことができます。
ぜひ使ってみてください。(^^)