GMOクラウドALTUS Basic with Docker上に OpenShift Origin をインストールする

## 1. はじめに
### 経緯
OpenShift Origin のインストール方法について Docker 上で簡単に試せるものを探していましたが
なかなか見つからないと思っていたところ [OpenShift Origin](https://www.openshift.org/)（公式）に良い方法が記載されていました。
公式の手順を試したところネットワークの構成によって、ハマってしまったので共有します。

### コンセプト
下記に該当しそうな方に読んでほしい OpenShift Origin を簡単にインストールする手順です。

- 基本的に面倒なことは嫌っ
- 英語の資料読んでると眠くなるっ
- とりあえず、簡単に新しいことを試したいっ
- 環境構築は面倒なので、なるべくやりたくないっ

### 概要
- GMOクラウドALTUS Basic の Docker テンプレートを利用して OpenShift Origin のコンテナを起動します
- 今回は GUI のログイン画面を表示するところまでをゴールとしています
- ログイン画面を表示する際に、サーバーのローカルIPをポートフォワードします
 （お気づきの方もいらっしゃるかもしれませんが、基本的には Docker 環境上に OpenShift Origin のコンテナをたてるだけです。）


## 2. OpenShift について
ざっくり言うと RedHat 社が提供している Docker + Kubernetes ベースの PaaS です。

### OpenShift の種類

|    | OpenShiftの種類      | 概要            |
|----|----------------------|-----------------|
| A. | OpenShift Online     |パブリックPaaS   |
| B. | OpenShift Enterprise |プライベートPaaS |
| C. | OpenShift Origin     |オレオレPaaS     |
 [ ※A, B  については RedHat 社の公式から抜粋 ](https://www.redhat.com/ja/technologies/cloud-computing/openshift)
 今回取り扱うのは C. OpenShift Origin です。（2016/06/02 時点での最新バージョン v1.3.0-alpha-1.41-g681170a ）


### [OpenShift Origin](https://www.openshift.org/) インストール方法の種類
|   | インストール方法          | 概要                                                                 |
|---|---------------------------|----------------------------------------------------------------------|
|1. | Run Origin in a Container | Docker 入れて run するだけ？  →  簡単そうです！                     |
|2. | Run the All-In-One VM     | Vagrant 環境必要？  →  Vagrant 環境ないから、見なかったことにします |
|3. | Download the Binary       | やること多そう？    →  今回は見なかったことにします                 |

 とりあえず **1. Run Origin in a Container** に的を絞り、 Docker の環境を作ります。
**【注意】**
**この手順では、Ubuntu を利用していますが、公式では Fedora, CentOS, RHEL のみサポートとのことです。**
**壊しても良い環境で試すことをオススメします！**



## 3. 利用環境

### [GMOクラウド ALTUS](https://www.gmocloud.com/) 利用の場合

| 項目               | 内容                                    |
|--------------------|-----------------------------------------|
| サーバー           | GMOクラウド ALTUS Basicシリーズ         |
| 利用テンプレート   | Ubuntu 14.04 64bit with Docker_20160428 |
| 仮想サーバーの種類 | Custom Server                           |
| CPU                | 2vCPU                                   |
| Memory             | 4GB                                     |
| HDD                | 20GB                                    |
| Docker             | v1.11.0                                 |
| ローカルIP（例）   | 10.0.0.1                                |

上記環境で、```apt-get update```, ```apt-get upgrade``` しておきます。
Docker の操作について詳しく知りたい方は、 [GMOクラウドアカデミーの Docker Tips](https://academy.gmocloud.com/docker/20151126/1281)  もどうぞ

### （おまけ）ALTUS 以外の場合
Docker 環境無い人用の環境構築概要（[Docker の公式手順（英語）](https://docs.docker.com/engine/installation/linux/ubuntulinux/)）はこちら
#### 1. サーバー準備
CentOS 7 や Ubuntu14.04 などの環境を用意します。
#### 2. アップデート
（CentOS） ```sudo yum update -y```
（Ubuntu） ```sudo apt-get update -y;sudo apt-get upgrade -y;```
#### 3. curl 無ければ入れます
（CentOS） ```sudo yum -y install curl```
（Ubuntu） ```sudo apt-get -y install curl```
#### 4. Docker をインストールします
```curl -sSL https://get.docker.com/ | sudo sh```
#### 5. Docker のバージョン確認（2016/06/02 時点では v1.11.2 でした）
```docker -v```




## 4. OpenShift Orgin インストール手順

### OpenShift Orign インストール手順（[公式手順（英語）](https://docs.openshift.org/latest/getting_started/administrators.html#running-in-a-docker-container)）はこちらです
下記コマンドを実行するだけで OpenShift Origin 入りの Docker コンテナを起動してくれます。
※ローカルIPアドレス 10.0.0.1 にリダイレクトされていた設定を localhost にリダイレクトさせるため、公式に記載のコマンドに ***--public-master=localhost*** を追加しています。

【コンテナ実行前の注意点】
Docker のホスト側で 53, 7001, 8443 ポートが既に起動しているようならコンテナを起動する前に止めてねとのことです。
**また、初期設定ではどんな Username/Password でもログインできる状態なのでグローバルIPで公開する場合は気をつけてください。**


```
    $ sudo docker run -d --name "origin" \
    --privileged --pid=host --net=host \
    -v /:/rootfs:ro \
    -v /var/run:/var/run:rw \
    -v /sys:/sys \
    -v /var/lib/docker:/var/lib/docker:rw \
    -v /var/lib/origin/openshift.local.volumes:/var/lib/origin/openshift.local.volumes \
    openshift/origin start --public-master=localhost
```


### ポートフォワードの設定（TeraTermPro）
OpenShift Origin のコンテナ起動前後で下記設定をしてサーバー（Docker ホスト）のローカルIP 10.0.0.1:8443 ポートを
接続元（PC）の 8443 ポート にフォワーディングします。


[設定(S)] → [SSH転送(O)]  設定にて下記設定を入力します。
- [ローカルポート]  :8443
- [リモート側ホスト]:サーバーのローカルIP 10.0.0.1（例）
- [ポート]          :8443

<img width="480px" alt="portforward" src="https://qiita-image-store.s3.amazonaws.com/0/128016/e63b0ec7-5b45-4f5e-03ba-f75009ed664b.jpeg">

### ログイン画面の表示
https://localhost:8443/ にアクセスします。
<img width="480px" alt="portforward" src="https://qiita-image-store.s3.amazonaws.com/0/128016/1f2c67f2-dd51-d525-8379-6b029b32906e.jpeg">


### ログイン画面表示までの通信経路
1. PC 側で https://localhost:8443 にアクセスします
2. PC 側 localhost(127.0.0.1):8443 に接続されます
3. ポートフォワードの設定でサーバー側のローカルIP 10.0.0.1:8443 に接続されます
4. サーバー側ローカルIP 10.0.0.1:8443 へのアクセスを受け、Opneshift Origin コンテナがサーバー側の localhost(127.0.0.1):8443 にリダイレクトします
5. サーバー側 localhost(127.0.0.1):8443 へのアクセスを受け web画面を返します

**【注意】**
PC 側、サーバー側どちらも localhost を 127.0.0.1 で名前解決できる必要があります！



## 5. ハマったこと、確認したこと


### ハマッたこと
公式に記載のあるコマンドの最後に **--public-master=localhost** を追加していますが、
追加しない場合はポートフォワード後、 https://localhost:8443 にアクセスすると
ローカルIP 10.0.0.1 にリダイレクトされてしまって正常に接続ができませんでした。
同様の事例が少なかったため、解決に時間がかかってしまいました。


### 確認したこと
- ```sudo docker exec -it origin bash``` でコンテナに接続します
- ```more $KUBECONFIG``` で server: https://10.0.0.1:8443 が記載されているのを確認しました
- 一旦 Ctrl + P → Ctrl + Q  でコンテナから抜けます
- ```sudo docker logs origin``` コマンド（origin はコンテナ名）でもローカルIP 10.0.0.1 が直接利用されていることを確認しました


- この段階では、 Google 先生に聞いても、特にコレ！というのを探せませんでした
- 問題の切り分け作業･･･本手順の ALTUS 環境では eth0 がローカル IP 10.0.0.1 だったので、eth0 がグローバル IP のサーバーで試しました
    この場合はグローバルIP:8443 に接続すると問題なくログイン画面へ接続可能でした。
    ※切り分けの結果として、サーバーの eth0 で利用されている IP アドレスをコンフィグファイルに書き込んでいるようだということがわかりました。
- 試しにインストール方法を YouTube で検索しました（**意外と YouTube が参考になりました！**）

### 最終的に
[YouTube（英語）](https://www.youtube.com/watch?v=uocucZqg_0I) のインストール方法を見て
コンテナ起動時に公式のコマンドに追加されているオプション（**--public-master=localhost**）を発見し
**--public-master** を再度 Google 先生に聞いたところ [ここのサイト](http://akubicharm.hatenablog.com/entry/2015/04/13/023300) や [openshift の README.md](https://github.com/openshift/origin/blob/master/examples/sample-app/README.md)で
同様の記載があり、追加したらポートフォワードでも問題なくログイン画面を表示できました。
YouTube でインストール方法を検索してみるのも時には問題解決のヒントを得るきっかけになるんだなぁと思いました。


## 6. おわりに

次回は[try-it-out](https://docs.openshift.org/latest/getting_started/administrators.html#try-it-out) などを試し、
結果について記載しようと思います。

【参考】
https://www.openshift.org/
https://en.wikipedia.org/wiki/OpenShift
https://www.redhat.com/ja/technologies/cloud-computing/openshift
[Docker Tips 目次～Cloud ServerでDockerを使おう～ | GMOクラウドアカデミー](https://academy.gmocloud.com/docker/20151126/1281)
[OpenShift v3 beta (v0.4)を試す - akubicharm’s blog](http://akubicharm.hatenablog.com/entry/2015/04/13/023300)
[OpenShift 3: Zero to PaaS to running app - YouTube](https://www.youtube.com/watch?v=uocucZqg_0I)