Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/linki/chaoskube
カオスエンジニアリング
GitHublinki/chaoskube

chaoskube

ランダムなKubernetesポッドを定期的に終了させ、任意のポッド障害時のシステム挙動をテストします。namespace、ラベル、アノテーション、スケジュールフィルターに対応し、制御されたカオス実験が可能です。

リポジトリを見る
1.9k12622日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

chaoskube

GitHub release go-doc

chaoskube は Kubernetes クラスター内のランダムな Pod を定期的に停止します。

chaoskube

なぜ

システムが任意の Pod 障害下でどのように動作するかをテストします。

例

実行すると、デフォルトでは10分ごとに任意の名前空間の Pod を1つ停止します。

root@kitploit:~
$ chaoskube
INFO[0000] starting up              dryRun=true interval=10m0s version=v0.21.0
INFO[0000] connecting to cluster    master="https://kube.you.me" serverVersion=v1.10.5+coreos.0
INFO[0000] setting pod filter       annotations= labels= minimumAge=0s namespaces=
INFO[0000] setting quiet times      daysOfYear="[]" timesOfDay="[]" weekdays="[]"
INFO[0000] setting timezone         location=UTC name=UTC offset=0
INFO[0001] terminating pod          name=kube-dns-v20-6ikos namespace=kube-system
INFO[0601] terminating pod          name=nginx-701339712-u4fr3 namespace=chaoskube
INFO[1201] terminating pod          name=kube-proxy-gke-earthcoin-pool-3-5ee87f80-n72s namespace=kube-system
INFO[1802] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[2402] terminating pod          name=heapster-v1.2.0-1107848163-bhtcw namespace=kube-system
INFO[3003] terminating pod          name=l7-default-backend-v1.0-o2hc9 namespace=kube-system
INFO[3603] terminating pod          name=heapster-v1.2.0-1107848163-jlfcd namespace=kube-system
INFO[4203] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[4804] terminating pod          name=nginx-701339712-51nt8 namespace=chaoskube
...

chaoskube は、対象 Pod を名前空間、ラベル、アノテーション、および経過時間でフィルタリングしたり、特定の曜日、時間帯、年間の日付をカオスから除外したりできます。

使い方

Helm

chaoskube は Helm でインストールできます。Helm のクイックスタートガイドに従った後、chaoskube チャートをインストールしてください。

root@kitploit:~
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace

設定方法やその他の便利な Helm チャートについては、kubeapps.com の chaoskube を参照してください。

素のマニフェスト

サンプルマニフェスト を参照してください。提供されている ClusterRole を使用して、chaoskube に適切な 権限を必ず付与してください。

設定

デフォルトでは chaoskube は無害で、何も停止しません。対象クラスターを検証したら、--no-dry-run フラグを指定してドライランモードを無効にできます。また、デプロイメントに合わせて、より積極的な間隔やその他のサポートされているフラグを指定することもできます。

Kubernetes クラスター内で実行していて、同じクラスターを対象にしたい場合は、これだけで十分です。

別のクラスターを対象にしたい場合やローカルで実行したい場合は、--master フラグでクラスターを指定するか、--kubeconfig フラグで有効な kubeconfig を指定してください。デフォルトでは、ホームディレクトリの標準的な kubeconfig パスを使用します。つまり、その中で現在のコンテキストとして設定されているものが対象になります。

カオスの量を増減したい場合は、--interval フラグで停止間隔を変更してください。あるいは、chaoskube デプロイメントのレプリカ数を増やすこともできます。

chaoskube はデフォルトで、システム Pod や自身を含む、すべての名前空間の任意の Pod を停止することに注意してください。

chaoskube は、実行中であることを確認するために使用できるシンプルな HTTP エンドポイントを提供します。これは Kubernetes の liveness および readiness プローブに使用できます。デフォルトではポート 8080 でリッスンします。無効にするには、chaoskube に --metrics-address="" を渡してください。

対象のフィルタリング

ただし、ラベル、アノテーション、名前空間のセレクター、Pod 名の包含/除外パターン、および最小経過時間の設定を指定することで、chaoskube の検索範囲を制限できます。

root@kitploit:~
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter       labels="app=mate,chaos,stage!=production"

これにより、ラベル app が mate に設定され、ラベル chaos が何らかの値に設定され、ラベル stage が production に設定されていない、または未設定のすべての Pod が選択されます。

対象 Pod を名前空間セレクターでフィルタリングすることもできます。

root@kitploit:~
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter       namespaces="default,staging,testing"

これにより、default、staging、testing の3つの名前空間の Pod にフィルタリングされます。

名前空間は、名前空間ラベルセレクターによってさらにフィルタリングできます。

root@kitploit:~
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter       namespaceLabels="!integration"

これにより、ラベル integration が付いた名前空間のすべての Pod が除外されます。

対象 Pod は OwnerReference の kind セレクターでフィルタリングできます。

root@kitploit:~
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

