1コマンドでkubernetesを立ち上げるboot2kubernetesというツールをつくった
kubernetes 1.0がリリースされた.これから実際に試す機会も増えそうなのでDockerを使って簡単に(1コマンドで)kubernetesクラスタを立てるコマンドをつくった.
デモ
以下はOSX上でシングルNodeのkubernetesクラスタを立ててkubectlでリクエストを投げるデモ.
使い方
以下のコマンドでクラスタを立ち上げる.
$ boot2k8s up
このコマンドで必要なDockerイメージがPullされコンテナが起動する.boot2docker上でDockerを動かしている場合ローカルからkubectlでクラスタにアクセスするにはport forwardが必要になる.その場合boot2k8sはport forwardサーバーも同時に起動する.
終了する(コンテナを削除する)には以下を実行する.
$ boot2k8s destroy
boot2k8sが立ち上げたkubernetesコンテナとkubernetesによって立ち上げられたpodを削除することができる.
インストール
OSXの場合はHomebrewでインストールできる.
$ brew tap tcnksm/boot2k8s
$ brew install boot2k8s
他のプラットフォームの場合はリリースページにバイナリがある.
内部の実装
Dockerを使ってシングルNodeのKubernetesクラスタをローカル開発環境に立てる方法はkubernetesの公式が提供している(cf. Running Kubernetes locally via Docker).基本はこのドキュメントとやっていることは同じで,面倒な部分を含めて全てを1つのコマンドにまとめている.
同じように1コマンドでKubernetesクラスタを立ち上げる試みとして“1 command to Kubernetes with Docker compose”がある.これはdocker-composeを使っている.同様にboot2k8sはdocker-composeのGo言語実装であるlibcomposeをライブラリとして利用して複数コンテナを立ち上げている(boot2k8sのcomposeファイルはk8s.ymlにあるのでdocker-composeのみを使いたい人はこれをそのまま利用できる).
boot2k8sはgo-bindataでcomposeファイルをbyteとして埋め込みlibcomposeで起動する.コードで示すと以下のようになる.
// Read .yml file as bytes by go-bindata
compose, _ := config.Asset("k8s.yml")
// Setup new docker-compose project
context := &docker.Context{
Context: project.Context{
ComposeBytes: compose,
ProjectName: "boot2k8s",
},
}
project, _ := docker.NewProject(context)
project.Up()
boot2k8sの利点はport forwardingやコンテナの削除機能を持っていることが挙げられる.さらに今後はDocker machineと連携して様々な環境でkubernetesを簡単に立ち上げられるようにする予定.
最後に
バグや意見は,GitHubのIssueもしくは,@deeeetまでお願いします.
@rrreeeyyyくんに事前に意見をもらいました.ありがとう.