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
Chaos Engineering with Chaos Mesh
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
oracle4engineer
PRO
July 20, 2022
Technology
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Chaos Engineering with Chaos Mesh
Chaos Night #1 - カオスエンジニアリングの夕べ
で使用した資料です。
oracle4engineer
PRO
July 20, 2022
More Decks by oracle4engineer
See All by oracle4engineer
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
960
もうプロンプトは書かない!? ループエンジニアリング入門
oracle4engineer
PRO
1
290
[ OracleTechnologyNight#102]SQL性能改善の武器としてのパラレル実行詳細
oracle4engineer
PRO
1
160
OracleTechnologyNight101_Oracle_Backup_Recovery_Strategy_from_REDO_UNDO
oracle4engineer
PRO
1
500
Oracle Cloud Infrastructure:2026年7月度サービス・アップデート
oracle4engineer
PRO
1
710
Lakehouseの要!Open Table Format深掘り(OCHaCafe Season 11 #6)
oracle4engineer
PRO
2
150
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
[JPOUG Tech Talk Night #16]1歩踏み込むSQLの結合方法
oracle4engineer
PRO
4
350
『モデル + ハーネス』で読み解く AIエージェント入門
oracle4engineer
PRO
2
380
Other Decks in Technology
See All in Technology
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
140
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
internal/testlog で遊ぼう
rokuosan
0
330
atproto spaces概要
yamarten
0
110
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
86k
Windows の互換機能 - 古いプログラムはなぜ動作できるのか
murachiakira
PRO
0
130
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
480
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
0
170
dbt と Snowflake と tag
kevinrobot34
2
290
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
380
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
130
全社に広がるMCPサーバーを、 どう安全に管理するか MCPass開発の舞台裏
mtpooh
3
180
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
HDC tutorial
michielstock
2
820
Site-Speed That Sticks
csswizardry
13
1.5k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
220
Mobile First: as difficult as doing things right
swwweet
225
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Code Review Best Practice
trishagee
74
20k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Transcript
Chaos Engineering w/ Chaos Mesh Chaos Night #1 Shuhei Kawamura
Cloud Solution Engineer Solutions Architect, Oracle Corporation Japan July 20, 2022
Copyright © 2022, Oracle and/or its affiliates 2 • 日本オラクル株式会社
• ソリューション・アーキテクト本部 • OCHaCafe メンバー • 担当領域 • Cloud Native, App Dev • Data Platform(Spark周り) • AI Services • Search Service with OpenSearch • (趣味) 認証・認可関連 • 趣味 • サウナ、料理、音楽、スノーボード 川村 修平 (Shuhei Kawamura) @shukawam Twitter/GitHub/Qiita
Copyright © 2022, Oracle and/or its affiliates 3 • Cloud
Native な環境(Kubernetes)用に設計されたカオスエンジニアリングプラットフォーム • https://chaos-mesh.org/ • 最新版は、v2.2.2 (※ 2022/07 現在) • Kubernertes v1.15 ~ 1.23 が動作対象 • https://chaos-mesh.org/docs/supported-releases/#how-we-determine-supported-kubernetes-versions • ユーザーフレンドリーな UI を提供 • 実験の作成や進行状況のモニター機能 • 豊富な実験タイプを CRD(Custom Resource Definitions) として提供 • Tool Integration • Grafana, GitHub Actions • 安全に実験を行うための機能をサポート • Dashboard に対する Kubernetes の RBAC 機能を用いた権限制御(Manager/Viewer) • 実験の対象範囲を制御する namespace でのフィルタリング Chaos Mesh Open Source Cloud-Native Chaos Engineering platform $ kubectl annotate ns $NAMESPACE chaos-mesh.org/inject=enabled
Copyright © 2022, Oracle and/or its affiliates 4 fault types
description PodChaos Pod の障害をシミュレート(failure, kill, container kill) NetworkChaos Pod 間の Network の障害をシミュレート(partition, loss, delay, duplicate, corrupt, bandwidth) DNSChaos DNS 障害をシミュレート(error, random) HTTPChaos HTTP 通信の障害をシミュレート(abort, delay, replace, patch) StressChaos CPU, RAM の競合をシミュレート IOChaos I/O 障害をシミュレート(latency, fault, modify) TimeChaos システム時間を変更し、summer time やその他時間に関連するイベントへ の適応をシミュレート KernelChaos カーネル障害をシミュレート(メモリ割り当ての例外、etc.) JVMChaos JVM の障害をシミュレート(exception, gc, latency, stress, etc.) AWSChaos AWS の障害をシミュレート(EC2 stop/restart, detach volume) GCPChaos GCP の障害をシミュレート(GCE stop/restart, disk loss) AzureChaos Azure の障害をシミュレート(VM stop/restart, disk detach) Fault Injection 豊富な種類の障害タイプを CRD(Custom Resource Definitions) として提供
Copyright © 2022, Oracle and/or its affiliates 5 • 実験の作成方法
• Web UI(Chaos Dashboard) から作成する • 簡易的な検証用途 • Web UI から入力した情報をもとに実験の定義(Manifest)を取得する • Manifest を書いて kubectl apply する • おすすめはこちら • 実行方法 • 一つの実験を一回だけ実行する • 一つの実験をスケジュール実行する • 一つ以上の実験をワークフローとして実行する 実験の作成方法と実行方法
Copyright © 2022, Oracle and/or its affiliates 6 実行方法 #1
一つの実験を一回だけ実行する kind: PodChaos # fault types(PodChaos, NetworkChaos, IOChaos, etc.) apiVersion: chaos-mesh.org/v1alpha1 metadata: namespace: chaos-testing name: pod-kill spec: selector: # 実験対象の絞り込み namespaces: - k8s-helidon-app labelSelectors: app: k8s-helidon-app mode: one # 実行モード(one/all/fixed/fixed-percent/random-max-percent) action: pod-kill # action gracePeriod: 0
Copyright © 2022, Oracle and/or its affiliates 7 実行方法 #2
一つの実験をスケジュール実行する kind: Schedule # Schedule 実行 apiVersion: chaos-mesh.org/v1alpha1 metadata: namespace: chaos-testing name: pod-kill-scheduled spec: schedule: 30 19 * * * # cron concurrencyPolicy: Forbid # 実験の同時実行許可(Allow/Forbid) historyLimit: 1 # 履歴の保持件数 type: PodChaos # fault types(PodChaos, NetworkChaos, IOChaos, etc.) podChaos: selector: # 実験対象の Pod を絞り込み namespaces: - k8s-helidon-app labelSelectors: app: k8s-helidon-app mode: one action: pod-kill gracePeriod: 0
Copyright © 2022, Oracle and/or its affiliates 8 Chaos Mesh
では、カオス実験のワークフローを作成するために、以下の機能を持つ 実行方法 #3 一つ以上の実験をワークフローとして実行する features description 直列(Serial)実行 複数の実験、タスクを順番に実行する 並列(Parallel)実行 複数の実験、タスクを並列に実行する(複雑な条件のシミュレートに有効) Custom Task 任意のコンテナイメージを用いて独自定義の処理を実行する。実行結果による条件分岐も可能 Suspend 待ち時間を発生させる Status Check ステータスの確認を行うタスク(HTTPのリクエストを発行し、ステータスコードを確認する) e.g. 定常状態の測定、イベントの注入、実験中の状態の測定を行い、完了後の通知を自動的に行うワークフロー Task Task HTTP Request Incoming Webhook PodChaos
Copyright © 2022, Oracle and/or its affiliates 9 実行方法 #3
一つ以上の実験をワークフローとして実行する apiVersion: chaos-mesh.org/v1alpha1 kind: Workflow # ワークフロー実行 metadata: name: pod-kill-workflow namespace: chaos-testing spec: entry: entry # ワークフローのエントリーポイント templates: - name: entry templateType: Serial # Serial 実行 deadline: 3m children: # 上から順番に実行される - k6-load-test-in-steady-state - event-injection
Copyright © 2022, Oracle and/or its affiliates 10 実行方法 #3
一つ以上の実験をワークフローとして実行する - name: k6-load-test-in-steady-state templateType: Task task: container: name: k6-load-test image: grafana/k6 command: # K6 を用いて、疑似トラフィックを再現 - k6 - run - "--out" - "influxdb=http://influxdb.shukawam.com/chaosjp" - "--vus" - "10" - "--duration" - "30s" - "script.js" volumeMounts: - mountPath: /home/k6 name: k6-script volumes: - name: k6-script configMap: name: k6-configmap import http from "k6/http"; import { check, sleep } from "k6"; export default function () { const res = http.get("http://helidon.shukawam.com/greet"); check(res, { "is status code 200": (r) => r.status === 200, }); sleep(1); }
Copyright © 2022, Oracle and/or its affiliates 11 実行方法 #3
一つ以上の実験をワークフローとして実行する - name: event-injection templateType: Parallel # Parallel 実行 deadline: 2m children: # 並列に実行される(Pod を kill しながら疑似トラフィックを流す) - pod-kill-random - k6-load-test-in-chaos-state - name: pod-kill-random templateType: PodChaos deadline: 1m podChaos: selector: namespaces: - k8s-helidon-app labelSelectors: app: k8s-helidon-app mode: one action: pod-kill
Copyright © 2022, Oracle and/or its affiliates 12 実行方法 #3
一つ以上の実験をワークフローとして実行する - name: k6-load-test-in-chaos-state templateType: Task task: container: name: k6-load-test image: grafana/k6 command: - k6 - run - "--out" - "influxdb=http://influxdb.shukawam.com/chaosjp" - "--vus" - "10" - "--duration" - "30s" - "script.js" volumeMounts: - mountPath: /home/k6 name: k6-script volumes: - name: k6-script configMap: name: k6-configmap import http from "k6/http"; import { check, sleep } from "k6"; export default function () { const res = http.get("http://helidon.shukawam.com/greet"); check(res, { "is status code 200": (r) => r.status === 200, }); sleep(1); }
Copyright © 2022, Oracle and/or its affiliates 13 カオス実験の 4
つのプロセス: 1. 定常状態を定義する • “app: k8s-helidon-app” のラベルが付いたPod がすべて Status: Running な状態で稼働している 2. 仮説を立てる • 任意の Pod を kill しても K8s のセルフヒーリングに より元の状態に戻る 3. 現実世界のイベントを反映する変数を導入する • Chaos Mesh(PodChaos) を用いて、ランダムに Pod を一つ kill してみる 4. 仮説を検証する Demo: Chaos Mesh Load Balancer OKE Inject PodChaos … $ kubectl get pods -w NAME READY STATUS RESTARTS AGE k8s-helidon-app-777b65c7-85n2v 1/1 Running 0 39m k8s-helidon-app-777b65c7-tr78g 1/1 Running 0 39m k8s-helidon-app-777b65c7-v64vb 1/1 Running 0 39m k8s-helidon-app-777b65c7-v64vb 1/1 Terminating 0 49m k8s-helidon-app-777b65c7-v64vb 1/1 Terminating 0 49m k8s-helidon-app-777b65c7-fvxlc 0/1 Pending 0 0s k8s-helidon-app-777b65c7-fvxlc 0/1 Pending 0 0s k8s-helidon-app-777b65c7-fvxlc 0/1 ContainerCreating 0 0s k8s-helidon-app-777b65c7-fvxlc 0/1 Running 0 1s k8s-helidon-app-777b65c7-fvxlc 1/1 Running 0 35s
Copyright © 2022, Oracle and/or its affiliates 14 その他の話はこちらから! 参考
https://speakerdeck.com/oracle4engineer/how-to-chaos-engineering
Copyright © 2022, Oracle and/or its affiliates 15 • Chaos
Engineering は、実験なので計画を立てたうえでやってみることが重要 • Chaos Mesh • Open Source Cloud-Native Chaos Engineering platform • リッチな UI、豊富な fault types、様々な Tool Integration、拡張性 • 安全に実験を行う仕組みも複数あり まとめ
Copyright © 2022, Oracle and/or its affiliates 16 • 開発者・エンジニアにお届けするテクニカ
ルな勉強会です • クラウドネイティブな時代に身に着けてお くべきテクノロジーを深掘りしていきます • テーマはオープン/デファクト・スタンダード を基準に選定し、Oracle固有な話題に はならないように、且つ学んだ知識は広く 応用が利くように、配慮しています Season 5 • Kubernetes Operator 超入門 • Kubernetes で並列分散処理 • Kubernetes のセキュリティ • 挑戦 TypeScript • 実験!カオスエンジニアリング • MLOps を始めよう! Season 6 is coming soon!
Copyright © 2022, Oracle and/or its affiliates 17 #OCHaCafe History
Season 1 • コンテナを使った CI/CD • Microservices の運用・管理 • Microservices な Java アプリケーション • Hyperledger Facric なアプリケーション設計入門ガイド • 避けては通れない!認証・認可 • 人にもマシンにもやさしい API のエコシステム Season 2 • これからはじめる!Kubernetes 基礎 • 一体何モノなの?GraalVM 入門 • Serverless な世界をのぞいてみよう! • Cloud Native 時代のモダン Java の世界 • 変幻自在♪ 広がる Kubernetes のエコシステム • Cloud Native × Streaming はじめの一歩 Season 3 • Cloud Native 流のストレージ管理 • サービス間通信のトレンド – gRPC & GraphQL 入門 • Kubernetes クラスタの管理術 • 挑戦!Java で Reactive プログラミング • 明解!NoSQL の勘所 • コンテナ・ランタイムの未来 Season 4 • 生体認証のイロハ • Kubernetes のネットワーク • CI/CD 最新事情 • マイクロサービスの認証・認可と JWT • Kubernetes のオートスケーリング • Observability 再入門 Season 5 • Kubernetes Operator 超入門 • Kubernetes で並列分散処理 • Kubernetes のセキュリティ • 挑戦!TypeScript • 実験!カオスエンジニアリング • MLOps を始めよう! OCHaCafe Premium (Oracle フォーカス spin-off) • Oracle Cloud で考える高可用性アーキテクチャ • クラウド・アプリケーションのパフォーマンス • Oracle Cloud Infrastructure Cloud Native 2021 • マイクロサービスとデータマネジメント • クラウドで実践する Enterprise Java アーカイブサイト >> https://developer.oracle.com/jp/cloud-hangout-cafe/
Thank you Copyright © 2022, Oracle and/or its affiliates 18
None