Windows上にOpenShift検証環境（minishiftとLinuxクライアント）を構築する

# TL;DR

Windows端末1台にOpenShiftサーバとLinuxクライアントを構築し、OpenShiftを検証するための環境を構築する手順を記載します。OpenShiftはminishiftで構築します。

# 環境

- OS 名	Microsoft Windows 10 Pro
- バージョン	10.0.19013 ビルド 19013
- プロセッサ	Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz、4200 Mhz、4 個のコア、8 個のロジカル プロセッサ
- インストール済みの物理メモリ (RAM)	48.0 GB

# 前提

- minishiftを利用するために必要な仮想化ソフトの設定が完了していること。WindowsではHyper-VかVirtualBoxを利用しますが、今回はHyper-Vを利用しています。Hyper-Vを使ってminishiftを構築する方法については[こちらの記事](https://qiita.com/osonoi/items/8e818e9d3018cb14ee4a)を参考にしました
- WSL2の設定が完了していること。設定方法は[こちらの記事](https://qiita.com/poramal/items/3562472d52fe60f61c56)を参考にしました

# 手順

大筋の流れはPowerShellでminishiftを構築し、OpenShiftへの接続情報をWSL2の環境にコピーしてWSL2から接続できるようにしています。

## サーバ（minishift）

以下のコマンドでminishiftの設定および起動を行います。OpenShiftのバージョンは検証したい`v3.9.0`を指定しました。

```powershell
> minishift start --openshift-version v3.9.0 --cpus 4 --memory 16GB --hyperv-virtual-switch "External VM Switch"
-- Starting profile 'minishift'                                                                                         -- Check if deprecated options are used ... OK
-- Checking if https://github.com is reachable ... OK
-- Checking if requested OpenShift version 'v3.9.0' is valid ... OK
-- Checking if requested OpenShift version 'v3.9.0' is supported ... OK
-- Checking if requested hypervisor 'hyperv' is supported on this platform ... OK
-- Checking if Hyper-V driver is installed ... OK
-- Checking if Hyper-V driver is configured to use a Virtual Switch ...
   'External VM Switch' ... OK
-- Checking if user is a member of the Hyper-V Administrators group ... OK
-- Checking the ISO URL ... OK
-- Checking if provided oc flags are supported ... OK
-- Starting the OpenShift cluster using 'hyperv' hypervisor ...
-- Starting Minishift VM ......................... OK
-- Checking for IP address ... OK
-- Checking for nameservers ... OK
-- Checking if external host is reachable from the Minishift VM ...
   Pinging 8.8.8.8 ... OK
-- Checking HTTP connectivity from the VM ...
   Retrieving http://minishift.io/index.html ... OK
-- Checking if persistent storage volume is mounted ... OK
-- Checking available disk space ... 49% used OK
-- OpenShift cluster will be configured with ...
   Version: v3.9.0
-- Copying oc binary from the OpenShift container image to VM ... OK
-- Starting OpenShift cluster ......
Deleted existing OpenShift container
Using nsenter mounter for OpenShift volumes
Using public hostname IP 192.168.1.139 as the host IP
Using 192.168.1.139 as the server IP
Starting OpenShift using openshift/origin:v3.9.0 ...
OpenShift server started.

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

```

起動後、`oc`コマンドにパスを通して、`system:admin`でログインできることを確認します。

```powershell
> minishift oc-env | invoke-expression
> oc login -u system:admin
Logged into "https://192.168.1.139:8443" as "system:admin" using existing credentials.

You have access to the following projects and can switch between them with 'oc project <projectname>':

    default
    kube-public
    kube-system
  * myproject
    openshift
    openshift-infra
    openshift-node
    openshift-web-console

Using project "myproject".
```

## クライアント（WSL2）

Linux向けのOpenShiftクライアントをダウンロードし、ファイルを解凍します。クライアントのバージョンが`v3.11.0`ですが本来はサーバに合わせたバージョンを使うべきと思います。`v3.9.0`にはなぜか`kubectl`が同梱されておらず、私の場合は一緒に使いたかったので`v3.11.0`を利用しました。

```bash
$ wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
$ tar zxvf openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
```

パスを通すために今回は`/usr/local/bin/`にコピーします。

```bash
$ sudo cp openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit/oc /usr/local/bin/
$ sudo cp openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit/kubectl /usr/local/bin/
```

minishift構築時に作成された`.kube`フォルダをWSL2のユーザホームディレクトリにコピーします。今回はWindowsとLinuxに`k9nd0`というユーザがいると仮定しました。

```text
コピー元(Windows)：C:\Users\k9nd0\.kube
コピー先(WSL2)   ：/home/k9nd0
```

WSL2で`oc login`できることを確認します。

```bash
$ oc login -u system:admin
Logged into "https://192.168.1.139:8443" as "system:admin" using existing credentials.

You have access to the following projects and can switch between them with 'oc project <projectname>':

    default
    kube-public
    kube-system
  * myproject
    openshift
    openshift-infra
    openshift-node
    openshift-web-console

Using project "myproject".
```

# Reference

- [Windows 10上でHyper-Vを使ってminishiftをセットアップ](https://qiita.com/osonoi/items/8e818e9d3018cb14ee4a)
- [WSL2の環境構築手順](https://qiita.com/poramal/items/3562472d52fe60f61c56)