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.x
  • cdh5142cm: CDH 5.14.2 with YARN support. Includes Pig, Hive, and Hue.
  • centos7x: CentOS 7x utility with no preinstalled apps
  • spark221e2: Spark 2.2.1 with Jupyter
  • tensorflowgpu-jupyter: TensorFlow GPU with jupyter notebook
  • tensorflowjupyter: 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点です。

まとめ

KubeDirectorを使用すると既存のStatefulなアプリケーションを容易にコンテナ環境に移すことができます。

ぜひ使ってみてください。(^^)

このblogの内容は個人の意見に基づくものであり、 所属組織団体の公式見解とは異なる場合があります点、ご了承ください。