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の記事がなかったら、私は何日も頭を抱えていたことでしょう。
記事を書いてくれた方に感謝です。