Aracılığıyla paylaş


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

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.

  1. 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
    
  2. 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.

  1. , $resourceGroupNameve $AKS_CLUSTER_NAME değerlerini eklediğiniz AKS kümesinin ilgili dizeleriyle değiştirerek $SUBSCRIPTION_IDbir 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\":{}}"
    
  2. , $resourceGroupNameve $AKS_CLUSTER_NAME değerlerini eklediğiniz AKS kümesinin ilgili dizeleriyle değiştirerek $SUBSCRIPTION_IDhedefte ö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.

  1. Chaos Mesh jsonSpecoluşturma:

    1. PodChaos türü gibi bir hata türü için Chaos Mesh belgelerine bakın.

    2. 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
      
    3. Belirtim özellik adı da dahil olmak üzere dışında specherhangi 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
      
    4. 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"]}}
      
    5. 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']}}
      
  2. 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"
              }
            ]
          }
        ]
      }
    }
    
  3. Azure CLI'yi kullanarak denemeyi oluşturun. , $RESOURCE_GROUPve $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ştirin 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
    

    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.

  1. $EXPERIMENT_PRINCIPAL_ID aşağıdaki komutu çalıştırıp yanıttan öğesini kopyalayarak öğesini PrincipalID alın. , $RESOURCE_GROUPve $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
  1. 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 . , $resourceGroupNameve $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.

  1. Azure CLI'yi kullanarak denemeyi başlatın. , $RESOURCE_GROUPve $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
    
  2. 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: