ノハナはGKEを使っています

こんにちは、ノハナのサーバエンジニアの野村です。
初ブログ投稿でございます。初めまして。

普段はGCPとGoでサーバアプリケーション、インフラの構築などしています。

好きなMSはボリノークサマーンです。よろしくお願いします。

はじめに

初投稿なので弊社でのGKE導入についてというエンジニアっぽいことを書こうかなと思います。
ちゃんと仕事しているぞというところをはりきって見せたいと思います。

GKEとは

GKEとはGCPで提供されているKubernetesホスティングサービスです。

Kubernetes Engine は、コンテナ化されたアプリケーションをデプロイするためのマネージド環境です。デベロッパーの生産性、リソースの効率性、自動運用、オープンソースの柔軟性に最新のイノベーションをもたらし、製品化までの時間を短縮します。
https://cloud.google.com/kubernetes-engine/?hl=ja

yaml or jsonで定義された構成、または簡単なコマンドラインでコンテナベース環境構築を行うことができます。

導入した際に感じたメリットは下記の通りです。

  • コンテナの利点を活かすことができる
  • 再現性のあるインフラ構築が可能
  • GCPや他PaaS, SaaSへのアクセスが容易
  • ノウハウやコミュニティ、ツール類が充実している

ノハナのサーバサイドアプリケーション

弊社ではフォトブックを作成できるノハナというアプリを運営しております。

毎月一冊無料なのでよろしかったらみなさんポチってください!
App Store
Google Play

このサービスを運用するにあたり、様々な機能のサーバーアプリケーションを実装しています。

  • parse-serverによるユーザデータのエンドポイント
  • フォトブック作成バッチ
  • 決済
  • push通知基盤
  • CSオペレーション
  • 売上モニタリング

    etc…

皆様のご愛顧を賜り5年以上も継続しているサービスですので、当然継続的にシステムの改善も行なっているわけでございます。

要件にはよりますがマイクロサービス的なアプローチで、モノシリックな既存システムを徐々に分割、リプレースを図っていこうみたいな流れの中でGKEを導入しています。
(エンジニアっぽいですね)

GKEアーキテクチャ概要

サービスにおけるwebバックエンドの一部をGKE上に実装しています。
他社さんでもやっているようなオーソドックスな構成だと思います。

Service

GKE上のPodにwebサーバを配置し、Ingressでアクセスを振り分けています。
Ingress の実体はCloud Load BalancerなのでCloud Armorをアタッチしてファイアーウォールを実装しています。

CI/CD

マスターブランチマージされると後は自動デプロイまでされるような仕組みを構築しています。
CircleCIでテスト、コンテナビルドを行い -> Docker Hub にイメージをデプロイする流れです。

Monitoring

基本的なモニタリングについては、StackDriver Monitoring DataDog を使用し、アラートの通知はPagerDutyを使っています。
また、GKEはデフォルトでStackDriverに様々なメトリクスを送ってくれているので非常に助かっていますが、特殊なメトリクスを送信する際に専用のworkerを設置しています。

最後に

今回ノハナの一部アーキテクチャを紹介しましたが、これからもサービス改善に向けてさらにマイクロサービス化を推し進めていく予定です。
一環としてGKE上で運用するサービスもドンドンドンと増やしていこうと思いますので、一緒にコンテナをいじいじしたいよーという方は気軽にこちらまでお問い合わせくださいネ!