はじめに
このエントリーはKubernetes Advent Calendar 2016の2日目の投稿になります。1日目のエントリーの最後でfabric8のmaven pluginを使ったローカル環境の構築方法を紹介したのですが、その後のバージョンではそのままだと期待通りに動かない部分があるので、そのフォローアップを行います。
環境条件
今回説明する環境は macOS Sierra(ver 10.12.2) を前提とします。また、次のソフトウェアをインストールしているものとします。
- java (1.8.0_112)
- go (go1.7.4 darwin/amd64)
- homebrew
- maven (Apache Maven 3.3.9)
- xhyve (via homebrew)
- docker (via homebrew)
- docker-machine (via homebrew)
- docker-machine-driver-xhyve (via homebrew)
問題点
1日目のエントリーでは次のコマンドを実行するだけでローカル環境にminikube環境を構築できることを紹介しました。
mvn io.fabric8:fabric8-maven-plugin:3.2.7:cluster-start
しかし、このfabric8-maven-plugin 3.2.7くらいから、minikube環境の構築はできるものの、構築完了時に自動的にfabric8のdashboard画面が以前は開いたのですが、そのままではタイムアウトエラーがでるようになりました。これは、Kubernetes上にデプロイされているサービスに外部からアクセス可能にするためのexposecontrollerというモジュールがデフォルトではデプロイされなくなったために、Kubernetesの外からそのままではアクセスできないことが原因です。
fabric8のdashboardへのアクセスがタイムアウトしてから、Kubernetesのdashboardにアクセスして、fabric8 dashboardのService定義(yaml)のtype属性をNodePortに変更するという泥臭いやり方もあるのですが、それではあんまりなので、もう少しスマートに回避する方法を紹介します。
手順
まずは必要なソフトウエアをまとめてインストールするために次のコマンドを実行します。
mvn io.fabric8:fabric8-maven-plugin:3.2.11:install
これにより、gofabric8、minikube、kubectlが ~/.fabric8/bin
以下にインストールされます。
次にminikube環境を構築します。
gofabric8 start --console --open-console=false --memory=8192 --vm-driver=xhyve --batch
gofabric8コマンドはminikube環境を構築し、fabric8モジュールをデプロイしてくれます。ポイントは --open-console=false
の部分で、これで構築完了時に自動的にfabric8 dashboardを開かないようにしています。
次のコマンド実行すると、minikube+fabric8環境が構築できているか確認してくれます。
gofabric8 validate
チェック項目がグリーンでチェック印がつけば正常に構築できています。次にexposecontrollerをデプロイします。
kubectl apply -f http://central.maven.org/maven2/io/fabric8/devops/apps/exposecontroller/2.2.298/exposecontroller-2.2.298-kubernetes.yml
これでfabric8 dashboard(console)に外部からアクセスできるようになりましたので、次のコマンドを実行するとコンソールを開くことができます。
gofabric8 console
または
minikube service fabric8
上記はどちらも同じ意味で、fabric8 dashboard(console)を開きます。
クラスタを停止するには、次のコマンドを実行します。
gofabric8 stop
おわりに
というわけで、もともとは1コマンドで構築が完了する予定なのですが、fabric8は絶賛開発中ということもあり、問題が発生するのを回避したい場合には上記の手順によって環境を構築することができます。環境が作れれば、いろいろと試せて面白い環境ですので、ぜひお試しください。