諸々

信号処理・機械学習に興味を持っているエンジニア見習いのメモです。技術的なことから趣味のことを書いていきます。

wsl2にminikube

はじめに

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

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

環境

  • Windows10 home
    • version: 2004
    • OSビルド:20279.1
  • WSL2
  • Docker

WSL2のインストール

公式ページの手順を参考にインストールしました。

Dockerのインストール

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

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

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

minikubeのインストール

基本的には公式ページの手順に沿ってインストールしました。

# バイナリをダウンロード
$ 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もインストールしておきます。 こちらも例にもれず、公式ページの手順に沿っていインストールしました。

# 最新版のバイナリをダウンロード
$ 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を起動させてみます。

# 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も作ってみようと思います。

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
$ 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

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

$ kubectl delete deployment nginx
$ kubectl delete svc nginx

おわりに

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

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