Windows 10 Home (ver 2004, build 19041)でKubernetesとNginx Ingress Controllerを使う。

五飛、教えてくれ……俺たちはあと何回Windowsをクリーンインストールすればいい?

May 2020 Updateの上書きアップデートに失敗して、ログイン直後にハングアップするようになったのでクリーンインストールしました。セーフモードだと起動するのでサービスかドライバのせいだと思うのですが、調査するよりクリーンインストールしたほうが早いです。サインイン画面からShiftキー押しっぱなし -> 電源 -> 再起動 でセーフモードが使えることを今回初めて知りました。
Windows 10 のセーフ モードおよびその他のスタートアップ設定

Windows 10 HomeでもDocker Desktopが動作するようになったのでKubernetesでNginx Ingress Controllerの動作確認をしました。

使用したバージョン

  • Docker Desktop community: 2.3.0.4(46911) stable
  • Docker Engine: 19.03.12
  • Kubernetes: v1.16.5

WSL2を有効にする

  1. コントロールパネルの「Windowsの機能の有効化または無効化」から「仮想マシンプラットフォーム」を有効化
  2. WSL 2 Linux カーネルの更新 | Microsoft Docs の手順に従いカーネルを更新する
  3. 管理者のPowerShellで wsl --set-default-version 2 を実行

Docker Desktopのインストール

Docker Desktop for Mac and Windows | Docker
インストーラーからインストールします。インストール時に「WSL2を使用するか?」みたいなチェックボックスがあるのでオンにします。
インストール後にチュートリアルとしてテスト用のコンテナ作成が実行できます。コンテナが立ち上がるか確認して、問題なければ停止します。

Kubernetesの有効化

  1. Settings->Kubernetes->Enable Kubernetesを選択
  2. kubectl get nodes でnodeの状態が取得できるか確認。シングルノードなのでmasterしかない。 bash PS C:\Users\mail\Documents\pods> kubectl get nodes NAME STATUS ROLES AGE VERSION docker-desktop Ready master 154m v1.16.6-beta.0

Nginx Ingress Controllerのインストール

Installation Guide – NGINX Ingress Controllerの手順を実行

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/cloud/deploy.yaml

ingress controllerの起動確認

PS C:\Users\mail\Documents\pods> kubectl -n ingress-nginx get services,deployments,pods
NAME                                         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             LoadBalancer   10.102.109.2   localhost     80:31301/TCP,443:31691/TCP   111m
service/ingress-nginx-controller-admission   ClusterIP      10.99.131.11   <none>        443/TCP                      111m

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           111m

NAME                                            READY   STATUS      RESTARTS   AGE
pod/ingress-nginx-admission-create-4rz86        0/1     Completed   0          111m
pod/ingress-nginx-admission-patch-zwgdm         0/1     Completed   0          111m
pod/ingress-nginx-controller-5947756d78-jp7q4   1/1     Running     0          111m

動作確認用のDeploymentとServiceとIngressのapply

動作確認用のDeploymentとServiceとIngressをapplyします。今回は「Docker/Kubernetes 実践コンテナ開発入門」という本でチュートリアル用に公開されているgihyodocker/echo:latestのイメージを使用しました。8080ポートにアクセスすると「Hello Docker!!」というテキストが返ってくるアプリケーションです。Podの数は3つにしておきました。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
  labels:
    app: echo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      labels:
        app: echo
    spec:
      containers:
      - name: echo
        image: gihyodocker/echo:latest
        ports:
        - containerPort: 8080

動作確認用にClusterIPでServiceを作って80番ポートで待ち受け。

kind: Service
apiVersion: v1
metadata:
  name: echo-service
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: echo

/echo へのアクセスを振り分けるように設定。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /echo
        backend:
          serviceName: echo-service
          servicePort: 80

動作確認

http://localhost/echo にアクセスすると「Hello Docker!!」が返ってきました。成功です。

所感

Windows Homeでも手軽にDockerやK8sが試せるようになって本当に素晴らしいなと思いました。
ちなみにWindows 7以降のProライセンスを所有しているとWindows 10もProにできるそうで、8年前に購入した8のProライセンスで試してみたら普通にアップグレードできました。この記事何のために書いたんでしょうね。