みなさま、お疲れ様です!エンジニア採用広報の高瀬 (@Guvalif) です。
この記事は、PHP Conference Japan 2020 Re:born のイベントレポート兼、 Chatwork Advent Calendar 2020 における 12 日目の記事です。
弊社からは SRE 部の尾崎 (@k_kinzal) が登壇を行いましたので、 当日の発表まとめと Q & A を掲載いたします。
今回、「PHP on Kubernetes」といったテーマで:
- なぜ、PHP アプリケーションでコンテナを使用するのか?
- コンテナ化、Kubernetes 化では何をする必要があり、何に注意する必要があるのか?
- 開発環境でも Kubernetes を使うべきか?
などなど、Chatwork の事例を元に解説を行いました:
こちらの登壇の補足として、Creator's Note ほかに詳細な解説連載記事がありますので、 読み合わせしていただくと深い理解の助けになるかと思います 📋
- AWS 導入事例:Chatwork 株式会社
- PHP のレジェンドシステムを EC2 から Kubernetes に移行する話,その 1
- PHP のレジェンドシステムを EC2 から Kubernetes に移行する話,その 2
- PHP のレジェンドシステムを EC2 から Kubernetes に移行する話,その 3
- PHP のレジェンドシステムを EC2 から Kubernetes に移行する話,その 4
登壇後、Discord 上で行われた Ask the Speaker にて寄せられた質問は以下の通りです:
- Q.
- 環境変数を ConfigMap で入れるという方法はどうでしょうか?
- A.
- ConfigMap でもいけます!ただ、環境変数の数が多い場合はやはり辛さがでてきます…
- Q.
- 秘匿値の注入は環境変数でしょうか?
- AWS のその辺りのサービスをあまり知らず恐縮ですが、SecretManager みたいなものを使用されているのでしょうか?
- A.
- 注入は Secret で定義して、それを環境変数で読み込むという形にしています
- Secret の中身自体は SSM Parameter に保管して、YAML を適用するタイミングでYAMLに埋め込むというような形ですね
- アプリケーションで SecretManager や SSM Parameter 使えれば良かったのですが、アプリケーションの変更は最小にしたかったのでその辺はやれていないです
- SSM Parameter から Secret に変換するツールもあったりするのでおすすめです: https://github.com/mumoshu/aws-secret-operator
- Q.
- busybox よりも PV を使ったほうが良い場合もあるのでは?
- 例えば、Key-Value Store として使いたいなら Managed KVS など
- A.
- PV も利用可能なのですが、そうしてしまうと PV にステートができるので、その更新が必要になることが悩ましいですね
- コンテナの良いところの 1 つとして、全てのコンテナ起動が同じ挙動になるというのがあるので、このあたりはメリット・デメリットで考える必要があるかなと
- busybox からのコードのコピー時間が起動時にかかるようにはなっちゃうので、そのあたりにも良し悪しはありますね…
- Q.
- 開発環境として telepresence は使いますか?
- A.
- 特に使ってはいないです
- Docker for Mac などであればマウントしてあれば大丈夫です
- リモートに Kubernetes クラスタを使っている場合は、そういうものが必要になりそうですね
- Q.
- Chatwork では Kubernetes 導入における学習コストをどのように賄ったんでしょうか?
- A.
- 気合いと根性です 😇
- 弊社の場合は全社としてやっていくぞ!となったので、SRE 部隊から 3 人がかりでまず張り込んで学習しました
- 加えて、開発部隊の人にも苦労してもらいながらギリギリ回っている感じではあります
- Q.
- Prometheus の運用について質問ですが、Kubernetes 上で動かしているのでしょうか?
- A.
- Prometheus の話題を出しておきながらですが、実は弊社では Datadog を利用しています
- Prometheus Exporter に Datadog が対応しているので、実際のメトリクスは全て Datadog 側に収集しています
- 詳しい方法に関しては、こちらの記事も参考にしてみてください: https://creators-note.chatwork.com/entry/2018/06/26/153127
- 将来的には、Prometheus で収集したメトリクスを使って、オートスケールの制御をしたいというのはあります (PHP-FPM のアクティブプロセスでスケールなど)
- その場合は同一 Kubernetes クラスタに乗せて、監視は Datadog、スケールは Prometheus のようにしたいという気持ちはあります
「Chatwork って Scala の会社なんでしょ? 🤔」というイメージもあるかもしれませんが、 チャットシステム上を流れる大量のリクエストを捌き、リアルタイムなコミュニケーションを実現する手段として、 PHP のプロダクトはゴリゴリに現役です!
また、今回の事例のように Kubernetes 対応であったり、他にも静的解析など、 現代的な技術を取り込んで絶えず進化を続けています。
ハイトラフィックを支える開発に挑戦してみたい方は、ぜひお気軽にエントリーいただければ嬉しい限りです 💪