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

 参考ページと変えるところは以下です。

  1. volumesのホスト側パスを絶対パスにする。
  2. replicasの数を小さな値(1等)にする。大きい値だと、うまく起動しません(原因は不明)。
(追記)02.について少々分かったことがあったので、https://docs.docker.com/docker-for-windows/kubernetes/#example-app のサンプルがうまく起動しなかった原因 - ソフト開発お仕事メモ を書きました。

 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

さいごに

 良い感じのチュートリアルページを発見できず、そこが一番大変でした。