Windowsにdockerおよびkubernetesのローカル開発環境を構築する

# はじめに

クラウドのキーテクノロジーとなる **kubernetes (以下、k8s)** の知識習得のため、
Windows10パソコンにk8sクラスタを構築する環境構築方法をまとめます。

# k8sとは

恐縮ですが、下記の拙稿をご参照いただけると幸いです。

https://qiita.com/hiyasichuka/items/1d00ea3a83f3118a2cad



# ローカルにk8sの環境を構築する方法

k8s環境構築にはいくつか方法があります。
代表的なものは以下の３種類です。

- Minikube
- Docker Desktop
- kind (k8s in Docker)

|項目          | Minikube  | Docker Desktop | kind      |
|:------------|:-----------|:------------|:------------|
|バージョン選択| 〇        | ×             |◎         |
|マルチクラスタ| 〇        | ×             |〇           |
|マルチノード  | ×        |×               | 〇         |
|機能性       | ◎        | △            | 〇           |
|手軽さ       | 〇        | ◎            | 〇       |


今回はマルチクラスタ＆マルチノードを視野に入れるため、**kind**を採用します。
**kind**を利用するためには、Dockerのインストールが必要となります。

# ローカルk8s環境の構築手順

おおまかな構築作業の流れとしては以下のようになります。

1. [Ubuntu-20.04（WLS2）をインストール](https://docs.microsoft.com/ja-jp/windows/wsl/install-manual)
1. [Docker Desktopをインストール](https://docs.docker.com/get-started/)
1. [kindをインストール](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)

## Ubuntu-20.04をインストール

Powershellを起動して、下記コマンドでインストーラをダウンロード&インストールします。

```powershell:powershell
# Ubuntu.appxというファイル名としてダウンロード
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing

# ダウンロードしたファイルを元にアプリインストール
Add-AppxPackage .\Ubuntu.appx
```

### Ubuntu-20.04の設定

以下ユーザー名の入力を求められたら何も入力せず、ウィンドウを閉じましょう。
そうすることでrootで自動ログインできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/0129a878-e346-43e5-fbb6-1d54cd05135a.png)


## Dockerをインストール

詳細は[こちら公式ドキュメント](https://docs.docker.jp/docker-for-windows/install.html)をご確認ください。
インストールの流れは以下です。

1.　Docker Desktop Installer.exe をダブルクリックし、インストーラを起動します。
2.　確認画面が出たら、 Enable Hyper-V Windows Features （Hyper V の Windows 機能を有効にする）のオプションが、設定ページで選択されているかどうかを確認します。
3.　インストール・ウィザードの指示に従い、利用規約を承諾し、インストーラに権限を与えてインストールを進めます。
4.　インストールに成功したら、 Close （閉じる）をクリックしてインストールを終了します。
 >管理者（admin）アカウントと使用中のアカウントが異なる場合、 docker-users グループにユーザを追加する必要があります。（Windows の） コンピュータの管理 を管理者として起動し、 ローカル ユーザーとグループ > グループ > docker-users を右クリックし、対象ユーザをグループに追加します。ログアウト後に戻ってくると、設定が有効になっています。

### Dockerの設定

Ubuntu-20.04（WSL2）からdockerコマンドを叩けるようにするため、ONにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/2188c87e-bd3c-7842-88e9-1d9a3086a186.png)

kubectlを使えるようにするため、ONにします。（それなりに時間がかかる。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/3f31cf53-a867-696a-b407-28e4603482e9.png)


### ここまで正常インストール出来たかチェック

Ubuntuを起動して、下記コマンドを叩きます。
各バージョン情報が表示されればインストール完了です。

```shell:Ubuntu
# Docker version
docker -v

# kubectl version
kubectl version --client
```

実行画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/89aa5b0e-3ecc-413f-8c60-185c8b2b7057.png)


# kindをインストール

最後にkindのインストール方法です。
詳細は[公式ドキュメント](https://kind.sigs.k8s.io/docs/user/quick-start/)をご確認ください。

```bash:Ubuntu
# kindをダウンロード
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64

# 実行権限付与
chmod +x ./kind

# 実行ファイルを移動
mv ./kind /usr/local/bin/

# バージョン確認
kind version
```

実行画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/831350b4-ef46-4385-86ad-527058552478.png)

このようにkindのバージョンが表示されれば完了です。

# k8sを試しに動かしてみる。

hello-worldと呼ばれるexampleのDockerをk8s上で動かしてみます。
--restart=Neverは、取り敢えず呪文だと捉えてください。

```shell:Ubuntu
# hello-worldのDockerイメージをk8sで動かす。
kubectl run hello-world --image hello-world --restart=Never

# k8s上のコンテナ(pod)のステータスの確認する。
kubectl get pod

# hello-worldコンテナ内部のログ確認する。
kubectl logs pod/hello-world

```
実行画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/ef70915f-5274-9987-345d-025ebc21af92.png)

Hello from Dockerと表示され、hello-worldコンテナが動いていることを確認できました。
動作確認ができたので、hello-worldを削除しておきます。
下記コマンドを実行してください。

```shell:Ubuntu
# コンテナ(pod)を削除する。
kubectl delete pod/hello-world
```

実行画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533960/a1510e48-35a7-69ef-be46-b5b8f7950f2c.png)



# さいごに

Windows10パソコン上にk8sクラスタを構築する準備ができました。
またk8sでhello-worldのDockerコンテナを動かしてみました。
k8sクラスタの構築については、新たに記事を執筆したいと思います。

以上です。