SlideShare a Scribd company logo
コスト8割減!k8s本番サービス環境の
運用ノウハウ
WESEEK Tech Conference #2
会社概要
株式会社WESEEK
所在地
● 本社:〒169-0051東京都新宿区西早稲田2-20-15高田馬場アクセス10F
● サテライトオフィス:〒874-0838大分県別府市荘園9-1 ルーデンス荘園305
代表者
● 武井 雄紀
2
現在の主な事業
1. 通信大手企業の業務フロー自動化プロジェクト
2. ソーシャルゲームの受託開発
3. 自社発オープンソースプロダクト「GROWI」「GROWI.cloud」の開発
3
GROWIとは
4
快適な情報共有を、全ての人へ
● OSSとして公開している情報共有ツール(ナレッジベース)
● エンジニアに馴染みのあるMarkdown形式で記述可能
● 柔軟な階層構造での情報管理が可能
GROWI.cloudとは
情報共有をもっと身近に、もっと手軽に
● OSSであるGROWIを専門的知識がなくても簡単に運用・管理できる、
法人・個人向けの商用サービス
● エンタープライズプランの導入事例
○ インターネットマルチフィード株式会社様
○ 株式会社エイチーム様
○ 株式会社HIKKY(VR法人HIKKY)様
5
高い技術力を持つ
エンジニアの知見を社外にも還元する
イベントを通じて
新たな発見に繋がる!
イベントを通じてWESEEKを
知っていただく
私たちが開発するサービスのことも
知っていただければ
6
WESEEK Tech Conferenceを開催する目的
質問の受付方法について
● Zoomのチャット機能で発表中随時質問を受け付けます
○ メッセージの送信先設定は「全員」で!
● 発表終了後、順番に質問にお答えいたします(10分程度)
7
ハッシュタグ
【 #WESEEK_tech 】
8
本日の発表
9
コスト8割減!
Kubernetes本番サービス環境の
運用ノウハウ
10
自己紹介
今間 俊介
Syunsuke Komma
11
2013年3月にWESEEKに入社
Kubernetes を中心としたインフラ全般を担当
たまにコード書きます
Cloud Native な OSS 探し
Kubernetes 関連のツール探し
ピアノ、サックス(全然うまくないです)
業務
趣味
@gutalla
コスト8割減!
Kubernetes本番サービス環境の
運用ノウハウ
12
コスト一部8割7割減!
Kubernetes本番サービス環境の
運用ノウハウ
13
アジェンダ
1. GROWI.cloud とは?
2. プリエンプティブルノードとは?
3. GROWI.cloud クラスタ内のノード構成
4. プリエンプティブルノードの罠
5. プリエンプティブルノードの実績値
6. まとめ
14
GROWI.cloud とは?
15
GROWI.cloud とは(先ほどのそのまま)
情報共有をもっと身近に、もっと手軽に
● OSSであるGROWIを専門的知識がなくても簡単に運用・管理できる、
法人・個人向けの商用サービス
● エンタープライズプランの導入事例
○ インターネットマルチフィード株式会社様
○ 株式会社エイチーム様
○ 株式会社HIKKY(VR法人HIKKY)様
16
GROWI.cloud の利用状況(2021/04/14 現在)
● 総 GROWI 数: 1022
○ うち約 20 % が課金プラン利用の GROWI
● GROWI が載っているノード数: 32
○ うちプリエンプティブルノード数は 27 台
17
利用技術(アプリ)
● GROWI.cloud アプリ (https://growi.cloud)
○ https://growi.cloud へアクセスを処理する
○ node.js/MariaDB/Stripe
● GROWI アプリ (https://github.com/weseek/growi)
○ 作成された GROWI そのもの
○ node.js/MongoDB/Elasticsearch
18
利用技術(インフラ)
● Google Cloud Platform
○ Google Kubernetes Engine(GKE)
■ Kubernetes
■ Helm
■ brigade.js
○ Google Cloud Storage
19
なぜ GKE を利用しているか?
20
なぜ GKE を利用しているか?(1/2)
● 利用実績があった
○ GROWI.cloud 開始前の別プロジェクトで利用していた
○ そのプロジェクトでは、アプリ・ミドルを載せるだけのシンプルな構成だった
○ GROWI.cloud では、もっといろいろな機能にチャレンジしている
● master がマネージドである
○ 自前で master を構築・運用するのは大変
○ ただ、これが原因でなかなかトラブルが解消されなかった例も…
■ トラブルの詳細は、5/27 の本イベントで話される予定です!
21
なぜ GKE を利用しているか?(2/2)
● ノードの増減が簡単である
○ GUI/CLI で簡単に増減できる
○ OS、kubernetes node として動かすためのディスクイメージが用意されているため、
そこを考える必要がなくなる
○ オートスケールもできる
● ノードプールという単位で、ノードの構成が変えられる
○ これにより、ノード/プリエンプティブルの有効無効の切り替え、オートスケールの有無
の切り替えなど、ノードの設定を塊ごとに管理できる
○ 1 つの GKE クラスタに様々な設定のノードを混在させることが可能となる
22
何より、Kubernetes が
今時の最先端で楽しそうという点
23
プリエンプティブルノ
ードとは?
24
プリエンプティブルノードとは?
● https://cloud.google.com/compute/docs/instances/preemptible
● Google Compute Engine のノードの 1 種類
● 同インスタンスタイプで、通常のノードと比較して約 70 %割引で使える
● ただし、最大 24 時間しか連続で稼働できない
○ 「最大」なので、24 時間以内の停止ももちろんありうる
● AWS だと EC2 スポットインスタンスが同じ概念の位置する
○ が、利用者同士でインスタンスの売買ができるほど賢くはない
25
プリエンプティブルノードの使いどころ
● 突然停止しても問題ないワークロードが載っているノード
○ バッチ処理
○ 冗長化されているアプリ
○ その他、途中で停止させても問題ないアプリ
● これらのアプリを、プリエンプティブルノード上で稼働させると利用料を抑
えられる
26
GROWI.cloud
クラスタ内の
ノード構成
27
ノード(ノードプール)構成
大きく以下の括りでノードを構成している
1. growi.cloud のシステムコンポーネントが載るノード
○ growi.cloud アプリ
○ GROWI を作るための workflow engine(brigade.js)
○ 管理用アプリ
2. GROWI が載るノード
3. GROWI の DB をバックアップするスクリプトが動くノード
4. 1. のうち特に分離しておきたいコンポーネントが載るノード
○ メモリを極端に必要とするミドルウェアなど
28
ノード(ノードプール)構成
大きく以下の括りでノードを構成している
1. growi.cloud のシステムコンポーネントが載るノード
○ growi.cloud アプリ
○ GROWI を作るための workflow engine(brigade.js)
○ 管理用アプリ
2. GROWI が載るノード
3. GROWI の DB をバックアップするスクリプトが動くノード
4. 1. のうち特に分離しておきたいコンポーネントが載るノード
○ メモリを極端に必要とするミドルウェアなど
29
プリエンプティブルノードを利用している
GROWI を載せる先のノードの振り分け方
Kubernetes 上にある以下の機能を利用して実現している
1. Node Affinity
2. Taint/Toleration
30
Node Affinity
● Kubernetes が Pod をスケジュールする際に、スケジュールされる先のノー
ドを指定する機能
○ Pod 上の設定として記載する
○ ノードはノード名で指定するのではなく、key/value のラベルで設定する
● 具体的な YAML 例(app=growi-app というラベルが指定されているノードに必ずスケジュールする)
※参考: Node上へのPodのスケジューリング
31
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
Taint/Toleration
● Taint
○ 許容(tolerate)できない Pod のスケジュール/実行を禁止する機能
○ Node 側に、key/value/effect を設定する
● Toleration
○ Taint が設定されたノードへ Pod をスケジュールするために、許容する機能
○ Pod 側に設定する
● 具体的な YAML 例
※参考: TaintとToleration
32
tolerations:
- key: app
operator: Equals
value: growi-app
effect: NoExecute
tolerations:
- key: app
operator: Equals
value: growi-app
effect: NoExecute
GROWI 作成時のフロー
(どのようにノードの割り振りが行われるか)
33
GROWI 作成時のフロー
● プラン一覧
○ https://growi.cloud より引用
● 以下のプラン利用時の GROWI 作成
時のフローを説明します
○ フリープラン
■ プリエンプティブルノード利用
○ スタンダードプラン
■ 通常ノード利用
34
フリープラン利用者が
GROWI を作成した場合
35
フリープラン利用者が GROWI を作成する場合
36
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
UI 上で作成
GROWI を作ります
利用者
その他のノード
(通常ノード)
フリープラン利用者が GROWI を作成する場合
37
利用者
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
を使って、マニフェストをデプロイする
フリープラン利用者が GROWI を作成する場合
38
利用者
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
フリープラン利用者が GROWI を作成する場合
39
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
フリープラン利用者が GROWI を作成する場合
40
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● なし
taint:
● なし
フリープラン利用者が GROWI を作成する場合
41
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● なし
taint:
● なし
フリープラン利用者が GROWI を作成する場合
42
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● なし
taint:
● なし
ラベル
非該当
ラベル
該当
ラベル
非該当
フリープラン利用者が GROWI を作成する場合
43
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● なし
taint:
● なし
非該当 非該当
フリープラン利用者が GROWI を作成する場合
44
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● なし
taint:
● なし
非該当 非該当
toleration に
あるので該当
フリープラン利用者が GROWI を作成する場合
45
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
GROWI
GROWI 使える!
利用者
スタンダードプラン利用者が
GROWI を作成した場合
46
を使って、マニフェストをデプロイする
スタンダードプラン利用者が GROWI を作成する場合
47
利用者
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
UI 上で作成
GROWI を作ります
スタンダードプラン利用者が GROWI を作成する場合
48
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
スタンダードプラン利用者が GROWI を作成する場合
49
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
ラベル:
● なし
taint:
● なし
スタンダードプラン利用者が GROWI を作成する場合
50
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
ラベル:
● なし
taint:
● なし
スタンダードプラン利用者が GROWI を作成する場合
51
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
ラベル:
● なし
taint:
● なし
ラベル
非該当
ラベル
非該当
ラベル
該当
スタンダードプラン利用者が GROWI を作成する場合
52
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
ラベル:
● なし
taint:
● なし
ラベル
非該当
ラベル
非該当
スタンダードプラン利用者が GROWI を作成する場合
53
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: DoesNotExist
...
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: growi-app
...
helm が作ったマニフェスト GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
ラベル:
● app=growi-app
taint:
● app=growi-app:NoExecute
ラベル:
● app=growi-app
● cloud.google.com/gke-
preemptible=true
taint:
● app=growi-app:NoExecute
ラベル:
● なし
taint:
● なし
ラベル
非該当
ラベル
非該当
toleration に
あるので該当
54
GROWI ノード
(通常ノード)
GROWI ノード
(プリエンプティブ
ルノード)
その他のノード
(通常ノード)
GROWI 使える!
利用者
スタンダードプラン利用者が GROWI を作成する場合
GROWI
プリエンプティブルノ
ードの罠
55
必ず 24 時間動くとは限らない
(ドキュメントに載ってます、はい…)
56
対策
● 1 度ノードの再起動がかかると、5~10分程度 GROWI がダウンする
● ライト・バリュープランに関しては、プリエンプティブルノードを利用して
いて安価だが、SLO 付き
○ いつ落ちるかわからないノードだと SLO まで稼働率を上げられない…
○ -> GROWI Pod を冗長化して対応した
○ 冗長化した後、稼働率の向上に成功
57
常に在庫があるとは限らない
(1年に1回くらい発生する)
58
対策
● affinity 内の nodeSelectorTerms 内に、在庫が足りなかったときのための
設定を追加しておく
○ nodeSelectorTerms は array で指定でき、OR 判定になる
● プリエンプティブルノードが異常に DOWN したら、人手で適合するラベル
/taint をつけた緊急配備用のノードプールを作成する
○ 新たに作成したノードに GROWI Pod が載る
● プリエンプティブルノードを試しに起動してみて、起動できそうだったら緊
急配備用のノードを drain する
59
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: role
operator: In
values:
- emergency-evacuation
対策
60
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: cloud.google.com/gke-preemptible
operator: Exists
- matchExpressions:
- key: app
operator: In
values:
- growi-app
- key: role
operator: In
values:
- emergency-evacuation
対策
61
通常のスケジュール用
(プリエンプティブル GROWI ノー
ドにスケジュールされる)
緊急のスケジュール用
(緊急配備用の GROWI ノードにス
ケジュールされる)
時々腐ったノードが出てくることがある
(再現性不明)
62
対策
● 効果的な対策は現状できていない
● 再現性不明のため、アラートで長期間 down している GROWI が出てきた
ら、アラート発生時にエンジニアが手動対応している
○ 問題のあるノードを drain して、乗っかっている GROWI を別ノードに移動している
63
プリエンプティブルノ
ードに関する実績値
64
費用比較
65
費用比較
● GROWI プリエンプティブルノード数: 28(2021/04/21 現在)
○ インスタンスタイプ: e2-custom-4-8192
● 通常ノードの場合: USD 2,902.86 per 1 month
● プリエンプティブルノードの場合: USD 870.86 per 1 month
66
費用比較
● GROWI プリエンプティブルノード数: 28(2021/04/21 現在)
○ インスタンスタイプ: e2-custom-4-8192
● 通常ノードの場合: USD 2,902.86 per 1 month
● プリエンプティブルノードの場合: USD 870.86 per 1 month
67
約 70% OFF
費用比較(3年継続割引利用)
● GROWI プリエンプティブルノード数: 28(2021/04/21 現在)
○ インスタンスタイプ: e2-custom-4-8192
● 通常ノードの場合: USD 1,306.29 per 1 month
● プリエンプティブルノードの場合: USD 870.86 per 1 month
68
費用比較(3年継続割引利用)
● GROWI プリエンプティブルノード数: 28(2021/04/21 現在)
○ インスタンスタイプ: e2-custom-4-8192
● 通常ノードの場合: USD 1,306.29 per 1 month
● プリエンプティブルノードの場合: USD 870.86 per 1 month
69
約 33% OFF
費用比較(GROWI.cloud 全体)
● 通常ノード(3年確約利用適用)だけで構成した場合
○ USD 2,303.26 per 1 month
● GROWI プリエンプティブルノードを利用した場合
○ USD 1,867.84 per 1 month
70
費用比較(GROWI.cloud 全体)
● 通常ノード(3年確約利用適用)だけで構成した場合
○ USD 2,303.26 per 1 month
● GROWI プリエンプティブルノードを利用した場合
○ USD 1,867.84 per 1 month
71
約 20% OFF
稼働率
72
実際の稼働率
● 対象期間: 2021/04/14 ~ 2021/04/21
● GROWI.cloud 全体: 99.53%
○ 通常ノード上の GROWI: 99.97%
○ プリエンプティブルノード上で冗長化されている GROWI: 99.93%
○ プリエンプティブルノード上で冗長化されていない GROWI: 99.00%
● 冗長化する意味は非常に大きかった
73
プリエンプティブルノードの実際の再起動回数
● 対象期間: 2021/04/14 ~ 2021/04/21
● プリエンプティブルノード数: 28
● 平均再起動回数: 8.64 回 (7回~12回)
● 稼働時間ワースト3: 00:06:47, 00:08:21, 00:12:56
○ 時々 10 分前後で再起動されちゃう
74
まとめ
75
プリエンプティブルノードの活用方法
● プリエンプティブルノードとは?
○ 最大 24 時間稼働するノード
■ 24 時間以内に再起動することもありうる
○ 以下のような用途向け
■ バッチ処理
■ 冗長化されているアプリ
■ その他、途中で停止させても問題ないアプリ
● GROWI.cloud では以下の用途で活用している
○ バックアップスクリプトを動かすため
○ フリー/ライト/バリュープランの GROWI を動かすため
■ ライト/バリュープランの GROWI については Pod を冗長化することで稼働率が
向上した
76
今後
● GROWI の稼働率向上(案)
○ プリエンプティブルノードでもノード再起動前に意図的に Pod or ノードの再起動を自
動的に実施し、稼働率を向上させる
○ プリエンプティブルノード再起動時にノード上に載っている GROWI の起動タイミング
を自動的にずらす
■ GROWI は起動時に一番 CPU を使うため、同一ノードに乗る GROWI 数を減ら
すことで、起動時間短縮を狙う
● プリエンプティブルノード再起動時の 503 画面でユーザに原因をわかりやす
くする
○ 現状 GROWI.cloud 上の GROWI 詳細画面では出るが、GROWI アクセスだけではわ
からないので、ユーザに不親切な状況
77
質疑応答
78
お知らせ① 採用について
一緒に働く仲間を募集中!
東京の高田馬場オフィス、大分の別府サテライトオフィスにてエンジニアを募集
しております。
中途採用だけではなく、インターンシップも積極的に受け入れています!
詳しい募集要項は、弊社HPの採用ページからご確認ください。
https://weseek.co.jp/recruit.html
79
お知らせ② GROWIについて
GROWIのOSS開発に参加しませんか?
GROWI は、WESEEKが開発を行いMITライセンスで公開している
オープンソースソフトウェアです。
開発を手伝っていただけるエンジニアの方を募集しております。
詳しくはGROWI公式サイトのJOIN USをご覧ください。
https://growi.org/ja/#joinus
80
チーム拡大に迅速に対応できる
管理者向け機能を提供
81
お知らせ③ GROWI.cloudについて
テキストも図表もどんどん書ける
強力な編集機能
充実した機能・サポートで
エンタープライズにも対応
お知らせ③ GROWI.cloudについて
GROWI.cloudについてもっと知りたい!
サービスの詳細につきましては、GROWI.cloud公式サイトをご確認ください。
https://growi.cloud/
また、GROWI.cloudに関するお問い合わせは、GROWI.cloud公式サイトの
CONTACTからお願いいたします。
https://growicloud.atlassian.net/servicedesk/customer/portal/1
82
お知らせ④ 次回のWESEEK Tech Conf
83
イベントへのご参加ありがとうございました。
アンケートへのご協力をお願いいたします。
WESEEK Tech Conference #2

More Related Content

PPTX
ラズパイでデバイスを自作して社内のシンクロ率を上げる【WESEEK Tech Conf #1】
PDF
さくらのIoT Platformを使ってみよう ~OSC浜名湖編~
PDF
さくらのクラウドを使ってみよう
PDF
第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)
PDF
Node-RED x Lazurite 3分で作るIoTシステム
PDF
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
PDF
【Unite Tokyo 2019】開発から運用まで、デベロッパーをサポートするUnity Services
ラズパイでデバイスを自作して社内のシンクロ率を上げる【WESEEK Tech Conf #1】
さくらのIoT Platformを使ってみよう ~OSC浜名湖編~
さくらのクラウドを使ってみよう
第32回「SDNをみんなのものに。OpenDaylight Projectの試みとSDN 2014年への期待。」(2013/12/19 on しすなま!)
Node-RED x Lazurite 3分で作るIoTシステム
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
【Unite Tokyo 2019】開発から運用まで、デベロッパーをサポートするUnity Services

What's hot (12)

PPTX
Node-REDの開発に参加しよう
PDF
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
PDF
「宴」実装時に得られたUnityプログラムノウハウ
PDF
IoT開発のキホン‼〜IoT開発初心者必見~ハードウェアとwebの違いから説明します!by Pluto
PDF
Unity information for new developer
PDF
インフラチームのリモートワーク
PDF
「デモリッションロボッツK.K.」のGenvidインティグレート事例
PDF
UXデザインのすすめ - NTT Tech conference #2
PDF
座談会資料(討議メモ付き) 20170225
PDF
【Unite Tokyo 2019】Unity Monetization SDKでできることと使い方
PDF
八子クラウド座談会資料(当日討議メモ付き) 20180929
PDF
NTT Tech Conference #1 Opening Keynote
Node-REDの開発に参加しよう
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
「宴」実装時に得られたUnityプログラムノウハウ
IoT開発のキホン‼〜IoT開発初心者必見~ハードウェアとwebの違いから説明します!by Pluto
Unity information for new developer
インフラチームのリモートワーク
「デモリッションロボッツK.K.」のGenvidインティグレート事例
UXデザインのすすめ - NTT Tech conference #2
座談会資料(討議メモ付き) 20170225
【Unite Tokyo 2019】Unity Monetization SDKでできることと使い方
八子クラウド座談会資料(当日討議メモ付き) 20180929
NTT Tech Conference #1 Opening Keynote
Ad

Similar to コスト8割減!k8s本番サービス環境の運用ノウハウ【WESEEK Tech Conf #2】 (20)

PPTX
Rails on GKEで運用するWebアプリケーションの紹介
PDF
AWS Black Belt Online Seminar 2017 Docker on AWS
PPTX
2019年度 CaaS ワークショップ @ NTTコム
PPTX
SaaS運用での大障害の思い出と対策の共有(中噴火編)【WESEEK Tech Conf #4】
PPTX
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
PDF
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
PPTX
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
PPTX
SaaS運用での大障害の思い出と対策の共有(大噴火編)【WESEEK Tech Conf #6】
PDF
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
PDF
DEV-015_実践! App Service 徹底活用 ~一貫したビジネスロジックの実現~
PDF
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
PPTX
OCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステム
PDF
先進的なアプリの短期開発を実現する 「IBM Bluemix Garage Method」と 「Open Toolchains」
PPT
クラウド時代の OSS とプロプライエタリ製品の共存と競合
PDF
Building Scalable Application on the Cloud
PDF
パフォーマンス計測Ciサービスを作って得た知見を共有したい
PDF
[Cloud OnAir] Anthos で実現する ハイブリッドクラウド 〜 Cloud Service Mesh 編 〜 2019年9月5日 放送
PDF
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
PDF
コンテナ時代にインフラエンジニアは何をするのか
PDF
[GKE & Spanner 勉強会] GKE 入門
Rails on GKEで運用するWebアプリケーションの紹介
AWS Black Belt Online Seminar 2017 Docker on AWS
2019年度 CaaS ワークショップ @ NTTコム
SaaS運用での大障害の思い出と対策の共有(中噴火編)【WESEEK Tech Conf #4】
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
クラウド時代のものづくり(分散アーキテクチャ時代におけるWebシステムの開発と運用) #seccamp
激白!GROWI.cloudの可用性向上の取り組み【WESEEK Tech Conf #16】
SaaS運用での大障害の思い出と対策の共有(大噴火編)【WESEEK Tech Conf #6】
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
DEV-015_実践! App Service 徹底活用 ~一貫したビジネスロジックの実現~
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
OCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステム
先進的なアプリの短期開発を実現する 「IBM Bluemix Garage Method」と 「Open Toolchains」
クラウド時代の OSS とプロプライエタリ製品の共存と競合
Building Scalable Application on the Cloud
パフォーマンス計測Ciサービスを作って得た知見を共有したい
[Cloud OnAir] Anthos で実現する ハイブリッドクラウド 〜 Cloud Service Mesh 編 〜 2019年9月5日 放送
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
コンテナ時代にインフラエンジニアは何をするのか
[GKE & Spanner 勉強会] GKE 入門
Ad

More from WESEEKWESEEK (12)

PPTX
GROWI Users Meetup #2
PPTX
Stripeを使った簡単なサブスク型課金サービスの作り方【WESEEK Tech Conf #15】
PPTX
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
PPTX
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert1)
PPTX
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
PPTX
React でフォームをスマートに実装する【weseek tech conf #11】
PPTX
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
PDF
SVG今昔物語『画像ファイル、なんでもよくないですか?』【WESEEK Tech Conf #9】
PPTX
企業を超えたアジャイル+Railsを利用した開発の成功事例【WESEEK Tech Conf #8】
PPTX
実践Node.jsパフォーマンスアップ~Stream編~【WESEEK Tech Conf #7】
PDF
普遍的そして実践的! ノンデザイナーのためのデザイン原論 【WESEEK Tech Conf #5】
PPTX
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
GROWI Users Meetup #2
Stripeを使った簡単なサブスク型課金サービスの作り方【WESEEK Tech Conf #15】
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert1)
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
React でフォームをスマートに実装する【weseek tech conf #11】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
SVG今昔物語『画像ファイル、なんでもよくないですか?』【WESEEK Tech Conf #9】
企業を超えたアジャイル+Railsを利用した開発の成功事例【WESEEK Tech Conf #8】
実践Node.jsパフォーマンスアップ~Stream編~【WESEEK Tech Conf #7】
普遍的そして実践的! ノンデザイナーのためのデザイン原論 【WESEEK Tech Conf #5】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】

コスト8割減!k8s本番サービス環境の運用ノウハウ【WESEEK Tech Conf #2】

Editor's Notes

  • #85: イベントは以上になります。本日はご参加ありがとうございました!参加者の皆様にアンケートのURLを送付させていただきましたので、イベントの感想などぜひご回答頂けますと幸いです。