Azure CLI ile Chaos Mesh hatası kullanan bir kaos denemesi oluşturma
Denetimli bir ortamda bu hatalara neden olarak uygulamanızın hatalara dayanıklı olduğunu doğrulamak için bir kaos denemesi kullanabilirsiniz. Bu makalede, bir kaos denemesi ve Azure Chaos Studio kullanarak bir ad alanında düzenli Azure Kubernetes Service (AKS) pod hatalarına neden olursunuz. Bu denemeyi çalıştırmak, düzensiz hatalar olduğunda hizmetin kullanılamamasına karşı savunmanıza yardımcı olabilir.
Chaos Studio, Aks kümesine hata eklemek için Kubernetes için ücretsiz, açık kaynaklı bir kaos mühendisliği platformu olan Chaos Mesh'i kullanır. Chaos Mesh hataları, CHAOS Mesh'in AKS kümesine yüklenmesini gerektiren hizmet doğrudan hatalarıdır. Herhangi bir AKS Chaos Mesh hatası için bir deneme ayarlamak ve çalıştırmak için aynı adımları kullanabilirsiniz.
Önkoşullar
- Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
- Linux düğüm havuzları olan bir AKS kümesi. AKS kümeniz yoksa Azure CLI, Azure PowerShell veya Azure portalını kullanan AKS hızlı başlangıcına bakın.
Sınırlamalar
- Chaos Studio'da Sanal Ağ Ekleme'yi yapılandırarak Özel kümelerle Chaos Mesh hatalarını kullanabilirsiniz. Chaos Mesh'i ayarlamaya yönelik bu makaledeki adımlar da dahil olmak üzere özel kümeye verilen tüm komutların özel küme yönergelerini izlemesi gerekir. Önerilen yöntemler, aynı sanal ağdaki bir VM'den bağlanmayı veya AKS komut çağırma özelliğini kullanmayı içerir.
- AKS Chaos Mesh hataları yalnızca Linux düğüm havuzlarında desteklenir.
- AKS kümeniz yalnızca yetkili IP aralıklarına izin verecek şekilde yapılandırılmışsa Chaos Studio'nun IP aralıklarına izin vermeniz gerekir. Bunları, Hizmet Etiketi Bulma API'si veya indirilebilir JSON dosyalarıyla hizmet etiketini sorgulayarak
ChaosStudio
bulabilirsiniz.
Azure Cloud Shell’i açın
Azure Cloud Shell, bu makaledeki adımları çalıştırmak için kullanabileceğiniz ücretsiz bir etkileşimli kabukdur. Yaygın Azure araçları, kabuğa önceden yüklenmiştir ve kabuk, hesabınızla birlikte kullanılacak şekilde yapılandırılmıştır.
Cloud Shell'i açmak için kod bloğunun sağ üst köşesindeki Deneyin'i seçin. Bash'e giderek Cloud Shell'i ayrı bir tarayıcı sekmesinde de açabilirsiniz. Kod bloklarını kopyalamak için Kopyala'yı seçin, Cloud Shell'e yapıştırın ve çalıştırmak için Enter tuşuna basın.
CLI'yı yerel olarak yükleyip kullanmayı tercih ediyorsanız, bu öğretici için Azure CLI 2.0.30 veya üzeri bir sürüm gerekir. Sürümü bulmak için az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Not
Bu yönergelerde Cloud Shell'de bash terminali kullanılır. CLI'yi yerel olarak veya PowerShell terminalinde çalıştırırsanız bazı komutlar açıklandığı gibi çalışmayabilir.
AKS kümenizde Chaos Mesh'i ayarlama
Chaos Studio'da Chaos Mesh hatalarını çalıştırabilmeniz için önce AKS kümenize Chaos Mesh yüklemeniz gerekir.
Etkin aboneliğin AKS kümenizin dağıtıldığı abonelik olarak ayarlandığı cloud shell penceresinde aşağıdaki komutları çalıştırın. ve
$CLUSTER_NAME
değerini küme kaynağınızın kaynak grubu ve adıyla değiştirin$RESOURCE_GROUP
.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
Aşağıdaki komutu çalıştırarak Chaos Mesh podlarının yüklendiğini doğrulayın:
kubectl get po -n chaos-testing
Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir (bir chaos-controller-manager ve bir veya daha fazla chaos-daemon):
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 web sitesindeki yükleme yönergelerini de kullanabilirsiniz.
AKS kümenizde Chaos Studio'yu etkinleştirme
Bu kaynak önce Chaos Studio'ya eklenmediği sürece Chaos Studio bir kaynağa hata ekleyemez. Chaos Studio'ya kaynak eklemek için kaynak üzerinde bir hedef ve özellikler oluşturun. AKS kümelerinin tek bir hedef türü (doğrudan hizmet) vardır, ancak diğer kaynaklarda en fazla iki hedef türü olabilir. Bir hedef türü, hizmet doğrudan hataları içindir. Başka bir hedef türü aracı tabanlı hatalar içindir. Chaos Mesh hatasının her türü PodChaos, NetworkChaos ve IOChaos gibi bir özellik olarak temsil edilir.
,
$resourceGroupName
ve$AKS_CLUSTER_NAME
değerlerini eklediğiniz AKS kümesinin ilgili dizeleriyle değiştirerek$SUBSCRIPTION_ID
bir hedef oluşturun.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\":{}}"
,
$resourceGroupName
ve$AKS_CLUSTER_NAME
değerlerini eklediğiniz AKS kümesinin ilgili dizeleriyle değiştirerek$SUBSCRIPTION_ID
hedefte özellikleri oluşturun.
değerini, eklediğiniz hatanın "Yetenek Adı" ile değiştirin$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\":{}}"
Aşağıda, başvurunuzun özelliğini etkinleştirme PodChaos
örneği verilmişti:
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\":{}}"
Bu adım, kümede etkinleştirmek istediğiniz her* özellik için yapılmalıdır.
Şimdi AKS kümenizi Chaos Studio'ya başarıyla eklediniz.
Deneme oluşturma
Artık denemenizi oluşturabilirsiniz. Kaos denemesi, hedef kaynaklara karşı uygulamak istediğiniz eylemleri tanımlar. Eylemler sıralı adımlarla düzenlenir ve çalıştırılır. Kaos denemesi, paralel olarak çalışan dallara karşı yapmak istediğiniz eylemleri de tanımlar.
Chaos Mesh
jsonSpec
oluşturma:PodChaos türü gibi bir hata türü için Chaos Mesh belgelerine bakın.
Chaos Mesh belgelerini kullanarak bu hata türü için YAML yapılandırmasını formüle edin.
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
Belirtim özellik adı da dahil olmak üzere dışında
spec
herhangi bir YAML'yi kaldırın. Belirtim ayrıntılarının girintisini kaldırın.duration
parametresi gerekli değildir, ancak sağlanırsa kullanılır. Bu durumda kaldırın.action: pod-failure mode: all selector: namespaces: - default
Chaos Mesh YAML'yi JSON'a dönüştürmek ve en aza indirmek için bunun gibi bir YAML-JSON dönüştürücü kullanın.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
JSON belirtiminden kaçmak için bunun gibi bir JSON dize kaçış aracı kullanın veya çift tırnakları tek tırnak olarak değiştirin.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
Aşağıdaki JSON örneğinden başlayarak deneme JSON'unuzu oluşturun. Deneme Oluşturma API'sini, hata kitaplığını ve önceki adımda oluşturulan öğesini kullanarak çalıştırmak istediğiniz denemeye
jsonSpec
karşılık gelen JSON'u değiştirin.{ "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'yi kullanarak denemeyi oluşturun. ,
$RESOURCE_GROUP
ve$EXPERIMENT_NAME
öğesini denemenizin özellikleriyle değiştirin$SUBSCRIPTION_ID
. Deneme JSON'unuzu kaydettiğinizden ve karşıya yüklediğinizden emin olun. JSON dosya adınızla güncelleştirinexperiment.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
Her deneme, sistem tarafından atanan ilgili yönetilen kimliği oluşturur. Sonraki adıma ilişkin yanıtta bu kimliğin asıl kimliğini not edin.
AKS kümenize deneme izni verme
Bir kaos denemesi oluşturduğunuzda Chaos Studio, hedef kaynaklarınızda hataları yürüten sistem tarafından atanan bir yönetilen kimlik oluşturur. Denemenin başarıyla çalışması için bu kimliğe hedef kaynak için uygun izinler verilmelidir.
$EXPERIMENT_PRINCIPAL_ID
aşağıdaki komutu çalıştırıp yanıttan öğesini kopyalayarak öğesiniPrincipalID
alın. ,$RESOURCE_GROUP
ve$EXPERIMENT_NAME
öğesini denemenizin özellikleriyle değiştirin$SUBSCRIPTION_ID
.
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
- Aşağıdaki komutları kullanarak denemenin kaynaklarınıza erişmesini sağlayın. değerini önceki adımdaki asıl kimlikle değiştirin
$EXPERIMENT_PRINCIPAL_ID
. ,$resourceGroupName
ve$AKS_CLUSTER_NAME
değerlerini AKS kümesinin ilgili dizeleriyle değiştirin$SUBSCRIPTION_ID
.
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
Yerleşik AKS rolleri yerine özel roller oluşturmayı tercih ediyorsanız, Belirli bir hata için gereken rol tabanlı erişim denetimi işlemlerini listelemek ve bunları el ile oluşturulan özel bir role eklemek üzere Desteklenen kaynak türleri ve Chaos Studio rol atamaları sayfasındaki yönergeleri izleyin.
Denemenizi çalıştırma
Artık denemenizi çalıştırmaya hazırsınız. Etkiyi görmek için AKS kümesine genel bakışınızı açmanızı ve ayrı bir tarayıcı sekmesinde İçgörüler'e gitmenizi öneririz. Etkin Pod Sayısı için canlı veriler, denemenizi çalıştırmanın etkisini gösterir.
Azure CLI'yi kullanarak denemeyi başlatın. ,
$RESOURCE_GROUP
ve$EXPERIMENT_NAME
öğesini denemenizin özellikleriyle değiştirin$SUBSCRIPTION_ID
.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
Yanıt, deneme çalışırken deneme durumunu sorgulamak için kullanabileceğiniz bir durum URL'si içerir.
Sonraki adımlar
AKS Chaos Mesh hizmeti doğrudan denemesi çalıştırdığınıza göre artık şunları yapmaya hazırsınız: