今更ながらWSL2にminikube入れてみた

# はじめに
少しローカルでk8sを試してみたくて今更ながらWSL2にminikube入れてみました。

また忘れてしまいそうなので、備忘録としてインストール手順のメモを残します。

# 環境
- Windows10 home
    - version： 2004
    - OSビルド：20279.1
- WSL2
- Docker

# WSL2のインストール
[公式ページ](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)の手順を参考にインストールしました。

# Dockerのインストール
WSL2内で以下コマンドを実行し、インストールしました。

（自分は以前にCUDA on WSL2を試すときにDockerを入れたため、若干コマンドがうろ覚えですが以下でよかった気がします...）

```shell:shell

$ curl https://get.docker.com | sh
```

# minikubeのインストール
基本的には[公式ページ](https://kubernetes.io/ja/docs/tasks/tools/install-minikube/)の手順に沿ってインストールしました。

```shell:shell
# バイナリをダウンロード
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube

# Minikube実行可能バイナリをパスに追加
$ sudo mkdir -p /usr/local/bin/
$ sudo install minikube /usr/local/bin/
```

# kubectlのインストール
どうせ使うので、ついでにkubectlもインストールしておきます。
こちらも例にもれず、[公式ページ](https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/)の手順に沿っていインストールしました。

```shell:shell
# 最新版のバイナリをダウンロード
$ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

# バイナリを実行可能にして、実行パス内に放り込む
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
```

# 動作確認
さっそくminikubeを起動させてみます。

```shell:shell
# dockerを起動（これをやっておかないと、以下コマンドでエラーが出てくる）
$ sudo service docker start

# minikubeをdocker上で起動（割り当てメモリーを制御したければ、--memory=8gとかで設定する）
$ minikube start --vm-driver=docker
😄  minikube v1.16.0 on Ubuntu 18.04
✨  Using the docker driver based on existing profile
👍  Starting control plane node minikube in cluster minikube
🏃  Updating the running docker "minikube" container ...
🐳  Preparing Kubernetes v1.20.0 on Docker 20.10.0 ...
🔎  Verifying Kubernetes components...
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

# kubectlでkubernetesのAPIをたたいてみる
$ kubectl get node
NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   52m   v1.20.0

# docker上で確認する
$ docker ps -a
CONTAINER ID        IMAGE                                           COMMAND                  CREATED             STATUS              PORTS                                                                                                      NAMES
0455498d5d7d        gcr.io/k8s-minikube/kicbase:v0.0.15-snapshot4   "/usr/local/bin/entr…"   53 minutes ago      Up 53 minutes       127.0.0.1:32771->22/tcp, 127.0.0.1:32770->2376/tcp, 127.0.0.1:32769->5000/tcp, 127.0.0.1:32768->8443/tcp   minikube

```

お試しにnginxのPodも作ってみようと思います。

```yaml:sample_nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
```

```shell:shell
$ kubectl apply -f sample_nginx.yaml
deployment.apps/nginx created
$ kubectl expose deploy/nginx --port=80
service/nginx exposed
$ kubectl port-forward svc/nginx 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
Handling connection for 8080
```

これでlocalhost:8080にアクセスしてみると、以下のような画面が表示されるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130155/cd409716-62d9-b28c-ecd0-b771c63d92ac.png)

最後に、使い終わったPodの掃除をしておきます。

```
$ kubectl delete deployment nginx
$ kubectl delete svc nginx
```

# おわりに
今回は、自宅のWindows PCにminikubeをインストールしてサンプルを少し動かしてみました。

私自身がMLエンジニアなので、今後はMLに関わるところでminikubeを使って色々試したいと考えています。