Kubernetesハンズオン準備編 ～ローカルマシンにKubernetesクラスタを構築する～

[kubernetesの公式サイト](http://kubernetes.io/gettingstarted/)にはKubernetesの様々なインストール方法が掲載されています。その中から、Vagrant + VirtualBox + CoreOSを使ってKubernetesクラスタを構築する方法を試してみます。([link](https://github.com/pires/kubernetes-vagrant-coreos-cluster/blob/master/README.md))
ここでは、Master1台、Minion3台の合計4台構成でクラスタを構築します。Kubernetesのバージョンは1.0.2です。

## 前提条件
- Vagrant >= 1.7.2
- VirtualBox >= 4.3.x
- OS
  - Mac OS X v10.10 Yosemite
  - Windwos 7 

MacとWindowsの場合で手順が異なりますので自分の環境に合わせて実施してください。

***

# Mac OS Xの場合
Macで構築する場合、gitコマンド、wgetコマンドを利用します。事前にインストールしておいてください。

```
$ brew update
$ brew install git
$ brew install wget
```

## リポジトリの取得
```
$ git clone https://github.com/pires/kubernetes-vagrant-coreos-cluster.git
```

## クラスタの構築
```
$ cd kubernetes-vagrant-coreos-cluster
$ NUM_NODES=3 MASTER_MEM=512 NODE_MEM=512 vagrant up
```
CoreOSの仮想マシンが4台構築されます。途中、管理者ユーザのパスワードを聞かれるので入力してください。/usr/local/binにKubernetesのコマンドラインツールがインストールされます。

**Notes**

- ローカルマシンのメモリが足りない場合は**NUM_NODES=2**として実行してください。仮想マシン3台の構成になります。
- Kubernetesのコマンドラインツールがすでにインストールされている場合は、一度削除するかPATHを外してください。クラスタの設定に失敗する場合があります。Google Cloud SDKを利用したことがある場合、インストールされている可能性があります。以下のコマンドでインストール済みのPATHを確認できます。

```
$ which kubectl
```

## 構築後の確認
VirtualBox上に仮想マシンが4台稼働しています。

- master
- node-01, node-02, node-03
  - **Notes:** vagrant statusコマンド構築した仮想マシンを確認する場合、master1台とnode2台しか表示されません 。([issue](https://github.com/pires/kubernetes-vagrant-coreos-cluster/issues/52))

/usr/local/bin にコマンドラインツールがインストールされています。

```
$ which kubectl
/usr/local/bin/kubectl
```
~/.bash_profile に以下の設定が追加されています。

```
export FLEETCTL_ENDPOINT=http://172.17.8.101:4001
export KUBERNETES_MASTER=http://172.17.8.101:8080
```

以下のコマンドでKubernetesクラスタの情報を取得できます。

```
$ source ~/.bash_profile

$ kubectl cluster-info
Kubernetes master is running at http://172.17.8.101:8080

$ kubectl get nodes
NAME           LABELS                                STATUS
172.17.8.102   kubernetes.io/hostname=172.17.8.102   Ready
172.17.8.103   kubernetes.io/hostname=172.17.8.103   Ready
172.17.8.104   kubernetes.io/hostname=172.17.8.104   Ready
```

以上でKubernetesクラスタの構築は完了です。コマンドラインツールを使ってクラスタを操作することができます。

## クラスタの停止・再構築

Kubernetesクラスタを停止する場合、vagrant destroyコマンドで仮想マシンを削除します。クラスタを再構築する場合は、[クラスタの構築](http://qiita.com/tominaga443/items/4aa8be180ef6e3481e83#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%81%AE%E6%A7%8B%E7%AF%89)から再度実施してください。

```
$ NUM_NODES=3 vagrant destroy
```

- **Notes:**
  - NUM_NODESを指定しないと3台目以降のnodeが削除されません。
  - vagrant haltコマンドで仮想マシンを停止させた場合、次回起動時にエラーとなってしまいます。また、vagrant suspendコマンドは利用できません。

***

# Windowsの場合

## リポジトリの取得
以下のリンクよりZIPファイルを取得して解凍します。
https://github.com/pires/kubernetes-vagrant-coreos-cluster/archive/master.zip

## クラスタの構築
```
> cd kubernetes-vagrant-coreos-cluster-master
> set NUM_NODES=3
> set MASTER_MEM=512
> set NODE_MEM=512
> set VAGRANT_DEFAULT_PROVIDER=virtualbox
> vagrant up
```

CoreOSの仮想マシンが4台構築されます。

**Notes**

- ローカルマシンのメモリが足りない場合は**NUM_NODES=2**として実行してください。仮想マシン3台の構成になります。
- 設定した環境変数は以下のコマンドで確認できます。

```
> set
```

## 構築後の確認
VirtualBox上に仮想マシンが4台稼働しています。

```
> vagrant status
Current machine states:
master                    running (virtualbox)
node-01                   running (virtualbox)
node-02                   running (virtualbox)
node-03                   running (virtualbox)
```

MasterノードにKubernetesのコマンドラインツールがインストールされています。SSHでログインし、MasterノードからKubernetesクラスタへの操作を行います。

```
> vagrant ssh master
```

以下のコマンドでKubernetesクラスタの情報を取得できます。

```
$ kubectl cluster-info
Kubernetes master is running at http://172.17.8.101:8080

$ kubectl get nodes
NAME           LABELS                                STATUS
172.17.8.102   kubernetes.io/hostname=172.17.8.102   Ready
172.17.8.103   kubernetes.io/hostname=172.17.8.103   Ready
172.17.8.104   kubernetes.io/hostname=172.17.8.104   Ready
```

以上でKubernetesクラスタの構築は完了です。Masterノードからコマンドラインツールを使ってクラスタを操作することができます。

## クラスタの停止・再構築

Kubernetesクラスタを停止する場合、vagrant destroyコマンドで仮想マシンを削除します。クラスタを再構築する場合は、[クラスタの構築](http://qiita.com/tominaga443/items/4aa8be180ef6e3481e83#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%81%AE%E6%A7%8B%E7%AF%89-1)から再度実施してください。

```
> set NUM_NODES=3 
> vagrant destroy
```

- **Notes:**
  - NUM_NODESを指定しないと3台目以降のnodeが削除されません。
  - vagrant haltコマンドで仮想マシンを停止させた場合、次回起動時にエラーとなってしまいます。また、vagrant suspendコマンドも利用できません。