五飛、教えてくれ……俺たちはあと何回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を有効にする
- コントロールパネルの「Windowsの機能の有効化または無効化」から「仮想マシンプラットフォーム」を有効化
- WSL 2 Linux カーネルの更新 | Microsoft Docs の手順に従いカーネルを更新する
- 管理者のPowerShellで
wsl --set-default-version 2
を実行
Docker Desktopのインストール
Docker Desktop for Mac and Windows | Docker
インストーラーからインストールします。インストール時に「WSL2を使用するか?」みたいなチェックボックスがあるのでオンにします。
インストール後にチュートリアルとしてテスト用のコンテナ作成が実行できます。コンテナが立ち上がるか確認して、問題なければ停止します。
Kubernetesの有効化
- Settings->Kubernetes->Enable Kubernetesを選択
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ライセンスで試してみたら普通にアップグレードできました。この記事何のために書いたんでしょうね。