1コマンドでkubernetesを立ち上げるboot2kubernetesというツールをつくった

tcnksm/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を使っている.同様にboot2k8sdocker-composeのGo言語実装であるlibcomposeをライブラリとして利用して複数コンテナを立ち上げている(boot2k8sのcomposeファイルはk8s.ymlにあるのでdocker-composeのみを使いたい人はこれをそのまま利用できる).

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

参考