Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
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パッケージのリリースプロセス短縮● 今後の新規サービス展開が広がった
ここまで
● サービスと組織の拡大● より安定したサービス提供へ● 新規サービスの開発● 既存サービスのマイクロサービス化
これから
ご清聴ありがとうございました。