---
title: "Chaos Meshでカオスエンジニアリング その1 | grasys blog"
url: "https://blog.grasys.io/post/izumi/chaosengineering-with-chaosmesh/"
description: "こんにちは、エンジニアのいずみです。 Chaos Meshでカオスエンジニアリング その1です。 その1はGoogleCloud上へデプロイして動かしてみよう編です。 Chaos Meshについて Choas Meshとは Chaos MeshはKubernetesに様々な障害のシミュレーションを行い、障害シナリオを…"
---

# Chaos Meshでカオスエンジニアリング その1

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[izumi](/authors/izumi/)
-   公開日：2025年7月9日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Google Cloud](/tags/google-cloud/)[#GKE](/tags/gke/)[#カオスエンジニアリング](/tags/カオスエンジニアリング/)

![Chaos Meshでカオスエンジニアリング その1](/_astro/hero.B4ned3ju_Z1d5x49.webp)

こんにちは、エンジニアのいずみです。

Chaos Meshでカオスエンジニアリング その1です。  
その1はGoogleCloud上へデプロイして動かしてみよう編です。

## Chaos Meshについて

### Choas Meshとは

[Chaos Mesh](https://chaos-mesh.org/)はKubernetesに様々な障害のシミュレーションを行い、障害シナリオをオーケストレーションすることができ、開発、テスト、本番環境など様々な環境で現実に起こり得る様々な障害を手軽にシミュレーションして、システムの問題を発見することができます。

具体的なできることを公式ドキュメントから抜粋すると以下になります。

-   基本的なリソース障害:
    
    -   PodChaos : Podの再起動、Podの永続的な使用不可状態、特定のPod内の特定のコンテナ障害などのPod障害。
        
    -   NetworkChaos : ネットワーク遅延、パケット損失、パケット障害、ネットワーク パーティションなどのネットワーク障害。
        
    -   DNSChaos : DNSドメイン名の解析失敗や間違ったIPアドレスの返送などのDNS障害。
        
    -   HTTPChaos : HTTP通信遅延などのHTTP通信障害。
        
    -   StressChaos : CPU、メモリの負荷。
        
    -   IOChaos : I/O遅延、読み取りおよび書き込み障害など、アプリケーション ファイルのI/O障害。
        
    -   TimeChaos : タイムジャンプ例外。
        
    -   KernelChaos : アプリケーション メモリ割り当ての例外などのカーネル障害。
        
-   プラットフォーム障害:
    
    -   AWSChaos : AWSノードの再起動などのAWSプラットフォームの障害。
        
    -   GCPChaos : GCPノードの再起動などのGCPプラットフォームの障害。
        
-   アプリケーション障害:
    
    -   JVMChaos : 関数呼び出しの遅延などのJVMアプリケーションの障害。

## Chaos Meshの構築

### GKEクラスタの作成

Chaos Meshをデプロイするクラスタを作成します。  
また、このクラスタは障害をシミュレートする対象のアプリケーションが稼働するクラスタでもあります。

Plain textcontent\_copy

```
$ gcloud container clusters create chaos \
    --release-channel regular \
    --zone asia-northeast1-a \
    --node-locations asia-northeast1-a \
    --project grasys-dev
```

### Chaso Meshのインストール

インストールの方法としてはKubernetesのパッケージマネージャである「helm」を利用する方法、インストールスクリプトを利用する方法がありますが今回はhelmを利用します。

#### helmリポジトリの準備

Plain textcontent\_copy

```
$ helm repo add chaos-mesh https://charts.chaos-mesh.org
"chaos-mesh" has been added to your repositories

$ helm repo list
NAME      	URL
chaos-mesh	https://charts.chaos-mesh.org

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "chaos-mesh" chart repository
Update Complete. ⎈Happy Helming!⎈
```

#### Choas Meshのインストール

Plain textcontent\_copy

```
# namespaceの作成
$ kubectl create ns chaos-mesh

# インストール
# デフォルトのインストールオプションではNodePortで構成されるのでClusterIPに変更します
$ helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh \
--set chaosDaemon.runtime=containerd \
--set chaosDaemon.socketPath=/run/containerd/containerd.sock \
--set dashboard.service.type=ClusterIP --version 2.7.2
```

### Ingressを追加する

インストールした直後にDashboardへアクセスする為にはchaos-dashboardのサービスへportforwardを行う必要がありますが、毎回portforwardを行うのは面倒なのでingressを作成して公開します。  
また、[ドキュメント](https://chaos-mesh.org/docs/expose-dashboard-with-ingress/)ではnginx controllerを利用していますが、GKEのデフォルトingressを利用する用に以下のmanifestをデプロイします。

Plain textcontent\_copy

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: chaos-mesh-ingress
  namespace: chaos-mesh
spec:
  defaultBackend:
    service:
      name: chaos-dashboard
      port:
        number: 2333
```

Plain textcontent\_copy

```
$ kubectl apply -f ingress.yaml

$ kubectl get ingress -n chaos-mesh

$ kubectl get ingress -n chaos-mesh
NAME                 CLASS    HOSTS   ADDRESS         PORTS   AGE
chaos-mesh-ingress   <none>   *       xx.xx.xx.xx   80      44h
```

ingressが作成されるとingressのglobal ipでDashbordを公開されます。  
[http://xx.xx.xx.xxへアクセスするとDashbordへアクセスすることができます。](http://xx.xx.xx.xx%E3%81%B8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%81%A8Dashbord%E3%81%B8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)

### Dashbordへのログイン

Chaos Meshは[RBAC Authorization](https://chaos-mesh.org/docs/manage-user-permissions/)を使用してユーザー権限を管理しているため、Dashbordへアクセスすると以下のようなtoken入力ポップアップが表示されます。「click here to generate」リンクからRBAC作成用のyaml出力画面へ遷移することができ必要なmanifestを作成できます。  
今回はCluster scope、Manager権限で作成します。

Plain textcontent\_copy

```
$ kubectl apply -f rbac.yaml
$ kubectl create token 'rbac.yamlで定義したServiceAccount名'
　tokenが出力
```

Token入力  
NameとTokenを入力してSubmitするとログインできます。

![Dashbordへのログインの画面（1）](/_astro/01-chaosmesh1_1-2-1024x612-6659d77a.DDMNxlpE_1wweFb.webp)

RBAC作成用yaml出力

![Dashbordへのログインの画面（2）](/_astro/02-chaosmesh1_2-858x1024-d757c3a9.C-I1jk9V_1fV1Nl.webp)

これでChaos MeshのDashbordへログインできました。  
ここからは実際に障害発生のシミュレーションをしていきますが、#1では正常に動作するかをpodのkillで確認して詳細な障害発生シミュレーションは次回に記載します。

## 障害のシミュレーション

障害発生対象のpodをデプロイします。

Plain textcontent\_copy

```
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
```

Plain textcontent\_copy

```
$ kubectl apply -f nginx.yaml
```

メニュー「Experiments」 > 「New experiment」へ進みシミュレーションを作成します。  
今回の設定は「Kubernetes」の「Pod Fault」から「Pod Kill」を選択します。  
「Grace Period」は30にしているので30秒後に先ほどデプロイしたnginxのpodがkillされるはずです。

![障害のシミュレーションの画面（1）](/_astro/03-chaosmesh1_3-1-1024x986-f05c9577.C83t216O_Jp0fY.webp)

Namespace、Label Selectorsで対象のpodを指定、NameにはExperimentの名称を設定します。

![障害のシミュレーションの画面（2）](/_astro/04-chaosmesh1_4-1024x785-c30407de.CmDs_19c_uBzvW.webp)

![障害のシミュレーションの画面（3）](/_astro/05-chaosmesh1_5-1024x493-9f09f79d.CZA0Q6sn_2joHmg.webp)

Submitボタンクリック後すぐに既存のpodがkillされ新しいpodが起動してきました。  
これで基本的な動作は確認できました。

Plain textcontent\_copy

```
$ kubectl get pod -w
NAME                     READY   STATUS    RESTARTS   AGE
nginx-5869d7778c-cv89w   1/1     Running   0          41m
nginx-5869d7778c-cv89w   1/1     Terminating   0          41m
nginx-5869d7778c-cv89w   1/1     Terminating   0          41m
nginx-5869d7778c-qw9ph   0/1     Pending       0          0s
nginx-5869d7778c-qw9ph   0/1     Pending       0          1s
nginx-5869d7778c-qw9ph   0/1     ContainerCreating   0          1s
nginx-5869d7778c-qw9ph   1/1     Running             0          3s
```

ここまででChaos Meshのインストール方法と基本的なExperimentの設定を確認しました。  
次回は色々な障害のシミュレーションを行なっていきたいと思います。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/izumi/)

### [izumi](/authors/izumi/)

izumiのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/izumi/)
