Azure CLI를 사용하여 Chaos Mesh 오류를 사용하는 카오스 실험 만들기
카오스 실험을 사용하여 제어된 환경에서 이러한 오류를 발생시켜 애플리케이션이 오류에 대해 복원력이 있는지 확인할 수 있습니다. 이 문서에서는 카오스 실험 및 Azure Chaos Studio를 사용하여 네임스페이스에서 주기적인 AKS(Azure Kubernetes Service) Pod 오류를 발생시킵니다. 이 실험을 실행하면 산발적인 오류가 있을 때 서비스를 사용하지 못하게 되는 일을 방지할 수 있습니다.
Chaos Studio는 Kubernetes용 무료 오픈 소스 카오스 엔지니어링 플랫폼인 Chaos Mesh를 사용하여 AKS 클러스터에 오류를 주입합니다. Chaos Mesh 오류는 AKS 클러스터에 Chaos Mesh를 설치해야 하는 서비스 직접 오류입니다. 이와 동일한 단계를 사용하여 AKS Chaos Mesh 오류에 대한 실험을 설정하고 실행할 수 있습니다.
필수 구성 요소
- Azure 구독 Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
- Linux 노드 풀이 있는 AKS 클러스터. AKS 클러스터가 없는 경우 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하는 AKS 빠른 시작을 참조하세요.
제한 사항
- Chaos Studio에서 VNet 삽입을 구성하여 프라이빗 클러스터에서 Chaos Mesh 오류를 사용할 수 있습니다. Chaos Mesh를 설정하는 이 문서의 단계를 포함하여 프라이빗 클러스터에 발급된 모든 명령은 프라이빗 클러스터 지침을 따라야 합니다. 권장되는 방법에는 동일한 가상 네트워크의 VM에서 연결하거나 AKS 명령 호출 기능을 사용하는 것이 포함됩니다.
- AKS Chaos Mesh 오류는 Linux 노드 풀에서만 지원됩니다.
- AKS 클러스터가 권한 있는 IP 범위만 허용하도록 구성된 경우 Chaos Studio의 IP 범위를 허용해야 합니다.
ChaosStudio
서비스 태그 검색 API 또는 다운로드 가능한 JSON 파일로 서비스 태그를 쿼리하여 찾을 수 있습니다.
‘Azure Cloud Shell 열기’
Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.
Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보기를 선택합니다. Bash로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 열 수도 있습니다. 복사를 선택하여 코드 블록을 복사하고 Cloud Shell에 붙여넣은 다음 입력을 선택하여 실행합니다.
이 자습서에서 CLI를 로컬로 설치하여 사용하려면 Azure CLI 버전 2.0.30 이상이 필요합니다. az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
참고 항목
이러한 지침에서는 Cloud Shell의 Bash 터미널을 사용합니다. CLI를 로컬로 실행하거나 PowerShell 터미널에서 실행하는 경우 일부 명령이 설명대로 작동하지 않을 수 있습니다.
AKS 클러스터에서 Chaos Mesh 설정
Chaos Studio에서 Chaos Mesh 오류를 실행하려면 먼저 AKS 클러스터에 Chaos Mesh를 설치해야 합니다.
활성 구독이 AKS 클러스터가 배포된 구독으로 설정된 Cloud Shell 창에서 다음 명령을 실행합니다.
$RESOURCE_GROUP
과$CLUSTER_NAME
을 클러스터 리소스의 리소스 크룹과 이름으로 바꿉니다.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
다음 명령을 실행하여 Chaos Mesh Pod가 설치되어 있는지 확인합니다.
kubectl get po -n chaos-testing
다음 예제와 유사한 출력이 표시됩니다(chaos-controller-manager 및 하나 이상의 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
Chaos Mesh 웹 사이트의 설치 지침을 사용할 수도 있습니다.
AKS 클러스터에서 Chaos Studio 사용
Chaos Studio는 리소스가 먼저 Chaos Studio에 추가되지 않는 한 리소스에 대해 오류를 주입할 수 없습니다. Chaos Studio에 리소스를 추가하려면 리소스에 대상 및 기능을 만듭니다. AKS 클러스터에는 하나의 대상 유형(서비스 직접)만 있지만 다른 리소스에는 최대 두 개의 대상 유형이 있을 수 있습니다. 한 가지 대상 유형은 서비스 직접 오류에 대한 것입니다. 또 다른 대상 유형은 에이전트 기반 오류에 대한 것입니다. 각 유형의 Chaos Mesh 오류는 PodChaos, NetworkChaos 및 IOChaos와 같은 기능으로 표시됩니다.
$SUBSCRIPTION_ID
,$resourceGroupName
및$AKS_CLUSTER_NAME
(을)를 추가하는 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\":{}}"
$SUBSCRIPTION_ID
,$resourceGroupName
및$AKS_CLUSTER_NAME
(을)를 추가하는 AKS 클러스터의 관련 문자열로 바꿔 대상에 대한 기능을 만듭니다.
$CAPABILITY
을 추가하는 오류의 "기능 이름"으로 바꿉니다.
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\":{}}"
참조에 PodChaos
기능을 사용하도록 설정하는 예제는 다음과 같습니다.
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\":{}}"
이 단계는 클러스터에서 사용하도록 설정하려는 각* 기능에 대해 수행해야 합니다.
이제 AKS 클러스터를 Chaos Studio에 성공적으로 추가했습니다.
실험 만들기
이제 실험을 만들 수 있습니다. 카오스 실험은 대상 리소스에 대해 수행하려는 작업을 정의합니다. 작업은 순차적 단계로 구성되고 실행됩니다. 카오스 실험은 병렬로 실행되는 분기에 대해 수행하려는 작업도 정의합니다.
Chaos Mesh
jsonSpec
을 만듭니다.오류 형식(예: PodChaos 형식)은 Chaos Mesh 설명서를 참조하세요.
Chaos Mesh 설명서를 사용하여 해당 오류 형식에 대한 YAML 구성을 수식화합니다.
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
spec
외부의 YAML(사양 속성 이름 포함)을 제거합니다. 사양 세부 정보의 들여쓰기를 제거합니다.duration
매개 변수는 필요하지 않지만 제공된 경우 사용됩니다. 이 경우 제거합니다.action: pod-failure mode: all selector: namespaces: - default
이와 같은 YAML-JSON 변환기를 사용하여 Chaos Mesh YAML을 JSON으로 변환하고 최소화합니다.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
이와 같은 JSON 문자열 이스케이프 도구를 사용하여 JSON 사양을 이스케이프하거나 큰따옴표를 작은따옴표로 변경합니다.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
다음 JSON 샘플부터 실험 JSON을 만듭니다. 실험 만들기 API, 오류 라이브러리 및 이전 단계에서 만든
jsonSpec
을 사용하여 실행할 실험과 일치하도록 JSON을 수정합니다.{ "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" } ] } ] } }
Azure CLI를 사용하여 실험을 만듭니다.
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$EXPERIMENT_NAME
을 실험에 맞는 속성으로 바꿉니다. 실험 JSON을 저장하고 업로드했는지 확인합니다. JSON 파일 이름으로experiment.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
각 실험에서 해당 시스템이 할당한 관리 ID를 만듭니다. 다음 단계에 대한 응답에서 이 ID의 보안 주체 ID를 기록해 둡니다.
AKS 클러스터에 실험 권한 부여
카오스 실험을 만들 때 Chaos Studio는 대상 리소스에 대해 오류를 실행하는 시스템이 할당한 관리 ID를 만듭니다. 실험을 성공적으로 실행하려면 이 ID에 대상 리소스에 대한 적절한 권한을 부여해야 합니다.
- 다음 명령을 실행하고 응답에서
PrincipalID
(을)를 복사하여$EXPERIMENT_PRINCIPAL_ID
(을)를 검색합니다.$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$EXPERIMENT_NAME
을 실험에 맞는 속성으로 바꿉니다.
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
- 다음 명령을 사용하여 실험에 리소스에 대한 액세스 권한을 부여합니다.
$EXPERIMENT_PRINCIPAL_ID
를 이전 단계의 보안 주체 ID로 바꿉니다.$SUBSCRIPTION_ID
,$resourceGroupName
및$AKS_CLUSTER_NAME
(을)를 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
기본 제공 AKS 역할 대신 사용자 지정 역할을 만들려면 Chaos Studio 페이지의 지원되는 리소스 종류 및 역할 할당에 대한 지침에 따라 특정 오류에 필요한 역할 기반 액세스 제어 작업을 나열하고 수동으로 만든 사용자 지정 역할에 추가합니다.
실험 실행
이제 실험을 실행할 준비가 되었습니다. 영향을 확인하려면 AKS 클러스터 개요를 열고 별도의 브라우저 탭에서 Insights로 이동하는 것이 좋습니다. 활성 Pod 수에 대한 라이브 데이터는 실험 실행의 효과를 보여 줍니다.
Azure CLI를 사용하여 실험을 시작합니다.
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$EXPERIMENT_NAME
을 실험에 맞는 속성으로 바꿉니다.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
응답에는 실험이 실행될 때 실험 상태를 쿼리하는 데 사용할 수 있는 상태 URL이 포함됩니다.
다음 단계
이제 AKS Chaos Mesh 서비스 직접 실험을 실행했으므로 다음을 수행할 준비가 되었습니다.