プロダクションレディ Pods
続く3本目のセッションは、ゼットラボの須田一輝さんです。発表資料はこちらに公開されています。

このセッションは、タイトルのとおり「Kubernetesを使い始めて、そろそろプロダクション環境に適用しようという段階で起きうる、思わぬトラブルなどを回避するために注意する点を解説していきます」とセッションが始まりました。ちょうどこのあたりの段階だ、という対象者は多いのではないでしょうか。内容も実践的で非常に参考になるノウハウばかりでした。かいつまんでレポートしていきたいと思います。
何より初めに、あくまでコンテナ=プロセスであって、プロセスの管理はそもそも難しく、これをちゃんと管理していくための方法がPodの設定に凝縮されている、と紹介されました。Podとはデプロイの最小単位で、ライフサイクルである、Building Containers > Scheduling > Running > Terminatingにあわせて解説が進んでいきます。

このステップでは、まずは基本のベストプラクティスに従うのが吉! ということでThe Twelve-Factor Appの紹介です。
よく言われるように、Dockerイメージを小さく、といった文脈において、またその中でもmulti-stage buildsのテクニックは有効とのこと。

このステップでは、Kubernetes側はそのPodがどういうものなのか、どのくらいリソースを使うのか、をもちろん知らないので、そこはエンジニアがKubernetesへ設定を通して正しく教えてあげなくてはいけないとのこと。それを指定できるのが、resource requestsパラメータであり、その中でも、ephemeral-storageという、v1.13時点ではベータ版の機能に少し時間を割いていました。これはコンテナログなどに一時的に使われるストレージ領域のサイズを指定することができるとのこと。

このステップは、アプリケーション開発者としては馴染みのある項目が多いかと思います。リクエストを受ける準備が終わる前にリクエストが来てしまう、あたりは特によく直面しますね。これに対してヘルスチェックをちゃんと設定して回避しましょう、といった内容でした。Liveness probeは一般的によくある監視方法ですね。その設定の中でも、initialDelaySecondsの秒については、起動に時間のかかる類のコンテナでは適切に設定する必要がある、とのことでした。

DevOpsなどのキーワードでも言われるとおり、何度も繰り返し早くデプロイを繰り返す必要がある中で、当然ながらそのサイクルにはアプリケーションの終了というステップが必ずあり、ここに手を加えていないと、アプリケーション終了中に発生するエラーなどが目立ってきてしまうそう。ここでは「Podがいい感じに終了してくれるようにする設定」と表現されていましたが、まさにそんな設定群ですね。
なお、Podの終了については須田さん執筆のこちらのQiitaを参照とのことです。こちらの記事もじっくり読みたくなる内容でした。
