Docker for Windows Desktopのk8sでアプリを動かしてみる
はじめに
「Docker for Windows Desktopのk8sでアプリを動かしてみる」までを、日本語でまとめて解説した記事を発見できず、地味に苦労したためメモ。
環境
- Windows 10 Pro
- Docker 18.05.0-ce-win67
- Kubernetes v1.10.3
Kubernetesのインストール
以下の記事の方法でインストール出来ます。
Docker for Windows DesktopにもKubernetesを搭載! #docker #kubernetes #k8s - クリエーションライン株式会社
インストール後の状態確認
コマンドの所在
> where docker C:\Program Files\Docker\Docker\Resources\bin\docker.exe > where kubectl C:\Program Files\Docker\Docker\Resources\bin\kubectl.exe
バージョン確認
> kubectl version Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
ステータス確認
> kubectl get componentstatuses NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health": "true"}
nodeの状態
私の環境では以下の状態でした。
masterノードしかないですが、アプリの起動確認(後述)したところこの状態で動作しました。
> kubectl get node NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 1d v1.10.3
podの状態
以下のコマンドで確認できます。当然podは無しです。
> kubectl get pod No resources found.
stackの状態
以下のコマンドで確認できます。stackも無しです。
> kubectl get pod ~\git\github\k8s-test> docker stack ls NAME SERVICES
アプリの起動確認
docker-compose.ymlの作成
以下のページを参考にdocker-compose.ymlを書きます。
Deploy on Kubernetes | Docker Documentation
参考ページと変えるところは以下です。
- volumesのホスト側パスを絶対パスにする。
- replicasの数を小さな値(1等)にする。大きい値だと、うまく起動しません(原因は不明)。
01.についてですが、相対パスのままですと以下のエラーが出力されます。
Stack.compose.docker.com "mystack" is invalid: mystack: Invalid value: "null": conversion to kube entities fails: C:\Users\sekom\git\github\k8s-test\web\static: only absolute paths can be specified in mount source
前述した内容を踏まえて、参考ページのdocker-compose.yml内容を書き換えると、以下になります。
version: '3.3' services: web: build: web image: dockerdemos/lab-web volumes: - "/C:/Users/sekom/git/github/k8s-test/web/static/:/static" ports: - "80:80" words: build: words image: dockerdemos/lab-words deploy: replicas: 1 endpoint_mode: dnsrr resources: limits: memory: 16M reservations: memory: 16M db: build: db image: dockerdemos/lab-db
アプリを起動する
以下のコマンドで起動します。
> docker stack deploy --compose-file docker-compose.yml mystack Ignoring unsupported options: build Stack mystack was created Waiting for the stack to be stable and running... - Service db has one container running - Service web has one container running - Service words has one container running - Service words was restarted 1 time - Service words was restarted 2 times Stack mystack is stable and running
起動後のpodの確認
以下のコマンドで確認できます。podが存在しています。
~\git\github\k8s-test> kubectl get pod NAME READY STATUS RESTARTS AGE db-868b94859d-qtkrc 1/1 Running 0 52s web-6b758fc849-mg64w 1/1 Running 0 52s words-cf5545f5b-rvhkw 1/1 Running 1 52s
起動後のstackの確認
以下のコマンドで確認できます。stackが存在しています。
~\git\github\k8s-test> docker stack ls NAME SERVICES mystack 3
アプリの終了
以下のコマンドで停止できます。
> docker stack rm mystack Removing stack: mystack
さいごに
良い感じのチュートリアルページを発見できず、そこが一番大変でした。