Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プロダクショングレードストレージシステム on Kubernetes
Search
Satoru Takeuchi
PRO
September 17, 2021
Technology
3
4.2k
プロダクショングレードストレージシステム on Kubernetes
以下イベントの発表スライドです。
https://cndata.connpass.com/event/219690/
Satoru Takeuchi
PRO
September 17, 2021
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
RubyでKubernetesプログラミング
sat
PRO
4
170
プロセスの生成 exec編
sat
PRO
1
35
プロセスの生成 fork&exec編
sat
PRO
0
28
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
28
プロセスの生成 fork編
sat
PRO
0
32
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
46
ハイテク休憩
sat
PRO
2
200
利きプロセススケジューラ
sat
PRO
5
3.3k
俺とVSCode Python Debugger Extension
sat
PRO
1
210
Other Decks in Technology
See All in Technology
信頼性を支えるテレメトリーパイプラインの構築 / Building Telemetry Pipeline with OpenTelemetry
ymotongpoo
9
3.9k
サービスローンチを成功させろ! 〜SREが教える30日間の攻略ガイド〜
mmmatsuda
2
3.4k
アクセシブルなマークアップの上に成り立つユーザーファーストなドロップダウンメニューの実装 / 20250127_cloudsign_User1st_FE
bengo4com
1
1.1k
トラブルシュートを楽しもう (wakamonog meeting 15)
recuraki
4
1k
いま現場PMのあなたが、 経営と向き合うPMになるために 必要なこと、腹をくくること
hiro93n
9
8.9k
コスト削減と精度維持を両立!類似画像検索システムの内製化成功事例
shutotakahashi
0
320
東京Ruby会議12 Ruby と Rust と私 / Tokyo RubyKaigi 12 Ruby, Rust and me
eagletmt
3
1.4k
現実的なCompose化戦略 ~既存リスト画面の置き換え~
sansantech
PRO
0
120
TypeScriptでモジュラーモノリスやってみた
diggymo
0
100
企業テックブログにおける執筆ネタの考え方・見つけ方・広げ方 / How to Think of, Find, and Expand Writing Topics for Corporate Tech Blogs
honyanya
0
580
Microsoft Ignite 2024 最新情報!Microsoft 365 Agents SDK 概要 / Microsoft Ignite 2024 latest news Microsoft 365 Agents SDK overview
karamem0
0
160
フラット構造をやめた理由と、EM / Tech Leadを作った理由
baroqueworksdev
0
380
Featured
See All Featured
BBQ
matthewcrist
85
9.4k
Designing for humans not robots
tammielis
250
25k
Six Lessons from altMBA
skipperchong
27
3.6k
A designer walks into a library…
pauljervisheath
205
24k
Adopting Sorbet at Scale
ufuk
74
9.2k
What's in a price? How to price your products and services
michaelherold
244
12k
Optimizing for Happiness
mojombo
376
70k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Why Our Code Smells
bkeepers
PRO
335
57k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Transcript
プロダクショングレード ストレージシステム on Kubernetes Sep. 17th, 2021 サイボウズ ストレージチーム sat
1
はじめに ▌サイボウズのインフラ基盤はKubernetesクラスタ ▌ストレージ基盤もK8sクラスタ上に構築 ▌今日はこのストレージ基盤について解説 2
もくじ ▌前提知識 ▌アーキテクチャ ▌使い方と管理方法 ▌課題と今後 3
前提知識 4
必要なストレージの種類 ▌高速ローカルブロックストレージ ⚫顧客データを扱うMySQLなど ▌中速&スケーラブルなブロックストレージ ⚫ファイルシステムを前提としたアプリのデータやメトリクスなど ▌大容量&スケーラブルなオブジェクトストレージ ⚫ログや添付ファイルなど 5
その他要件 ▌可能な限りオペレーションを自動化 ⚫宣言的管理 ▌ラック障害耐性 ⚫1ラック失っても運用継続 ⚫2ラックデータロスト無し ▌Bit-rot耐性 6
ストレージに対する考え方 ▌要件 ⚫ユーザデータの喪失は是が非でも避けたい ⚫障害時に即応したい ▌商用製品は後者が難しい ⚫ソースを見られないand/or手を入れられない ▌OSSの自前運用が有力な選択肢 7
選定結果 ▌高速ローカルブロックストレージ ⚫自作 ▌スケーラブルなストレージ ⚫OSSの分散ストレージCephを利用 ⚫OSSのCeph管理ソフトウェアRookを利用 8
高速ローカルブロックストレージ ▌以下要件を満たす既存ソフトが無かった ⚫ローカルストレージ用 ⚫Dynamic volume provisioning ⚫Topology/capacity aware scheduling ⚫
空き容量がもっとも多いノードにPVCを使うPodをスケジュール ▌TopoLVMというCSIドライバを自作 ▌可用性やデータの冗長性などはアプリが担保 9
スケーラブルなストレージ ▌Cephが全ての要件を満たしていた ⚫ブロックストレージとオブジェクトストレージを提供 ⚫データのレプリケーション可能 ⚫ラック障害耐性設定可能、bit-rot耐性あり ▌その他選定要件 ⚫ペタバイトスケールまで運用実績あり ⚫20年以上にわたって企業のバックアップを受けてアクティブに開発さ れてきた 10
Cephのアーキテクチャ(簡略版) 11 アプリ ストレージプール Ceph node disk disk node disk
disk node disk disk … ブロックデバイス オブジェクト ブロックデバイス ブロックデバイス オブジェクト オブジェクトストレージ アプリ アプリ OSD OSD OSD OSD OSD OSD
Cephの管理方法 ▌課題: 生のCephは使いにくい ⚫複雑なコマンド体系 ⚫ドキュメントが充実していない ▌Rookを使って管理することにした ⚫Kubernetes上で動作する ⚫CNCF公式プロジェクト ⚫大手企業がバックアップして活発に開発されている ⚫「K8s上でCephならRook」というCephコミュニティの方針あり
12
Rook Rookのアーキテクチャ(簡略版) 13 アプリ ストレージプール Ceph node disk disk node
disk disk node disk disk … ブロックデバイス オブジェクト ブロックデバイス ブロックデバイス オブジェクト オブジェクトストレージ アプリ アプリ OSD OSD OSD OSD OSD OSD PV PV PV PV PV PV PV PVC Object Bucket Claim(OBC) Object Bucket(OB) PV PV PVC CSIドライバが管理
使い方と管理方法 14
ブロックストレージの使い方 ▌Storage classを指定してPVCを作るだけ ⚫ローカルブロックストレージ: topolvm-provisioner ⚫Cephブロックストレージ: ceph-block ▌自動拡張もサポート ⚫PVC autoresizerという自社OSSを使う
15
Cephのオブジェクトストレージの使い方 ▌Bucketを使うためのCustomResourceを書く 16 kind: ObjectBucketClaim metadata: name: test-object-bucket namespace: default
spec: generateBucketName: test-object-bucket storageClassName: ceph-bucket kind: Pod metadata: name: app-pod spec: containers: - name: foo envFrom: - configMapRef: name: test-object-bucket - secretRef: name: test-object-bucket • 今後はK8sの公式Container Object Storage Interfaceを使うように変更される見込み • COSIはK8s v1.23でのalphaサポートを目標に開発中 Bucketにアクセスする ための情報が入っている
インフラ基盤のハードウェア構成 ▌2種のサーバを詰めたラックを並べる 17 rack CS SS SS rack CS CS
SS rack CS CS SS SS … CS SS • Computing Server • 全サービスが使う • ストレージはNVMe SSD • Storage Server • Ceph専用 • ストレージはHDD CS SS
ストレージシステムの構成 18 Rook/Cephクラスタ Rook/Cephクラスタ オブジェクトストレージ ブロックストレージ HDD SS CS SSD
HDD HDD SSD NVMe SSD LogicalVolume LogicalVolume LogicalVolume LogicalVolume LogicalVolume LogicalVolume TopoLVMが管理 OB PV PV PV アプリ アプリ アプリ PVC PVC OBC PV VolumeGroup
▌CephCluster Custom Resource(CR)を書く 19 Rook/Cephクラスタの管理 storage: … count: 3 volumeClaimTemplates:
- spec: resources: requests: storage: 1Ti storageClassName: <storageclass-name> OSD用PVCのテンプレート OSDの数 • Cluster on HDD • local-storage storage classを指定 • クラスタ on NVMe SSD • topolvm-provisioner storage classを指定
▌管理者がcountフィールドを増やすだけ ▌後はRookなどが勝手にやってくれる 1. RookがOSD用PVCを作る ⚫ クラスタ on HDD: 対応するPVがすでに存在している ⚫
クラスタ on NVMe: 対応するPVはTopoLVMが動的に作成 2. RookがPV上にOSDのデータ構造を作る 3. RookがOSDをクラスタに組み込む 20 Cephクラスタの拡張
現状と今後 21
日常業務 ▌ストレージシステム開発 1. 試験用DCで検証、開発 2. 開発DC及び本番DCへのdeploy 3. 運用 ▌開発DCでは週に一回の全台再起動 ▌CephやRookに問題があれば可能な限りupstreamで直す
22
現状 ▌単一サイト運用のための基本的な機能検証は完了 ▌制限 ⚫性能は気にしないものとする ⚫可用性は保証しない 23
使用感 ▌ユーザとして使うのは楽 ⚫他のstorage classと変わらない ▌管理は基本的には楽 ⚫トラブル発生時もログやメトリクスを保存してある ▌Cephクラスタで障害が起きたときはつらい ⚫運用ノウハウが足りない ⚫Cephの問題なのかハードウェアの問題なのか切り分けに時間がかかる 24
これまでに遭遇した問題(1/5) ▌RookがOSD on LVMをサポートしない ⚫検証時にTopoLVMを使ってOSDを作ろうとしたときに発見 ▌現状 ⚫Upstream Rookを修正して解決 25
これまでに遭遇した問題(2/5) ▌ノードを再起動するとOSDが壊れる ▌全台再起動試験において検出 ▌原因 ⚫コンテナ環境におけるOSD操作の排他制御漏れ ▌現状 ⚫Upstream Rookを修正して解決 26
これまでに遭遇した問題(3/5) ▌ノードを再起動するとOSDが壊れる(前述のものとは別) ▌全台再起動試験において検出 ▌原因 ⚫ページキャッシュに不整合がある ⚫根本原因は特定できていない ▌現状 ⚫ パラメタ設定で回避中 ⚫修正はまだ無い
27
これまでに遭遇した問題(4/5) ▌オブジェクトストレージのindex再作成関連が終わらない ⚫運用中に検出 ▌原因 1. サービス用Pod上でindex再作成処理がはじまる 2. index再作成中はlivenessProbeに応答しないことがある 3. Podが殺される。1に戻る
▌現状 ⚫Upstream Rookのissueで対処方法議論中 28
これまでに遭遇した問題(5/5) ▌複数台同時にノードを再起動すると一部データがロスト ▌全台再起動試験中に検出 ▌現状 ⚫原因不明 ⚫Upstream Cephにissue発行済 ⚫再現試験予定。結果はissueにfeedback 29
今後について ▌やること ⚫未解決の問題を片づける ⚫性能チューニング&可用性を高める ⚫引き続き運用/開発技術の強化 ⚫機能追加 ⚫ リモートレプリケーション ⚫ バックアップ/リストア
▌一緒に働いてくれるかたを募集中! 30
31 おわり