ecサイト構築プラットフォーム gke google cloud …...google cloud anthos day...

Post on 13-Jun-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Google Cloud

Anthos Day

GKEで実現する自由なECサイト構築プラットフォーム株式会社イーシーキューブ CTO 奥清隆

ECに色を

EC-CUBE

● オープンソース● ECサイトパッケージ● PHP● モノリシック● シングルテナント

沿革

EC-CUBEのクラウドサービス

● OSSパッケージと同じソース○ 機能拡張はプラグイン

○ プラグインシステム

■ ユーザーのプログラムを実行できる

○ ファイルシステムを使うキャッシュ

● 取り込まれたPull Requestは毎週本番に反映○ OSSパッケージは3ヶ月に1度マイナーバージョンアップ

○ プラグインが動かなくなるので互換性とテストが大事

クラウドサービス開始前

● EC-CUBEのパッケージ開発は行っているが、サイト構築や運用は直接していな

かった

● 運用しているのはプラグインやテンプレートを配信するサービスや開発コミュニ

ティサイト

● Kubernetesは使っていない

● コンテナはローカルでの開発やCI環境で利用

なぜKubernetes?

● PoCの早い段階でコンテナ利用を決定● コンテナ管理するためにKubernetesを検討● 学習コストは高いが得られるものも大きい● Kubernetesを学ぶことでサービス運用に必要な知見を習得● そのままKubernetes/GKEを採用に至る

本番導入してまもなく1年

2018/10 2019/01 2019/02 2020/01

PoC開始 クローズドβリリース

正式リリース

01構成

IngressGCLB

Kubernetes Engine

EC-CUBEPod

アプリケーションサーバー

● Apache + EC-CUBE● Postfixのコンテナをサイドカーにして

SendGridにリレー● フロントにはIngressを利用

IngressGCLB

Kubernetes Engine

PostgreSQLPod

EC-CUBEPod

データベース

● マネージド・サービスではなくコンテナを利用

● データファイルはPVに永続化

IngressGCLB

Kubernetes Engine

PostgreSQLPod

MemcachedPod

EC-CUBEPod

キャッシュサーバー

● EC-CUBEのキャッシュ

ファイルサーバー

● ReadWriteManyなPVとして使用● ユーザーがアップロードした

画像/CSS/JSなどのリソース● ユーザーがインストールした

プラグインやUIテンプレートIngressGCLB

Kubernetes Engine

PostgreSQLPod

MemcachedPod

EC-CUBEPod

NFS ServerCompute Engine

CronJob

● 証明書更新● DBバックアップ● ファイルバックアップ● レポート作成

IngressGCLB

Kubernetes Engine

PostgreSQLPod

MemcachedPod

EC-CUBEPod

NFS ServerCompute Engine

Hourly/DailyCronJob

IngressGCLB

Kubernetes Engine

PostgreSQLPod

MemcachedPod

EC-CUBEPod

NFS ServerCompute Engine

Hourly/DailyCronJob

1サイトを1つのNamespaceで管理

● EC-CUBEはマルチテナントではない● サイトごとにNamespaceで分離● コンテナイメージは同じだがサイトごとに異

なる設定を持つ● NetworkPolicyでNS間のアクセスを制御

Kubernetes Engine

Kubernetes Engine

メリット

● 個別に管理することでサイトごとに異なる設定が可能

● スケールするときもサイトごとに● ユーザーはプラグイン等で自由にカスタマ

イズしたサイトを構築● NSで分離することでサイト間で干渉しない● 個別の要望にも対応可能● 自由なカスタマイズを実現

デメリット

● アップデート/メンテナンスも個別に

Helm

● 異なる設定を変数として定義しConfigMap/SecretやK8sオブジェクトを作成

apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: eccube-ingress annotations: kubernetes.io/ingress.global-static-ip-name: {{ .Release.Name }}-ipspec: tls: - secretName: eccube-certificate hosts: - {{ .Values.domain }} backend: serviceName: eccube-svc servicePort: 80

02アップデート/メンテンナンス

アップデート

● 毎週最新版のEC-CUBEをデプロイ● 各サイトごとに`heml upgrade`コマンドを

実行していく● サイト数が増えるとすべてをアップデートす

るのに時間がかかる

$ heml upgrade ...

並列化

● Cloud Pub/Sub -> Cloud Run

Cloud Run

Cloud Pub/Sub

Cloud Run

Cloud Run

● Stackdriver Logging○ すべてのログを一元管理○ エラーログからアラートを通知

● Stackdriver Monitoring○ 各リソース状況のダッシュボード

モニタリング

03検討したGCPサービス

検討したGCPサービス - データベース

● Cloud Spanner○ 現状EC-CUBEではサポートしていない

● Cloud SQL○ 1インスタンスを複数サイトで共有すればコス

ト面はクリア○ 共有した場合にサイトの分離が困難

今回のユースケースには合わなかったが、マネージドサービスを使えるなら使うべき

検討したGCPサービス - その他

● Cloud Memorystore for Redis○ 上位プランの提供にあたって現在検討中

● Stackdriver Monitoring 稼働時間チェック○ サイト数が増えるとGCPプロジェクトの上限数に当

たる○ ZabbixをGKEにデプロイして代用○ Zabbixの稼働時間チェックとアラートには利用

本番運用して1年

● 小さな組織で運用できた● 大規模な障害もありました● EC-CUBE本体へのフィードバックサイクルの短縮● OSSパッケージのリリースプロセス短縮● 今後の新規サービス展開が広がった

ここまで

● サービスと組織の拡大● より安定したサービス提供へ● 新規サービスの開発● 既存サービスのマイクロサービス化

これから

ご清聴ありがとうございました。

top related