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
- Langganan Azure. Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
- Kluster AKS dengan kumpulan simpul Linux. Jika Anda tidak memiliki kluster AKS, lihat mulai cepat AKS yang menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
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.
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
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.
Buat target dengan mengganti
$SUBSCRIPTION_ID
, ,$resourceGroupName
dan$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\":{}}"
Buat kemampuan pada target dengan mengganti
$SUBSCRIPTION_ID
, ,$resourceGroupName
dan$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.
Buat Chaos Mesh
jsonSpec
:Lihat dokumentasi Chaos Mesh untuk jenis kesalahan, misalnya, jenis PodChaos.
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
Hapus YAML apa pun di luar
spec
, termasuk nama properti spesifikasi. Hapus indentasi detail spesifikasi. Parameterduration
tidak diperlukan, tetapi digunakan jika disediakan. Dalam hal ini, hapus.action: pod-failure mode: all selector: namespaces: - default
Gunakan pengonversi YAML-ke-JSON seperti ini untuk mengonversi Chaos Mesh YAML ke JSON dan mengecilkannya.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
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']}}
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" } ] } ] } }
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. Perbaruiexperiment.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.
$EXPERIMENT_PRINCIPAL_ID
Ambil dengan menjalankan perintah berikut dan salinPrincipalID
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
- 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.
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
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: