Pod内に複数のコンテナがある場合の起動シーケンス
これはなに 「Kubernetesマイクロサービス開発の実践」というKubernetes本を執筆しまして、めでたく先日発売となりました!ぜひ買ってくださいー。 「Kubernetesマイクロサービス開発の実践」 この書籍の第7章には、PodオブジェクトがAPI Serverに作成されてから実際にPodが起動するまでの処理を解説した箇所があるのですが、諸事情のため書籍では載せられなかったマニアックな挙動があります。それは、Podに複数のコンテナがあり、いずれかまたはすべてのコンテナでpostStart Lifecycle Hookを使っている場合です。このエントリーではそのようなPodが起動するとき、どのような動作になるかを書きます。 📘【note】 これはKubernetes Advent Calendar 2023の20日目の記事です。 お題のPod 本記事では、以下のマニフェストのような複数のコンテナ(container1, container2)を含むPodを使って実験します。ちょっと長いですが、やっていることは以下のような感じです。 container1はメインの処理、postStartフック、Readines Probe、Liveness Probeで、それぞれ1秒おきに /var/log/startup-sequence-test/message にログを出力する container2はメインの処理で、1秒おきに、上と同じファイルにログを出力する apiVersion: v1 kind: Pod metadata: name: startup-sequence-test namespace: default spec: containers: - name: container1 image: busybox:latest args: - /bin/sh - -c - | for i in $(seq 60); do echo "$(date): container1 / main" >> /var/log/startup-sequence-test/message sleep 1 done tail -f /dev/null lifecycle: postStart: exec: command: - "/bin/sh" - "-c" - | for i in $(seq 30); do echo "$(date): container1 / post start hook" >> /var/log/startup-sequence-test/message sleep 1 done readinessProbe: exec: command: - "/bin/sh" - "-c" - | echo "$(date): container1 / readiness probe" >> /var/log/startup-sequence-test/message livenessProbe: exec: command: - "/bin/sh" - "-c" - | echo "$(date): container1 / liveness probe" >> /var/log/startup-sequence-test/message volumeMounts: - mountPath: /var/log/startup-sequence-test name: log-volume - name: container2 image: busybox:latest args: - /bin/sh - -c - | for i in $(seq 60); do echo "$(date): container2 / main" >> /var/log/startup-sequence-test/message sleep 1 done tail -f /dev/null volumeMounts: - mountPath: /var/log/startup-sequence-test name: log-volume volumes: - name: log-volume emptyDir: {} このPodをクラスタに適用した後、/var/log/startup-sequence-test/message に書かれている内容を確認すれば、それぞれの処理がどのような順番で実行されているかが分かるというわけです。 ...