これにより、DaemonSet と StatefulSet の Pod が除外されます。

root@kitploit:~
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter       kinds="DaemonSet"

これにより、DaemonSet の Pod のみが含まれます。

注意: include フィルターを使用すると、OwnerReference が定義されていないすべての Pod が自動的に除外されます。

Pod を名前でフィルタリングできます:

root@kitploit:~
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter       excludedPodNames=prod includedPodNames="foo|bar"

これにより、名前に 'foo' または 'bar' を含み、'prod' を 含まない Pod だけが対象になります。

名前空間を除外したり、ラベルやアノテーションのセレクターと組み合わせて使用したりすることもできます。

root@kitploit:~
$ chaoskube \
    --labels 'app=mate,chaos,stage!=production' \
    --annotations '!scheduler.alpha.kubernetes.io/critical-pod' \
    --namespaces '!kube-system,!production'
...
INFO[0000] setting pod filter       annotations="!scheduler.alpha.kubernetes.io/critical-pod" labels="app=mate,chaos,stage!=production" namespaces="!kube-system,!production"

これにより、上記のラベルセレクターの検索範囲がさらに制限され、kube-system と production 名前空間の Pod も除外され、クリティカルとマークされたすべての Pod も無視されます。

アノテーションセレクターを使用して、chaoskube をクラスターアドオンとして実行し、必要に応じて Pod が終了をオプトインできるようにすることもできます。たとえば、次のように chaoskube を実行できます:

root@kitploit:~
$ chaoskube --annotations 'chaos.alpha.kubernetes.io/enabled=true' --debug
...
INFO[0000] setting pod filter       annotations="chaos.alpha.kubernetes.io/enabled=true"
DEBU[0000] found candidates         count=0
DEBU[0000] no victim found

そのアノテーションをすでにどこかで使用していない限り、最初はすべての Pod が無視されます(デバッグモードで候補の数を確認できます)。その後、Pod に chaos.alpha.kubernetes.io/enabled=true というアノテーションを付けることで、個々のデプロイメントを選択的にカオスモードにオプトインできます。

root@kitploit:~
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    metadata:
      annotations:
        chaos.alpha.kubernetes.io/enabled: "true"
    spec:
      ...

--minimum-age フラグを使用すると、最近開始された Pod を除外できます。

root@kitploit:~
$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

カオスを制限する

カオスを導入する時間を、曜日、時間帯、年間の日付、またはそれらすべてを組み合わせて制限できます。

--excluded-weekdays オプションで曜日の略称のカンマ区切りリスト、--excluded-times-of-day オプションで時間帯のカンマ区切りリスト、--excluded-days-of-year オプションで年間の日付のカンマ区切りリストを指定し、それらを解釈する --timezone を指定します。

root@kitploit:~
$ chaoskube \
    --excluded-weekdays=Sat,Sun \
    --excluded-times-of-day=22:00-08:00,11:00-13:00 \
    --excluded-days-of-year=Apr1,Dec24 \
    --timezone=Europe/Berlin
...
INFO[0000] setting quiet times      daysOfYear="[Apr 1 Dec24]" timesOfDay="[22:00-08:00 11:00-13:00]" weekdays="[Saturday Sunday]"
INFO[0000] setting timezone         location=Europe/Berlin name=CET offset=1

UTC または Local を使用するか、(IANA) tz データベース からタイムゾーン名を選択してください。ローカルマシンで chaoskube をテストしている場合は、Local が最も適切です。chaoskube をクラスターにデプロイする場合は、特定のタイムゾーン(たとえば、チームメンバーの大半が住んでいる場所)を指定してデプロイする必要があります。これにより、チームと chaoskube が、特定の曜日がいつ始まりいつ終わるかについて共通の理解を持てるようになります。チームが複数のタイムゾーンにまたがっている場合は、デフォルトでもある UTC を選ぶのがおそらく最善です。間違ったタイムゾーンを選ぶと、特定の曜日の意味がサーバーとの間で数時間ずれてしまいます。

フラグ

関連プロジェクト

Kubernetes クラスターにカオスを発生させることができる他のプロジェクトがいくつかあります。

  • kube-monkey は、Kubernetes 向けの洗練された Pod ベースのカオスモンキーです。毎朝、1日を通して発生させるべき Pod 終了のスケジュールをまとめます。Pod ごとに平均故障間隔 (MTBF) を指定でき、これは chaoskube にはない機能です。また、アプリケーションを構成する Pod のグループを認識して特別に扱うこともできます。たとえば、アプリケーションのすべての Pod を一度に停止できます。kube-mokey は、設定オプションによるグローバルな対象フィルタリングに加え、アノテーションによるカオスへのオプトインを Pod に許可します。個々のアプリは独自の方法でオプトインできます。たとえば、アプリAは毎平日 1 Pod の停止を要求でき、より勇敢なアプリBは Pod の 50% の停止を要求できます。Netflix の ChaosMonkey で使用されている設定ファイルと同様の形式に対応しています。
  • PowerfulSeal は、まさに Kubernetes 環境をかき乱すための強力なツールです。Pod の停止に加えて、クラウド VM を停止したり、Docker デーモンを停止したりすることもできます。何をいつ停止できるかを定義するための設定オプションが多数あります。また、Pod を簡単に停止できるインタラクティブモードもあります。
  • fabric8 のカオスモンキー: fabric8 の Kubernetes プラットフォームにアプリとしてバンドルされているカオスモンキーです。UI からデプロイでき、実行されたアクションをチャットメッセージやデスクトップ通知で報告します。間隔と、対象となる Pod が一致する必要がある Pod 名パターンを設定できます。
  • k8aos: Kubernetes クラスター全体、または名前空間を対象として、一連のランダムな Pod 削除を実行できるインタラクティブなツールです。
  • pod-reaper は、間隔と設定可能なカオス確率に基づいて Pod を停止します。ラベルセレクターと名前空間で対象 Pod を指定できます。しばらくすると正常にシャットダウンする機能があるため、Kubernetes の Job オブジェクトとうまく連携するのに適しているかもしれません。また、設定可能な期間より長く実行されているすべての Pod を停止するように設定することもできます。
  • kubernetes-pod-chaos-monkey: kubectl を数行の bash で使用する、非常にシンプルなランダム Pod キラーです。名前空間と間隔を指定すると、その間隔ごとにその名前空間のランダムな Pod を停止します。初期の とほぼ同じです。

謝辞

このプロジェクトは、何人かの素晴らしいコントリビューターのアイデアと助けがなければ現在の姿にはなっていませんでした:

  • @twildeboer と @klautcomputing に感謝します。営業時間や休日など、特定の時間にカオスを制限するというアイデアを発案し、#54 と #55 でこの機能の最初の実装を提供してくれました。
  • @klautcomputing に感謝します。不足していたパーセンテージ機能を解決する最初の試みと、RBAC 設定ファイルを提供してくれました。
  • @j0sh3rs に感謝します。Helm チャートを最新バージョンに更新してくれました。
  • @klautcomputing、@grosser、@twz123、@hchenxa、@bavarianbidi に感謝します。#31、#40、#58 で Dockerfile とドキュメントを改善してくれました。
  • @bakins に感謝します。#86 で最小経過時間フィルターを追加してくれました。
  • @bakins に感謝します。#94 と #97 でヘルスチェックと Prometheus メトリクスを追加してくれました。

コントリビューション

お気軽に issue を作成するか、プルリクエストを送ってください。

ツールをダウンロード
OptionEnvironmentDescriptionDefault
--intervalCHAOSKUBE_INTERVALPod 停止の間隔10m
--labelsCHAOSKUBE_LABELSPod をフィルタリングするためのラベルセレクター(すべてに一致)
--annotationsCHAOSKUBE_ANNOTATIONSPod をフィルタリングするためのアノテーションセレクター(すべてに一致)
--kindsCHAOSKUBE_KINDSPod をフィルタリングするための Owner の kind セレクター(すべての kind)
--namespacesCHAOSKUBE_NAMESPACESPod をフィルタリングするための名前空間セレクター(すべての名前空間)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELS名前空間とその Pod をフィルタリングするためのラベルセレクター(すべての名前空間)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMES含める Pod 名の正規表現パターン(すべて含む)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMES除外する Pod 名の正規表現パターン(除外なし)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYSカオスを停止する曜日(例: "Sat,Sun")(除外する曜日なし)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAYカオスを停止する時間帯(例: "22:00-08:00")(除外する時間帯なし)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEARカオスを停止する年間の日付(例: "Apr1,Dec24")(除外する日付なし)
--timezoneCHAOSKUBE_TIMEZONEtz データベースのタイムゾーン(例: "America/New_York", "UTC", "Local")(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEchaoskube が終了するまでの最大実行時間-1s (無期限)
--max-killCHAOSKUBE_MAX_KILL1 間隔あたりに終了する Pod の最大数を指定します1
--minimum-ageCHAOSKUBE_MINIMUM_AGEPod をフィルタリングするための最小経過時間0s (すべての Pod に一致)
--dry-runCHAOSKUBE_DRY_RUNPod を停止せず、実行されていたであろう操作をログに記録するだけtrue
--log-formatCHAOSKUBE_LOG_FORMATログメッセージの形式を指定します。オプションは text と jsontext
--log-callerCHAOSKUBE_LOG_CALLERログメッセージに呼び出し元の関数名と場所を含めるfalse
--slack-webhookCHAOSKUBE_SLACK_WEBHOOK通知用の Slack ウェブフックのアドレスdisabled
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPEKubernetes API 呼び出しを指定された名前空間に限定する(すべての名前空間)
chaoskube
  • kubeinvaders は、Kubernetes 向けのゲーム化されたカオスエンジニアリングツールです。スペースインベーダーのようなものですが、エイリアンは Pod またはワーカーノードです。