CentOSにDockerとKubernetes(minikube)をインストール

# CI/CDデモ環境構築作業メモ その1

ちょっとしたデモやテストに使えるような、ローカルPC単独で使えるデモ環境を作ることにした。
躊躇なく汚したり壊したりできるように、仮想マシンの中に全ての機能を押し込んで構築する。
Linux仮想マシンを一つ用意し、CI/CDツールはすべてDockerコンテナで用意、ランタイム環境にはMinikubeを使用する構成にした。

## 完成形イメージ
![image](https://qiita-image-store.s3.amazonaws.com/0/164612/8cf8ba63-8e26-7741-b89f-4ad9601b84d0.png)

CI/CD環境については、ソースリポにGitLab、CIツールはJenkins、アーティファクトリポにJFrog、その他Dockerイメージレジストリと開発者用コンソールにそれぞれコンテナを用意する。
JenkinsのコンテナについてはKubernetes環境を操作できるようkubectlとその他Ansibleやmavenなど入れておいてもいいかも。

## CentOS環境の準備
Linux仮想マシンは、手元のVMWare fusionに、過去にKVMを設定したCentOSイメージを使用した。
`# cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)`
CentOSのインストールとKVMの設定はここでは割愛。
### IPフォワードの設定
実際の操作にあたっては母艦のブラウザからCentOSのIP経由でDockerコンテナにアクセスするため、CentOSのIPフォワードを有効にしておく。 /etc/sysctl.confに1行追加しネットワークサービスを再起動。
`# vi /etc/sysctl.conf`
> net.ipv4.ip_forward = 1

`# systemctl restart network`
正しく設定されると、`/proc/sys/net/ipv4/ip_forward`が`1`に書き換わる

## CentOSへのDockerインストール
 [ドキュメント](https://docs.docker.com/engine/installation/linux/centos/) に従い、Dockerリポジトリを追加

~~~
2017年3月17日追記
上記オフィシャルドキュメントが作業時点から書き換わっているおり、現時点では以下のコマンドでは作業できない。オフィシャルドキュメントに従ってください…
~~~

~~`# yum-config-manager --add-repo \
https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo`
リポジトリキャッシュの更新
`# yum makecache fast`
Dockerエンジンインストール
`# yum install docker-engine`
Dockerデーモンの有効化、開始
`# systemctl enable docker`
`# systemctl start docker`
確認
`# docker version` 
`# docker run hello-world`
`# docker ps -a `~~

## Minikubeのインストール
### [ドキュメント] (https://github.com/kubernetes/minikube/blob/master/DRIVERS.md#kvm-driver)に従いkvm-driverをインストール
今回はMinikubeが使用する仮想プラットフォームにKVMを使用するため、まずKVM用のドライバをインストールする。
`# curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.7.0/docker-machine-driver-kvm ¥`
`-o /usr/local/bin/docker-machine-driver-kvm`
`# chmod +x /usr/local/bin/docker-machine-driver-kvm`
`# yum install libvirt-daemon-kvm`
### [minikubeインストール] (https://github.com/kubernetes/minikube/releases)
`# curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.16.0/minikube-linux-amd64`
`# chmod +x minikube `
`# mv minikube /usr/local/bin/`
### [kubectlインストール] (https://kubernetes.io/docs/user-guide/prereqs/)
`# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl`
*常に最新バージョンをダウンロードするためにcurlが入れ子になっている*
`# chmod +x kubectl`
`# mv kubectl /usr/local/bin`
### minikube起動および確認
Minikubeの仮想環境にKVMを使用しているため--vm-driverオプションにkvmを指定して起動する。
`# minikube start --vm-driver=kvm`
確認
`# kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080`
`# kubectl expose deployment hello-minikube --type=NodePort`
`# kubectl get pod`

ダッシュボードURLを確認
`# minikube dashboard --url`
*このコマンドにより、minikubeがKVM上に起動する仮想マシンのIPアドレスを確認できる。
仮想マシンにはデフォルトでdockerユーザが作成されており、SSHを使用してパスワードtcuserでログインできる。*
*SSH接続は、IPアドレスやパスワードがわからなくても、`minikube ssh`コマンドで可能*
minikubeのインストールと確認にあたっては[minikubeでローカルKubernetesクラスタを5分でつくる方法] (http://qiita.com/mumoshu/items/8f55ee830d8e5c172dd4)も参考にさせていただいた。

## 疎通確認
pingを使って簡単な疎通確認をしておく。
CentOS <-> Docker Container
CentOS <-> minikube VM
Docker Container <-> minikube VM

つづく？