Kubernetesの世界を散策してみよう

## はじめに
このエントリーは[Kubernetes Advent Calendar 2016](http://qiita.com/advent-calendar/2016/kubernetes)の１日目の投稿になります。今年の8月頃から仕事で[Kubernetes](http://kubernetes.io/)を検証していたので、勢い余ってアドベントカレンダーを作ったところ、私以外にも24名の参加者が集まってくれました。今からどんなエントリーが集まるのか楽しみです。皆さん、よろしくお願いします！
## Kubernetesの世界を散策してみよう！
そんなわけで、Kubernetesを使ってあれこれ検証しているわけですが、初回ということもあり、Kubernetesに関して知ることのできる情報をいくつか紹介しながら、その世界を散策したいと思います。

### Kubernetes誕生の物語
まずは、Kubernetesがどのようにして生まれたのか？という話から覗いてみましょう。

- [Google から世界へ : Kubernetes 誕生の物語](http://googlecloudplatform-japan.blogspot.jp/2016/08/google-kubernetes.html)


こちらはGoogle Cloud Platform Japan Blogのエントリーです。Googleの内部で使われているBorgというクラスタ管理システムをベースにして、Dockerを活用したコンテナ管理システムとしてKubernetesが作られたことが語られています。

Googleが提供する[Google Container Engine](https://cloud.google.com/container-engine/?hl=ja)はKubernetes上に構築されたクラスタ管理およびオーケストレーションシステムであり、Dockerコンテナを使用して、Kubernetesで管理することができます。

また、少し前のニュースで知りましたが、[Azure Container Service](https://azure.microsoft.com/ja-jp/services/container-service/)でも、オーケストレーションツールの選択肢として、Kubernetesが選べるようになりました。

### Kubernetesを知る

Kubernetesの仕組みがどのようなものか知るには、公式ページの[What is Kubernetes?](http://kubernetes.io/docs/whatisk8s/)で紹介されている次のスライドを見るとよいです。

- [WSO2Con US 2015 Kubernetes: a platform for automating deployment, scaling, and operations](http://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations)

Kubernetesのバージョンは1.1が対象ですが、Kubernetesの基本となるアーキテクチャや主要機能（Pods、Labels、ReplicationControllers、Services・・・）などについて説明されています。

また、Kubernetesの1.3、1.4についての説明も含んだ内容としては、こちらのスライドがオススメです。

- [Kubernetes: The Latest and Greatest](https://speakerdeck.com/ianlewis/kubernetes-the-latest-and-greatest)
- [Kubernetes 1.4 Update @ DevFest Kansai](https://speakerdeck.com/ianlewis/kubernetes-1-dot-4-update-at-devfest-kansai)  


### Pokémon GOはGoogle Container EngineでのKubernetes過去最大のデプロイ例

Pokémon GOは私も毎日やっているのですが、Google Container Engineを使ってKubernetes上にデプロイされているそうです。Kubernetesの利用事例は多くありますが、一番惹かれたのがPokémon GOの事例です。こちらのスライドで紹介されています。

- [Pokémon GOとGCP](http://www.slideshare.net/GoogleCloudPlatformJP/pokmon-gogcp)

### 読み方と略語

ちなみに、「Kubernetes」ってなんて読むの？と私も最初に疑問に思ったのですが、YouTubeなどで確認すると「クゥーバネティス」が正しいようです。また、文字数が長いので、省略して書くときは「k8s」と表現します。

### OpenShift

Kubernetesをエンタプライズ向けに機能追加したプラットフォームとして、Red Hatは[OpenShift](https://www.redhat.com/ja/technologies/cloud-computing/openshift)を提供しています。OpenShiftはKubernetes上に主に運用面で必要なるツール群が追加されています。私自身も少し試してみましたが、基本はKubernetesなので、Kubernetesを使っていれば大きなギャップがなくOpenShiftも使うことができるように感じています。

### fabric8

もう一つ紹介したいのが、私が個人に最近注目している[fabric8](https://fabric8.io/)です。fabric8はRed Hatが支援しているOSSコミュニティで、公式ページの書き出しには

```
fabric8 is an opinionated and open source Integrated Developer Platform 
for the Continuous Delivery of Microservices using Kubernetes and Jenkins.
```

とあります。私はJavaをメインで使うのですが、fabric8はKubernetesにアプリケーションをデプロイするための[fabric8 maven plugin](https://fabric8.io/guide/mavenPlugin.html)やJenkinsを用いたpipe line機能、Spring CloudをKubernetes用に拡張した[spring-cloud-kubernetes](https://github.com/fabric8io/spring-cloud-kubernetes)を提供しているので、実際の使用感をあれやこれやと試していますが、今の所気に入っています。

### Kubernetesをローカル環境に構築してみよう！

Kubernetesを使ってみるには、[Google Container Engine](https://cloud.google.com/container-engine/?hl=ja)や[Azure Container Service](https://azure.microsoft.com/ja-jp/services/container-service/)を使うのが手っ取り早いですが、[mininkube](https://github.com/kubernetes/minikube)を使うとローカルマシンに環境を簡単に構築することができます。

miniubeのインストールは簡単そうなのですが、私が試したところ、それなりにはまりました。。。

あれこれ試行錯誤した結果、現状での私のお気に入りは、先に紹介したfabric8が提供するfabric8 maven pluginを利用したインストール方法です。こちらはJavaユーザ向きとは思いますが、Java8とMaven 3.3.9が入っていれば次の１コマンドでminikubeの環境が作れます。

```
mvn io.fabric8:fabric8-maven-plugin:3.2.7:cluster-start
```
（もう少し環境面を補足すると私の環境は、MacBook Air 11-inch, Mid 2012で、メモリは8G、brew installでxhyveを入れてあります）

この方法は次のエントリーで紹介されていて、空港のWifiを使って、陽気なおじさんがお酒を飲みながら、１コマンドでminikube環境を構築する様子を見ることができます :-)

- [Installing Kubernetes in One Command With Drink in Hand](https://dzone.com/articles/installing-kubernetes-from-copenhagen-airport-in-o)


## おわりに

というわけで？、Kubernetesに関連する話題を、ぶらぶらと散歩しながら紹介してきました。ここから始まるアドベントカレンダーの記事でより多くのKubernetesに関する情報に触れることができると思いますので、書く人も、読む人も気軽に楽しんでもらえると嬉しいです。

また、12/3（土）に開催される[JJUG CCC 2016 FALL](http://www.java-users.jp/ccc2016fall/)にて、***「Spring Cloudアプリケーションの開発にDockerを活用し、Kubernetes上にデプロイするまで（#ccc_g6）」***というタイトルで発表しますので、ぜひ興味のある方は聞きに来てください！イベントが終わったら、発表資料をこちらにも掲載しようと思います。

## 追記

発表してきました。Kubernetes アドベントカレンダーに参加してくださっている人にも会場で会えて、嬉しかったです。当日の資料はこちらです。合わせて見ていただけると嬉しいです。

- [Spring Cloudアプリケーションの開発にDockerを活用し、Kubernetes上にデプロイするまで](https://speakerdeck.com/muraken720/spring-cloudapurikesiyonfalsekai-fa-nidockerwohuo-yong-si-kubernetesshang-nidepuroisurumade)