Tworzenie eksperymentu chaosu korzystającego z błędu usługi Chaos Mesh za pomocą interfejsu wiersza polecenia platformy Azure
Możesz użyć eksperymentu chaosu, aby sprawdzić, czy aplikacja jest odporna na błędy, powodując te błędy w kontrolowanym środowisku. W tym artykule tworzysz okresowe błędy zasobnika usługi Azure Kubernetes Service (AKS) w przestrzeni nazw przy użyciu eksperymentu chaosu i usługi Azure Chaos Studio. Uruchomienie tego eksperymentu może pomóc w obronie przed niedostępnością usługi, gdy występują sporadyczne błędy.
Usługa Chaos Studio używa usługi Chaos Mesh, bezpłatnej platformy inżynieryjnej typu open source dla platformy Kubernetes, aby wstrzyknąć błędy do klastra usługi AKS. Błędy usługi Chaos Mesh to błędy bezpośrednie usługi, które wymagają zainstalowania usługi Chaos Mesh w klastrze usługi AKS. Możesz użyć tych samych kroków, aby skonfigurować i uruchomić eksperyment dla dowolnego błędu usługi AKS Chaos Mesh.
Wymagania wstępne
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
- Klaster usługi AKS z pulami węzłów systemu Linux. Jeśli nie masz klastra usługi AKS, zobacz przewodnik Szybki start usługi AKS korzystający z interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
Ograniczenia
- Błędy usługi Chaos Mesh można używać z klastrami prywatnymi, konfigurując iniekcję sieci wirtualnej w programie Chaos Studio. Wszystkie polecenia wydane dla klastra prywatnego, w tym kroki opisane w tym artykule w celu skonfigurowania usługi Chaos Mesh, muszą postępować zgodnie ze wskazówkami dotyczącymi klastra prywatnego. Zalecane metody obejmują nawiązywanie połączenia z maszyny wirtualnej w tej samej sieci wirtualnej lub przy użyciu funkcji wywołania polecenia usługi AKS.
- Błędy usługi AKS Chaos Mesh są obsługiwane tylko w pulach węzłów systemu Linux.
- Jeśli klaster usługi AKS jest skonfigurowany tak, aby zezwalał tylko na autoryzowane zakresy adresów IP, musisz zezwolić na zakresy adresów IP programu Chaos Studio. Można je znaleźć, wysyłając zapytanie do tagu usługi za pomocą interfejsu
ChaosStudio
API odnajdywania tagów usługi lub pobierając pliki JSON.
Otwórz usługę Azure Cloud Shell
Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której można użyć do wykonania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.
Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również otworzyć usługę Cloud Shell na osobnej karcie przeglądarki, przechodząc do powłoki Bash. Wybierz pozycję Kopiuj , aby skopiować bloki kodu, wklej go w usłudze Cloud Shell, a następnie wybierz Enter , aby go uruchomić.
Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten samouczek wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.30 lub nowszej. Uruchom polecenie az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Uwaga
Te instrukcje używają terminalu powłoki Bash w usłudze Cloud Shell. Niektóre polecenia mogą nie działać zgodnie z opisem, jeśli interfejs wiersza polecenia jest uruchamiany lokalnie lub w terminalu programu PowerShell.
Konfigurowanie usługi Chaos Mesh w klastrze usługi AKS
Przed uruchomieniem błędów usługi Chaos Mesh w programie Chaos Studio należy zainstalować usługę Chaos Mesh w klastrze usługi AKS.
Uruchom następujące polecenia w oknie usługi Cloud Shell, w którym masz aktywną subskrypcję ustawioną na subskrypcję, w której wdrożono klaster usługi AKS. Zastąp
$RESOURCE_GROUP
wartości i$CLUSTER_NAME
grupą zasobów i nazwą zasobu klastra.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
Sprawdź, czy zasobniki usługi Chaos Mesh są zainstalowane, uruchamiając następujące polecenie:
kubectl get po -n chaos-testing
Powinny zostać wyświetlone dane wyjściowe podobne do poniższego przykładu (chaos-controller-manager i co najmniej jeden demon chaosu):
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
Możesz również użyć instrukcji instalacji w witrynie internetowej Usługi Chaos Mesh.
Włączanie programu Chaos Studio w klastrze usługi AKS
Program Chaos Studio nie może wstrzyknąć błędów względem zasobu, chyba że ten zasób został dodany do programu Chaos Studio. Aby dodać zasób do programu Chaos Studio, utwórz element docelowy i możliwości zasobu. Klastry AKS mają tylko jeden typ docelowy (usługa bezpośredni), ale inne zasoby mogą mieć maksymalnie dwa typy docelowe. Jeden typ docelowy dotyczy błędów bezpośrednich usługi. Innym typem docelowym są błędy oparte na agencie. Każdy typ błędu usługi Chaos Mesh jest reprezentowany jako funkcja, na przykład PodChaos, NetworkChaos i IOChaos.
Utwórz element docelowy, zastępując
$SUBSCRIPTION_ID
ciągi ,$resourceGroupName
i$AKS_CLUSTER_NAME
odpowiednimi ciągami dodawanego klastra usługi AKS.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\":{}}"
Utwórz możliwości w obiekcie docelowym, zastępując
$SUBSCRIPTION_ID
ciągi ,$resourceGroupName
i$AKS_CLUSTER_NAME
odpowiednimi ciągami dodawanego klastra usługi AKS.
Zastąp $CAPABILITY
ciąg ciąg "Nazwa możliwości" dodawanego błędu.
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\":{}}"
Oto przykład włączania PodChaos
możliwości dla Dokumentacji:
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\":{}}"
Ten krok należy wykonać dla każdej funkcji*, którą chcesz włączyć w klastrze.
Klaster usługi AKS został pomyślnie dodany do programu Chaos Studio.
Tworzenie eksperymentu
Teraz możesz utworzyć eksperyment. Eksperyment chaosu definiuje akcje, które chcesz wykonać względem zasobów docelowych. Akcje są zorganizowane i uruchamiane w krokach sekwencyjnych. Eksperyment chaosu definiuje również akcje, które mają być wykonywane względem gałęzi, które są uruchamiane równolegle.
Utwórz siatkę
jsonSpec
chaosu:Zapoznaj się z dokumentacją usługi Chaos Mesh, aby zapoznać się z typem błędu, na przykład typem PodChaos.
Sformułuj konfigurację YAML dla tego typu błędów przy użyciu dokumentacji usługi 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
Usuń dowolny kod YAML poza elementem
spec
, w tym nazwę właściwości specyfikacji. Usuń wcięcie szczegółów specyfikacji. Parametrduration
nie jest niezbędny, ale jest używany, jeśli zostanie podany. W takim przypadku usuń go.action: pod-failure mode: all selector: namespaces: - default
Użyj konwertera YAML-to-JSON, takiego jak ten, aby przekonwertować kod YAML usługi Chaos Mesh na format JSON i zminimalizować go.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
Użyj narzędzia ucieczki ciągu JSON, takiego jak ten, aby uniknąć specyfikacji JSON lub zmienić cudzysłowy na pojedyncze cudzysłowy.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
Utwórz kod JSON eksperymentu, zaczynając od poniższego przykładu JSON. Zmodyfikuj kod JSON, aby odpowiadał eksperymentowi, który chcesz uruchomić przy użyciu interfejsu API tworzenia eksperymentu, biblioteki błędów i
jsonSpec
utworzonego w poprzednim kroku.{ "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" } ] } ] } }
Utwórz eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp
$SUBSCRIPTION_ID
wartości ,$RESOURCE_GROUP
i$EXPERIMENT_NAME
właściwościami eksperymentu. Upewnij się, że plik JSON eksperymentu został zapisany i przekazany. Zaktualizujexperiment.json
plik za pomocą nazwy pliku JSON.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
Każdy eksperyment tworzy odpowiednią tożsamość zarządzaną przypisaną przez system. Zanotuj identyfikator podmiotu zabezpieczeń dla tej tożsamości w odpowiedzi na następny krok.
Nadaj eksperymentowi uprawnienie do klastra usługi AKS
Podczas tworzenia eksperymentu chaosu program Chaos Studio tworzy tożsamość zarządzaną przypisaną przez system, która wykonuje błędy względem zasobów docelowych. Ta tożsamość musi mieć odpowiednie uprawnienia do zasobu docelowego, aby eksperyment został pomyślnie uruchomiony.
- Pobierz element
$EXPERIMENT_PRINCIPAL_ID
, uruchamiając następujące polecenie i kopiując elementPrincipalID
z odpowiedzi. Zastąp$SUBSCRIPTION_ID
wartości ,$RESOURCE_GROUP
i$EXPERIMENT_NAME
właściwościami eksperymentu.
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
- Nadaj eksperymentowi dostęp do zasobów przy użyciu następujących poleceń. Zastąp
$EXPERIMENT_PRINCIPAL_ID
element identyfikatorem podmiotu zabezpieczeń z poprzedniego kroku. Zastąp$SUBSCRIPTION_ID
ciągi ,$resourceGroupName
i$AKS_CLUSTER_NAME
odpowiednimi ciągami klastra usługi 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
Jeśli wolisz tworzyć role niestandardowe zamiast wbudowanych ról usługi AKS, postępuj zgodnie z instrukcjami na stronie Obsługiwane typy zasobów i przypisania ról dla programu Chaos Studio , aby wyświetlić listę operacji kontroli dostępu opartej na rolach wymaganych dla określonego błędu i dodać je do ręcznie utworzonej roli niestandardowej.
Uruchamianie eksperymentu
Teraz możesz przystąpić do uruchamiania eksperymentu. Aby zobaczyć efekt, zalecamy otwarcie przeglądu klastra usługi AKS i przejście do pozycji Szczegółowe informacje na osobnej karcie przeglądarki. Dane na żywo dla liczby aktywnych zasobników pokazują efekt uruchomienia eksperymentu.
Rozpocznij eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp
$SUBSCRIPTION_ID
wartości ,$RESOURCE_GROUP
i$EXPERIMENT_NAME
właściwościami eksperymentu.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
Odpowiedź zawiera adres URL stanu, którego można użyć do wykonywania zapytań dotyczących stanu eksperymentu podczas uruchamiania eksperymentu.
Następne kroki
Teraz, po uruchomieniu eksperymentu bezpośredniego usługi AKS Chaos Mesh, możesz wykonać następujące czynności: