Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
chaoskube — ランダムなKubernetesポッドを定期的に終了させ、任意のポッド障害時のシステム挙動をテストします。namespace、ラベル、アノテーション、スケジュールフィルターに対応し、制御されたカオス実験が可能です。 | Kitploit
ツール/GitHubGitHub/linki/chaoskube
カオスエンジニアリングカオスエンジニアリング 第9位
GitHublinki/chaoskube

chaoskube

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

リポジトリを見る
1.9k127682ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

chaoskube

GitHub release go-doc

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

chaoskube

なぜ

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

例

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

$ 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 チャートをインストールしてください。

$ 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 の検索範囲を制限できます。

$ 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 を名前空間セレクターでフィルタリングすることもできます。

$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter       namespaces="default,staging,testing"

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

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

$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter       namespaceLabels="!integration"

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

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

$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

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

$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter       kinds="DaemonSet"

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

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

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

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

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

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

$ 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 を実行できます:

$ 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 というアノテーションを付けることで、個々のデプロイメントを選択的にカオスモードにオプトインできます。

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 を除外できます。

$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

カオスを制限する

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

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

$ 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 を選ぶのがおそらく最善です。間違ったタイムゾーンを選ぶと、特定の曜日の意味がサーバーとの間で数時間ずれてしまいます。

ツールをダウンロード