Bagikan melalui


Buat eksperimen yang menggunakan kesalahan Chaos Mesh dengan Azure CLI

Anda dapat menggunakan eksperimen chaos untuk memverifikasi bahwa aplikasi Anda tahan terhadap kegagalan dengan menyebabkan kegagalan tersebut dalam lingkungan yang terkendali. Dalam artikel ini, Anda menyebabkan kegagalan pod Azure Kubernetes Service (AKS) berkala pada namespace dengan menggunakan eksperimen chaos dan Azure Chaos Studio. Menjalankan eksperimen ini dapat membantu Anda bertahan dari ketidaktersediaan layanan saat terjadi kegagalan sporadis.

Chaos Studio menggunakan Chaos Mesh, platform rekayasa kekacauan sumber terbuka gratis untuk Kubernetes, untuk menyuntikkan kesalahan ke dalam kluster AKS. Kesalahan Chaos Mesh adalah kesalahan layanan-langsung yang mengharuskan Chaos Mesh diinstal di kluster AKS. Anda dapat menggunakan langkah-langkah yang sama ini untuk menyiapkan dan menjalankan eksperimen untuk kesalahan AKS Chaos Mesh apa pun.

Prasyarat

Batasan

  • Anda dapat menggunakan kesalahan Chaos Mesh dengan kluster privat dengan mengonfigurasi Injeksi VNet di Chaos Studio. Setiap perintah yang dikeluarkan untuk kluster privat, termasuk langkah-langkah dalam artikel ini untuk menyiapkan Chaos Mesh, perlu mengikuti panduan kluster privat. Metode yang direkomendasikan termasuk menyambungkan dari VM di jaringan virtual yang sama atau menggunakan fitur pemanggilan perintah AKS.
  • Kesalahan AKS Chaos Mesh hanya didukung pada kumpulan simpul Linux.
  • Jika kluster AKS Anda dikonfigurasi untuk hanya mengizinkan rentang IP resmi, Anda perlu mengizinkan rentang IP Chaos Studio. Anda dapat menemukannya dengan mengkueri ChaosStudio tag layanan dengan API Penemuan Tag Layanan atau file JSON yang dapat diunduh.

Membuka Azure Cloud Shell

Azure Cloud Shell adalah shell interaktif gratis yang dapat Anda gunakan untuk menjalankan langkah dalam artikel ini. Shell ini memiliki alat Azure umum yang telah dipasang sebelumnya dan dikonfigurasi untuk digunakan dengan akun Anda.

Untuk membuka Cloud Shell, pilih Coba di sudut kanan atas blok kode. Anda juga dapat membuka Cloud Shell di tab browser terpisah dengan membuka Bash. Pilih Salin untuk menyalin blok kode, tempel ke Cloud Shell, dan pilih Masukkan untuk menjalankannya.

Jika Anda lebih suka menginstal dan menggunakan CLI secara lokal, tutorial ini memerlukan Azure CLI versi 2.0.30 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Catatan

Instruksi ini menggunakan terminal Bash di Cloud Shell. Beberapa perintah mungkin tidak berfungsi seperti yang dijelaskan jika Anda menjalankan CLI secara lokal atau di terminal PowerShell.

Siapkan Chaos Mesh di kluster AKS Anda

Sebelum dapat menjalankan kesalahan Chaos Mesh di Chaos Studio, Anda harus menginstal Chaos Mesh di kluster AKS Anda.

  1. Jalankan perintah berikut di jendela Cloud Shell tempat Anda memiliki langganan aktif yang diatur menjadi langganan tempat kluster AKS Anda disebarkan. Ganti $RESOURCE_GROUP dan $CLUSTER_NAME dengan grup sumber daya dan nama sumber daya kluster Anda.

    az aks get-credentials -g $RESOURCE_GROUP -n $CLUSTER_NAME
    helm repo add chaos-mesh https://charts.chaos-mesh.org
    helm repo update
    kubectl create ns chaos-testing
    helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
    
  2. Verifikasi bahwa pod Chaos Mesh diinstal dengan menjalankan perintah berikut:

    kubectl get po -n chaos-testing
    

Anda akan melihat output yang mirip dengan contoh berikut (chaos-controller-manager dan satu atau beberapa chaos-daemons):

NAME                                        READY   STATUS    RESTARTS   AGE
chaos-controller-manager-69fd5c46c8-xlqpc   1/1     Running   0          2d5h
chaos-daemon-jb8xh                          1/1     Running   0          2d5h
chaos-dashboard-98c4c5f97-tx5ds             1/1     Running   0          2d5h

Anda juga dapat menggunakan instruksi penginstalan di situs web Chaos Mesh.

Aktifkan Chaos Studio di kluster AKS Anda

Chaos Studio tidak dapat menyuntikkan kesalahan terhadap sumber daya kecuali sumber daya tersebut ditambahkan ke Chaos Studio terlebih dahulu. Untuk menambahkan sumber daya ke Chaos Studio, buat target dan kemampuan pada sumber daya. Kluster AKS hanya memiliki satu jenis target (service-direct), tetapi sumber daya lain mungkin memiliki hingga dua jenis target. Salah satu jenis target adalah untuk kesalahan langsung layanan. Jenis target lain adalah untuk kesalahan berbasis agen. Setiap jenis kesalahan Chaos Mesh diwakili sebagai kemampuan seperti PodChaos, NetworkChaos, dan IOChaos.

  1. Buat target dengan mengganti $SUBSCRIPTION_ID, , $resourceGroupNamedan $AKS_CLUSTER_NAME dengan string yang relevan dari kluster AKS yang Anda tambahkan.

    az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh?api-version=2024-01-01" --body "{\"properties\":{}}"
    
  2. Buat kemampuan pada target dengan mengganti $SUBSCRIPTION_ID, , $resourceGroupNamedan $AKS_CLUSTER_NAME dengan string yang relevan dari kluster AKS yang Anda tambahkan.

Ganti $CAPABILITY dengan "Nama Kemampuan" dari kesalahan yang Anda tambahkan.

az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/$CAPABILITY?api-version=2024-01-01"  --body "{\"properties\":{}}"

Berikut adalah contoh mengaktifkan PodChaos kemampuan untuk referensi Anda:

az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/PodChaos-2.1?api-version=2024-01-01"  --body "{\"properties\":{}}"

Langkah ini harus dilakukan untuk setiap kemampuan* yang ingin Anda aktifkan pada kluster.

Anda sekarang telah berhasil menambahkan kluster AKS anda ke Chaos Studio.

Membuat eksperimen

Sekarang Anda dapat membuat eksperimen Anda. Eksperimen chaos mendefinisikan tindakan yang ingin Anda ambil terhadap sumber daya target. Tindakan diatur dan dijalankan secara berurutan. Eksperimen chaos juga mendefinisikan tindakan yang ingin Anda ambil terhadap cabang, yang berjalan secara paralel.

  1. Buat Chaos Mesh jsonSpec:

    1. Lihat dokumentasi Chaos Mesh untuk jenis kesalahan, misalnya, jenis PodChaos.

    2. Rumuskan konfigurasi YAML untuk jenis kesalahan tersebut dengan menggunakan dokumentasi Chaos Mesh.

      apiVersion: chaos-mesh.org/v1alpha1
      kind: PodChaos
      metadata:
        name: pod-failure-example
        namespace: chaos-testing
      spec:
        action: pod-failure
        mode: all
        duration: '600s'
        selector:
          namespaces:
            - default
      
    3. Hapus YAML apa pun di luar spec, termasuk nama properti spesifikasi. Hapus indentasi detail spesifikasi. Parameter duration tidak diperlukan, tetapi digunakan jika disediakan. Dalam hal ini, hapus.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Gunakan pengonversi YAML-ke-JSON seperti ini untuk mengonversi Chaos Mesh YAML ke JSON dan mengecilkannya.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Gunakan alat escape string JSON seperti ini untuk menghindari spesifikasi JSON, atau ubah tanda kutip ganda menjadi tanda kutip tunggal.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Buat JSON eksperimen Anda dengan memulai dengan sampel JSON berikut. Ubah JSON agar sesuai dengan eksperimen yang ingin Anda jalankan dengan menggunakan Create Experiment API, pustaka kesalahan, dan yang jsonSpec dibuat di langkah sebelumnya.

    {
      "location": "centralus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "AKS pod kill",
            "branches": [
              {
                "name": "AKS pod kill",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                          "key": "jsonSpec",
                          "value": "{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}"
                      }
                    ],
                    "name": "urn:csci:microsoft:azureKubernetesServiceChaosMesh:podChaos/2.2"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh"
              }
            ]
          }
        ]
      }
    }
    
  3. Buat eksperimen dengan menggunakan Azure CLI. Ganti $SUBSCRIPTION_ID, $RESOURCE_GROUP, dan $EXPERIMENT_NAME dengan properti untuk eksperimen Anda. Pastikan Anda telah menyimpan dan mengunggah eksperimen JSON Anda. Perbarui experiment.json dengan nama file JSON Anda.

    az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
    

    Setiap eksperimen membuat identitas terkelola yang ditetapkan oleh sistem yang sesuai. Perhatikan ID utama untuk identitas ini dalam respons untuk langkah berikutnya.

