Docker DesktopとWSLの連携
Windows10のWSLで気軽にKubernetesを試せるようにしてみました。 Docker DesktopとWSLを連携して使う形を想定しています。
何かのタイミングでUbuntu-20.04を入れていたようので、こちらを使っています。
WSL+Docker: Kubernetes on the Windows Desktop | Kubernetesを参考に動作確認を始めたのですが、Dockerは最初から使えるもののKubernetesが使えませんでした。 調べてみるとWSL1のままだったので、まずWSL2に変更します。
Docker Desktopの設定画面でWSL2のDistributionが無いと言われています。
以下WindowsのコマンドプロンプトでVersionを確認してからVersionを変更。
C:\Users\tworks55>wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Running 1 docker-desktop Running 2 docker-desktop-data Running 2 C:\Users\tworks55>wsl --set-version Ubuntu-20.04 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。 C:\Users\tworks55>wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 2 docker-desktop Running 2 docker-desktop-data Running 2
以下はWSL1の時にWLS上のUbuntuからdockerとkubectlの動作確認をした履歴です。 WSL1から2に変更したタイミングでインスタンスが強制終了されています。
tworks55@DESKTOP:~$ docker version Client: Version: 19.03.8 API version: 1.40 Go version: go1.13.8 Git commit: afacb8b7f0 Built: Tue Jun 23 22:26:12 2020 OS/Arch: linux/amd64 Experimental: false Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? tworks55@DESKTOP:~$ kubectl version kubectl: command not found tworks55@DESKTOP:~$ Linux 用 Windows サブシステム インスタンスが強制終了されました。 Press any key to continue...
ここからはWSL2に変更されてからの履歴です。 Docker DesktopでインストールされているDistributionが選択できるようになっています。 Ubuntu-20.04しかインストールされていないので、こちらをONにしてApply&Restartをクリック。
そして最初と同じようにdockerとkubectlの動作確認をしたところ、両方とも使えるようになっていました。
tworks55@DESKTOP:~$ docker version Client: Version: 19.03.8 API version: 1.40 Go version: go1.13.8 Git commit: afacb8b7f0 Built: Tue Jun 23 22:26:12 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 20.10.5 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 363e9a8 Built: Tue Mar 2 20:15:47 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.4 GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e runc: Version: 1.0.0-rc93 GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec docker-init: Version: 0.19.0 GitCommit: de40ad0 tworks55@DESKTOP:~$ kubectl version Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:15:20Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
KubernetesでHello world
Hello Minikube | Kubernetesを参考にHelloWorldをやってみます。
Deploymentの作成
tworks55@DESKTOP:~/k8s$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 deployment.apps/hello-node created
Serviceの作成
tworks55@DESKTOP:~/k8s$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080 service/hello-node exposed
作成されたServiceの情報を確認
tworks55@DESKTOP:~/k8s$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.106.118.4 localhost 8080:31279/TCP 10s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10h
ブラウザでhttp://localhost:8080にアクセスする。 そうすると以下のようなレスポンスが表示されます。
CLIENT VALUES: client_address=192.168.65.3 command=GET real path=/ query=nil request_version=1.1 request_uri=http://localhost:8080/ SERVER VALUES: server_version=nginx: 1.10.0 - lua: 10001 HEADERS RECEIVED: accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding=gzip, deflate, br accept-language=ja,en-US;q=0.9,en;q=0.8 connection=keep-alive host=localhost:8080 sec-ch-ua="Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99" sec-ch-ua-mobile=?0 sec-fetch-dest=document sec-fetch-mode=navigate sec-fetch-site=none sec-fetch-user=?1 upgrade-insecure-requests=1 user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 BODY: -no body in request-
クリーンアップ
以下のコマンドを実行し作成されたServiceなどを削除します。
tworks55@DESKTOP:~/k8s$ kubectl delete service hello-node l delete deployment hello-nodeservice "hello-node" deleted tworks55@DESKTOP:~/k8s$ kubectl delete deployment hello-node deployment.apps "hello-node" deleted
実際にやってみると基本的な環境構築はそんなに難しいものではないことがわかりますね。 MacじゃなくてもWindowsで結構いろいろな作業はできそうなことがわかりました。