カオスメッシュによる雲自然カオス工学



クラウドでは、分散アーキテクチャはさらに複雑になっており、複雑さによってシステムがどのように失敗するかについての不確実性がもたらされている.
カオス工学は、サービスのための不適切なフォールバック設定などの大規模な停電を引き起こす前に欠点を識別するために欠点を識別するために故障を注入することによってシステムの弾力性をテストすることを目的とし、失敗の単一のポイントのために失敗をカスケードしたり、故障したタイムアウトのために再試行嵐.

歴史


Netflixが彼らの基盤の弾力性をテストするためにPREMサーバーからAWS基盤に移動したとき、カオス工学は2010年にNetflixで始まりました.
2012年に、NetflixオープンソースChaosMonkey Apache 2.0ライセンスの下では、インスタンスが失敗した場合にサービスを確実にするためにインスタンスをランダムに終了します.

CNCF景観における雲固有カオス工学


CNCFはKubernetes環境、アプリケーション、マイクロサービス、およびインフラストラクチャに焦点を当てたエンジニアリングプラクティスとして定義された雲ネイティブのカオス工学に焦点を当てています.
クラウドネイティブのカオスエンジニアリングには4つのコア原理があります.
  • オープンソース
  • カオス管理のためのCRDS
  • 拡張性とプラグイン可能
  • 幅広いコミュニティ養子縁組
  • CNCFは雲ネイティブカオス工学のための2つのサンドボックスプロジェクトを持っている
  • ChaosMesh
  • Litmus Chaos

  • カオスメッシュ


    カオスメッシュは、Kubernetes環境でカオスを編成する雲ネイティブのカオス工学プラットフォームです.それは基づいているKubernetes Operator pattern そして、アプリケーションとKubernetesインフラストラクチャに管理可能な方法で注入するカオス演算子を提供します.
    カオス演算子は、カスタムオブジェクトdefition(CRD)を使用してカオスオブジェクトを定義します.これは以下のようなフォルト注入のために様々なcrdを提供します.
  • PodChaos
  • NetworkChaos
  • DNSChaos
  • HTTPChaos
  • StressChaos
  • IOChaos
  • TimeChaos
  • KernelChaos
  • AWSChaos
  • GCPChaos
  • JVMChaos
  • カオスメッシュインストール


    カオスメッシュをすばやくインストールすることができますinstallation script . しかし、それは生産環境でヘルム3チャートを使用することをお勧めします.
    Helmを用いたカオスメッシュのインストール
  • カオスメッシュリポジトリをヘルムリポジトリに追加します.
  •    helm repo add chaos-mesh https://charts.chaos-mesh.org
    
  • Chaosmeshを別々の名前空間にインストールすることをお勧めしますchaos-testing 手動で、またはヘルムを自動的に作成します.
  •    helm upgrade \
            --install \
            chaos-mesh \
            chaos-mesh/chaos-mesh \
            -n chaos-testing \
            --create-namespace \
            --version v2.0.0 \
            --wait
    
    注意: gkeやeksを使っているならcontainerd , その後使用
       helm upgrade \
            --install \
            chaos-mesh \
            chaos-mesh/chaos-mesh \
            -n chaos-testing \
            --create-namespace \
            --set chaosDaemon.runtime=containerd \
            --set chaosDaemon.socketPath=/run/containerd/containerd.sock \
            --version v2.0.0 \
            --wait
    
  • PODが実行されているかどうかを確認します
  •    kubectl get pods -n chaos-testing
    

    最初のカオスメッシュ実験


    カオス実験はどのようなタイプの断層が注入されるかを説明する.
  • nginx podを設定し、ポート80で公開します.
  •   kubectl run nginx --image=nginx --labels="app=nginx" --port=80
    
  • nginx podのIPアドレスを取得する
  •   kubectl get pods nginx -ojsonpath="{.status.podIP}"
    
  • 別の端末を開き、テストポッドを設定して接続をテストします.
  •   kubectl run -it test-connection --image=radial/busyboxplus:curl -- sh
      ping <IP of the Nginx Pod> -c 2
    
    これによりIPをpingする時間が表示されます.
  • 実行して最初のカオス実験を作成します.
  •   kubectl apply -f - <<EOF
      apiVersion: chaos-mesh.org/v1alpha1
      kind: NetworkChaos
      metadata:
        name: nginx-network-delay
      spec:
        action: delay
        mode: one
        selector:
          namespaces:
            - default
          labelSelectors:
            'app': 'nginx'
        delay:
          latency: '1s'
        duration: '60s'
      EOF
    
    これは、タイプのCRDを作成しますNetworkChaos これは、1 second ラベル付きポッドのネットワークでapp:nginx 次のためのi . e nginx pod60 seconds .
  • NGNXポッドへのpingの応答をテストします1 second .

  • HttpChain実験を実行する

    HTTPChaos HTTPサーバの要求と応答に障害を注入することができます.サポートabort , delay , replace , patch 故障タイプNote: Before proceeding, delete the NetworkChaos experiment created earlier.
  • nginx podの応答時間をチェックします.
  •    kubectl exec -it test-connection -- sh
       time curl <IP of the Nginx Pod>
    
  • クリエイトHTTPSChaos 走る実験
  •    kubectl apply -f - <<EOF
       apiVersion: chaos-mesh.org/v1alpha1
       kind: HTTPChaos
       metadata:
         name: nginx-http-delay
       spec:
         mode: all
         selector:
           labelSelectors:
             app: nginx
         target: Request
         port: 80
         delay: 1s
         method: GET
         path: /
         duration: 5m
       EOF
    
    これは、タイプのCRDを作成しますHTTPChaos これは、1 seconds ラベルでポッドに送られる要求にapp:nginx 次のためのポート80のI . E Nginxポッド5 mins .
    注意:エラーが発生した場合admission webhook "vauth.kb.io" denied the request , バージョン2.0のようにオープン問題があります2187 そして、一時的な修正は、有効なwebhookを削除することです.
    kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io validate-auth
    
  • nginx podのレスポンス時間をテストします.
  •    time curl <IP of the Nginx Pod>
    
    追加が表示されます1 second 応答の待ち時間.