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くんに事前に意見をもらいました.ありがとう.