https://docs.docker.com/docker-for-windows/kubernetes/#example-app のサンプルがうまく起動しなかった原因

はじめに

 Docker for Windows Desktopでk8sを動かしてみた - ソフト開発お仕事メモ にて、私はdocker-compose.ymlについて以下の記述をしました。

replicasの数を小さな値(1等)にする。大きい値だと、うまく起動しません(原因は不明)。

 「replicasの数を小さな値にすると起動する理由」は分からなかったのですが、あのdocker-compose.ymlでなぜアプリが起動してこなかったかは分かったので、メモします。

結論から言うと……

 docker-compose.ymlの以下の部分でメモリの割り当てをしているのですが、値が小さすぎました。もう少し大きな値(24M等)を割り当てると起動します。

      resources:
        limits:
          memory: 16M
        reservations:
          memory: 16M

調査方法

以下のサイトを読んで調査したら、理由はあっさり判明しました。 qiita.com

以下は、調査に関するコマンドを実行した際のログです。

> docker stack deploy --compose-file docker-compose.yml mystack
Ignoring unsupported options: build

Stack mystack was updated
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 has one container running
 - Service words was restarted 1 time
 - Service words has one container running
 - Service words was restarted 1 time
 - Service words has one container running
 - Service words was restarted 1 time
 - Service words was restarted 2 times
(中略。途中でCTRL+C で強制終了)
> kubectl get pod
NAME                    READY     STATUS             RESTARTS   AGE
db-868b94859d-z6lpm     1/1       Running            0          1d
web-6b758fc849-rb9ct    1/1       Running            0          1d
words-cf5545f5b-8pvzv   0/1       CrashLoopBackOff   5          4m
words-cf5545f5b-rh82k   0/1       CrashLoopBackOff   5          4m
> kubectl describe pod words-cf5545f5b-8pvzv
Name:           words-cf5545f5b-8pvzv
Namespace:      default
Node:           docker-for-desktop/192.168.65.3
Start Time:     Sat, 23 Jun 2018 12:41:18 +0900
Labels:         com.docker.service.id=mystack-words
                com.docker.service.name=words
                com.docker.stack.namespace=mystack
                pod-template-hash=791101916
Annotations:    <none>
Status:         Running
IP:             10.1.0.87
Controlled By:  ReplicaSet/words-cf5545f5b
Containers:
  words:
    Container ID:   docker://3a6551b41b8fc04397fcd34cde13400ecc9a48fc81242d64fff203a02c4d64eb
    Image:          dockerdemos/lab-words
    Image ID:       docker-pullable://dockerdemos/lab-words@sha256:6e2ef8f4380a4c2eec48bc198e0a474104197939061415632563e7e1c125588f
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       OOMKilled
      Exit Code:    137
      Started:      Sat, 23 Jun 2018 12:47:13 +0900
      Finished:     Sat, 23 Jun 2018 12:47:15 +0900
    Ready:          False
    Restart Count:  6
    Limits:
      memory:  16777216
    Requests:
      memory:     16777216
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-79qsr (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          False
  PodScheduled   True
Volumes:
  default-token-79qsr:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-79qsr
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason                 Age                 From                         Message
  ----     ------                 ----                ----                         -------
  Normal   Scheduled              10m                 default-scheduler            Successfully assigned words-cf5545f5b-8pvzv to docker-for-desktop
  Normal   SuccessfulMountVolume  10m                 kubelet, docker-for-desktop  MountVolume.SetUp succeeded for volume "default-token-79qsr"
  Normal   Pulled                 8m (x5 over 10m)    kubelet, docker-for-desktop  Container image "dockerdemos/lab-words" already present on machine
  Normal   Created                8m (x5 over 10m)    kubelet, docker-for-desktop  Created container
  Normal   Started                8m (x5 over 10m)    kubelet, docker-for-desktop  Started container
  Warning  BackOff                24s (x45 over 10m)  kubelet, docker-for-desktop  Back-off restarting failed container

"kubectl describe pod words-cf5545f5b-8pvzv"の実行結果に以下が含まれていることから、メモリ不足であることがわかります。

      Reason:       OOMKilled

さいごに

 前述したqiitaの記事がなかったら、私は何日も頭を抱えていたことでしょう。
 記事を書いてくれた方に感謝です。