OpenShift (OKD 3.11.0)をWindows上にMinishift(v.1.34.0)で動かしてサンプルアプリを動かすまで

# 概要

このエントリは、Red HatのOpenShift(v3系)をWindows環境でMinishiftを使って動かすまでの手順を記録したものです。

Red Hatが提供している"Minishift"を使うと、OpenShiftをローカル環境で立ち上げるまでを少ない手数で実施することが可能です。
本エントリの内容は、基本的に[Minishiftのサイト](https://docs.okd.io/latest/minishift/getting-started/index.html)に従っています。

## 前提

以下を使用します。(2019年7月時点で使いやすいもの、という基準)

|項目|内容|備考|
|:--|:--|:--|
|OS|Microsoft Windows 1803 [Version 10.0.17134.829]|1803で、SSHコマンドが標準で入っているので便利|
|ハイパーバイザ|[Oracle VM Virtualbox](https://www.oracle.com/technetwork/jp/server-storage/virtualbox/overview/index.html) Version 6.0.6|Extension Packも使ってます|
|PC|CPU: Core i3, RAM:16GB|(MinishiftのVMには、メモリ4GB, 2vCPU分が割り当て)|

## ハイパーバイザ

Minishiftでは、ハイパーバイザは、OS独自で使えるもの(macOS:xhyve, linux:KVM, windows:Hyper-V)と、複数のOSで使えるもの(VirtualBox)が[それぞれ利用可能](https://docs.okd.io/latest/minishift/getting-started/preparing-to-install.html)です。筆者は、macOS, Linux, Windowsで同じノウハウが使いやすい、後者の手段を選択しました。

## Minishift

Minishiftのリリース物内に格納されているREADME.adocを参照すると、Minishiftに関して以下のような記載があります。
- VMの起動に[libmachine](https://github.com/docker/machine/tree/master/libmachine)を使用
- [OpenShift Origin](https://github.com/openshift/origin)でクラスタを構築
- Minishiftコードベースは、[Minikube](https://github.com/kubernetes/minikube)をフォークしたもの

ライセンスは、Apache License 2.0です。

# 導入手順

## 仮想マシンホストの導入

[Oracle VM Virtualbox](https://www.oracle.com/technetwork/jp/server-storage/virtualbox/overview/index.html) のサイトより、インストーラをダウンロードし、デフォルトの設定に従いインストールします。
Virtualbox以外の導入手順についても、[Minishiftのサイトに解説](https://docs.okd.io/latest/minishift/getting-started/setting-up-virtualization-environment.html)があります。

## リリースの入手

[Minishiftのリリースページ](https://github.com/minishift/minishift/releases)に、プラットフォームごとのバイナリが格納されています。

![minishift_binaries.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/a4a579a8-3368-27db-ee0a-bb3c12a5a833.png)

「-systemtray-」付きのものとそうでないものがありますが、筆者は「minishift-systemtray-1.34.0-windows-amd64.zip」を使用しました。
サイトによれば、これは[お試し中の機能](https://docs.okd.io/latest/minishift/using/experimental-features.html)で、osのシステムトレイのアイコンから、Minishiftのプロファイルの起動・停止などの操作ができるものです。

## バイナリの配置

配置場所は、「c:ドライブ以下」の任意の位置です。本エントリ執筆時点では、[ネットワークドライブからは起動できない](https://github.com/minishift/minishift/issues/236)模様。

筆者は以下の位置に配置しました。

```Console
C:\apps\Minishift\minishift.exe
```

この位置にあるminishift.exeが実行できるように、何らかの方法で環境変数"PATH"にパスを指定（上記例では「C:\apps\Minishift」）します。


> 環境変数を指定するのはいくつか方法がありますが、一番早いのは下記です。
> ①「Windowsキー+R」で「ファイル名を指定して実行」ダイアログを出す
> ②「rundll32 sysdm.cpl,EditEnvironmentVariables」をコピペしてEnterキーを押す

![PATH.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/cabf8d46-4d5b-6fe0-0f01-147c28c7e3e7.png)

## 起動確認

「Windowsキー+R」「cmd」でコマンドプロンプトを立ち上げ、

```Console
> minishift
```
でコマンドのヘルプが表示されればOKです。

![minishift-help.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/2f6383f9-bdd7-0cd7-fa3d-448b35c0ce0b.png)

### (補足) sshコマンド

Minishiftでは、PATH内に入っているsshコマンドを使用します。Windows 1803では、下図の位置にsshコマンドが標準で入っています。本エントリではこのsshコマンドを使用しています。

![ssh-command-1803.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/c7ef41e2-e318-5dc8-1f26-8c31ecc85cbd.png)

## 起動

下記のように、minishiftにstartコマンドを指定して起動します。

```Console
> minishift start --vm-driver virtualbox --profile minishift-311
```


オプション指定については、

- "--vm-driver virtualbox"で、Minishiftが使用する仮想マシンホストを指定しています
- "--profile minishift-311"で、Minishift用の"プロファイル"(=VMを作るための属性とセット)の名称を指定しています。

（サイト上のマニュアルは[こちら](https://docs.okd.io/latest/minishift/command-ref/minishift_start.html)）

OpenShiftクラスタが起動するまで、回線状況にもよると思われますが、分のオーダーで時間がかかります。落ち着いて待ちましょう。

しばらくすると、コマンドプロンプトに下記のような表示が出るはずです。

```
Login to server ...
Creating initial project "myproject" ...
Server Information ...
OpenShift server started.

The server is accessible via web console at:
    https://192.168.99.104:8443/console

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin


-- Exporting of OpenShift images is occuring in background process with pid 7780.

```

## Webコンソールへのログイン

Webブラウザで、「https://192.168.99.104:8443/console」にアクセスします。
自己証明書が適用されているため、ブラウザで「安全でないサイト」などの表示が出ますが、自身で建てた上記のサイトについては、そのまま「詳細」などから「続行」します。

![okd-login.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/6609d50e-2bfb-590b-4908-03d2ecbc21e1.png)

ユーザ名は、「developer」、パスワードは何でもよいと書いてあるので「developer」でログインします。

ログインに成功すると、下図のようなアプリケーションカタログの画面になります。

![okd-catalog.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/b7850c51-f5a9-f799-8640-d742e41091b0.png)

# サンプルアプリを実行してみる

カタログから、node.jsを選択します。

下図のようなダイアログで、ステップ1で次に進みます。

![app-dialogue-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/96634387-e329-1a53-41b9-5c704fdb5fe6.png)

下図のようなダイアログで、ステップ2では、プロジェクト名はそのまま、ルールに従った任意の名前を付けて、「サンプルを利用する」リンクをクリックし、サンプルのGitHubリポジトリを指定します。

![app-dialogue-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/ce9e9785-09f0-a89d-05c0-08308a8d069b.png)

ステップ3は、確認して終了です。このダイアログ内のアプリケーションの詳細へのリンクをクリックします。

![app-dialogue-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/2c6a2899-3de5-9a7f-361f-ad5f72459bd0.png)

アプリケーションがビルド中になります。これまた少なくとも初回は分オーダーで時間がかかると思われますので、ゆっくり待ちます。

![app-building.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/554406e0-5cd0-f8a5-4380-4ac86c2c8c40.png)

その間は、「>」ボタンで下図のような詳細情報やログを眺めたり、

![app-description.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/57f2a663-9850-56ff-2a5c-d74cabf2d195.png)

あるいは、後述の方法でMinishift内のVMにsshして下図のようにtopコマンドで動作を眺めたりしながら待つとよいかもしれません。

![minishift-ssh.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/2e536822-1794-f340-aa10-5f769660e52d.png)

しばらくすると、OpenShiftのPodが出来上がり、アプリが稼働状態になります。http:// で始まるリンクがアプリケーション名の右側にありますので、クリックすると、サンプルアプリケーションにアクセスできます。（アドレスの解決に、nip.ioのサービスを使っています）

![pod-created.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/ad210681-f36a-3910-10a2-e3c1537c2870.png)

ブラウザに、下図のようなサンプルアプリケーションが表示されれば成功です。おつかれさまでした。

![app-home.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65002/1e71ae1a-a487-33b5-c884-2e7a30da9092.png)

# まとめ

このエントリでは、Windows機でOpenShiftをMinishiftを使って動かし、サンプルアプリケーションをデプロイするところまで扱いました。

各手順は簡単ですが、分オーダーで時間がかかるところがあるので、適当にほかのことをしながら作業するとよさそうです。

# 補足

## ちょっとしたコツ、というか、あきらめ

"minishift start"が、何らかの理由で失敗することもあるかもしれません。

トラブルシュートを試みてもよいですが、さっくり消してやり直し、をしたほうが結果として早い場合もあると思います。
筆者も、(Minishiftのせいだけではなく、ネットワークのトラブルなどあったため)インストールがうまくいかないケースがあり、やり直した結果うまくいきました。

下記の方法で、プロファイルを消してやり直しました。

- minishiftをdeleteオプション付きで実行する
- 何らかの理由で上記できれいに消えない時は、VirtualBoxのGUIからVMを「除去」
- ホームディレクトリ内の「\.minishift\profiles」に、プロファイル名のフォルダがあるので、これも消す

## Minishift VMへのssh

下記のコマンドで、Minishiftが稼働しているVM上のOSにログインできます。

```
> minishift ssh
```


## CLI(oc)の実行

OpenShiftのCLIは、「oc」です。これを実行するには、まずminishiftコマンドをoc-envコマンドを指定して実行し、起動すべきocがどこにあるかを確認します。

```Console
>minishift oc-env
SET PATH=C:\Users\hrkt\.minishift\cache\oc\v3.11.0\windows;%PATH%
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('minishift oc-env') DO @call %i
```

次に、この指示に従い、コマンドプロンプト上で次を実行します。(PATHを環境変数に指定しておいても効果は同じです)

```
> @FOR /f "tokens=*" %i IN ('minishift oc-env') DO @call %i
```

これで、PATHにoc.exeへのパスが追加されます。