Berikan izin eksperimen ke kluster AKS Anda

Saat membuat eksperimen chaos, Chaos Studio membuat identitas terkelola yang ditetapkan sistem yang mengeksekusi kesalahan pada sumber daya target Anda. Identitas ini harus diberi izin yang sesuai ke sumber daya target agar eksperimen berhasil berjalan.

  1. $EXPERIMENT_PRINCIPAL_ID Ambil dengan menjalankan perintah berikut dan salin PrincipalID dari respons. Ganti $SUBSCRIPTION_ID, $RESOURCE_GROUP, dan $EXPERIMENT_NAME dengan properti untuk eksperimen Anda.
az rest --method get --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2024-01-01
  1. Berikan akses eksperimen ke sumber daya Anda dengan menggunakan perintah berikut. Ganti $EXPERIMENT_PRINCIPAL_ID dengan ID utama dari langkah sebelumnya. Ganti $SUBSCRIPTION_ID, $resourceGroupName, dan $AKS_CLUSTER_NAME dengan string yang relevan dari kluster AKS.
az role assignment create --role "Azure Kubernetes Service RBAC Admin Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME

az role assignment create --role "Azure Kubernetes Service Cluster User Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME

Jika Anda lebih suka membuat peran kustom alih-alih peran AKS bawaan, ikuti instruksi pada halaman Jenis sumber daya dan penetapan peran yang didukung untuk Chaos Studio untuk mencantumkan operasi kontrol akses berbasis peran yang diperlukan untuk kesalahan tertentu dan menambahkannya ke peran kustom yang dibuat secara manual.

Jalankan eksperimen Anda

Anda sekarang siap untuk menjalankan eksperimen Anda. Untuk melihat efeknya, kami sarankan Anda membuka gambaran umum kluster AKS dan membuka Insight di tab browser terpisah. Data langsung untuk Jumlah Pod Aktif menunjukkan efek menjalankan eksperimen Anda.

  1. Mulai eksperimen dengan menggunakan Azure CLI. Ganti $SUBSCRIPTION_ID, $RESOURCE_GROUP, dan $EXPERIMENT_NAME dengan properti untuk eksperimen Anda.

    az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2024-01-01
    
  2. Responsnya mencakup URL status yang dapat Anda gunakan untuk menanyakan status eksperimen saat eksperimen berjalan.

Langkah berikutnya

Sekarang setelah Anda menjalankan eksperimen langsung layanan AKS Chaos Mesh, Anda siap untuk: