Partager via


Tutoriel : Créer une solution avec plusieurs dépendances partagées à différents niveaux à l’aide de groupes de services

Dans ce tutoriel, vous allez créer une solution avec plusieurs dépendances partagées à différents niveaux dans une organisation de hiérarchie à quatre niveaux. Vous utilisez des groupes de services pour orchestrer des charges de travail à différents niveaux de la hiérarchie.

Pour plus d’informations, consultez Groupes de services à différents niveaux de hiérarchie dans l’orchestration de charge de travail.

Conditions préalables

Remarque

Vous pouvez réutiliser les variables globales définies dans Préparer les principes de base pour exécuter l’orchestration des charges de travail et les variables de ressources définies dans Configurer les ressources de l’orchestration de charge de travail.

Définir le scénario

L’organisation a une hiérarchie à quatre niveaux, qui est représentée dans le diagramme suivant. La hiérarchie se compose des niveaux pays, région, usine et ligne. Ces niveaux représentent une structure de haut en bas où chaque niveau réduit l’étendue de l’orchestration.

Diagramme de la hiérarchie à quatre niveaux et cible à chaque niveau, où la solution au niveau des lignes dépend de l’autre solution.

Les références de sites sont créées à chaque niveau de la hiérarchie, étant SGCountry au niveau du pays, SGRegion au niveau de la région, SGFactory au niveau de l’usine. Une cible est créée à chaque niveau, étant CountryTarget au niveau du pays, RegionTarget au niveau de la région, FactoryTarget au niveau de l’usine et LineTarget au niveau de la ligne.

Une solution est déployée sur chaque cible comme suit :

  • Country Adapter (CA) est une solution au niveau du pays.
  • L’adaptateur de région (RA) est une solution au niveau de la région.
  • L’adaptateur d’usine (FA) est une solution au niveau usine.
  • Line Event Tracker (LET) est une solution au niveau de la ligne. LET dépend de FA, de RA et de CA, ce qui signifie que pendant le déploiement, la configuration LET sera mise à jour avec les informations des autres solutions.

Toutes les instances de CA, RA, FA et LET sont déployées dans le même cluster Kubernetes activé pour Azure Arc.

Créer des cibles

  1. Créez une cible pour chaque niveau de hiérarchie. Mettez à jour custom-location.json fichier avec l’emplacement personnalisé de votre cluster.

    solution_scope="one-to-n-app"  # if you want to change the name, make sure it follows the K8s object naming convention
    countryTarget="Italy"
    regionTarget="Naples"
    factoryTarget="Contoso"
    lineTarget="Line01"
    
    # Create target at country level
    az workload-orchestration target create \
      --resource-group "$rg" \
      --location "$l" \
      --name "$countryTarget" \
      --display-name "$countryTarget" \
      --hierarchy-level "country" \
      --capabilities "Use for soap production" \
      --description "This is Country Target" \
      --solution-scope "$solution_scope" \
      --target-specification "@targetspecs.json" \
      --extended-location "@custom-location.json"
    
    # Create target at region level
    az workload-orchestration target create \
      --resource-group "$rg" \
      --location "$l" \
      --name "$regionTarget" \
      --display-name "$regionTarget" \
      --hierarchy-level "region" \
      --capabilities "Use for soap production" \
      --description "This is Region Target" \
      --solution-scope "$solution_scope" \
      --target-specification "@targetspecs.json" \
      --extended-location "@custom-location.json"
    
    # Create target at factory level
    az workload-orchestration target create \
      --resource-group "$rg" \
      --location "$l" \
      --name "$factoryTarget" \
      --display-name "$factoryTarget" \
      --hierarchy-level "factory" \
      --capabilities "Use for soap production" \
      --description "This is Factory Target" \
      --solution-scope "$solution_scope" \
      --target-specification "@targetspecs.json" \
      --extended-location "@custom-location.json"
    
    # Create target at line level
    az workload-orchestration target create \
      --resource-group "$rg" \
      --location "$l" \
      --name "$lineTarget" \
      --display-name "$lineTarget" \
      --hierarchy-level "line" \
      --capabilities "Use for soap production" \
      --description "This is Line01 Target" \
      --solution-scope "$solution_scope" \
      --target-specification "@targetspecs.json" \
      --extended-location "@custom-location.json"
    
  2. Obtenez les identifiants des objectifs créés.

    lineTargetId=$(az workload-orchestration target show --resource-group "$rg" --name "$lineTarget" --query id --output tsv)
    factoryTargetId=$(az workload-orchestration target show --resource-group "$rg" --name "$factoryTarget" --query id --output tsv)
    regionTargetId=$(az workload-orchestration target show --resource-group "$rg" --name "$regionTarget" --query id --output tsv)
    countryTargetId=$(az workload-orchestration target show --resource-group "$rg" --name "$countryTarget" --query id --output tsv)
    
  3. Liez les ID cibles à leurs groupes de services respectifs. Veillez à remplacer les noms des groupes de services par ceux que vous avez créés.

    # Link to country service group
    az rest \
      --method put \
      --uri "${countryTargetId}/providers/Microsoft.Relationships/serviceGroupMember/SGRelation?api-version=2023-09-01-preview" \
      --body "{'properties':{ 'targetId': '/providers/Microsoft.Management/serviceGroups/$level1Name'}}"
    
    # Link to region service group
    az rest \
      --method put \
      --uri "${regionTargetId}/providers/Microsoft.Relationships/serviceGroupMember/SGRelation?api-version=2023-09-01-preview" \
      --body "{'properties':{ 'targetId': '/providers/Microsoft.Management/serviceGroups/$level2Name'}}"
    
    # Link to factory service group
    az rest \
      --method put \
      --uri "${factoryTargetId}/providers/Microsoft.Relationships/serviceGroupMember/SGRelation?api-version=2023-09-01-preview" \
      --body "{'properties':{ 'targetId': '/providers/Microsoft.Management/serviceGroups/$level3Name'}}"
    
    # Link to line service group
    az rest \
      --method put \
      --uri "${lineTargetId}/providers/Microsoft.Relationships/serviceGroupMember/SGRelation?api-version=2023-09-01-preview" \
      --body "{'properties':{ 'targetId': '/providers/Microsoft.Management/serviceGroups/$level3Name'}}"
    
  4. Mettez à jour les cibles après les avoir connectées aux groupes de services pour vous assurer que les configurations de hiérarchie sont mises à jour. Cette étape est facultative, mais recommandée.

    # Update country target
    az workload-orchestration target update \
      --resource-group "$rg" \
      --name "$countryTarget"
    
    # Update region target
    az workload-orchestration target update \
      --resource-group "$rg" \
      --name "$regionTarget"
    
    # Update factory target
    az workload-orchestration target update \
      --resource-group "$rg" \
      --name "$factoryTarget"
    
    # Update line target
    az workload-orchestration target update \
      --resource-group "$rg" \
      --name "$lineTarget"
    

Préparer les modèles de solution

Pour créer les fichiers de schéma de solution et de modèle de solution, vous pouvez utiliser les fichiers common-schema.yaml et app-config-template.yaml , respectivement, dans le référentiel GitHub comme référence.

Modèle de solution pour l’autorité de certification

  1. Créez le fichier de schéma de solution.

    az workload-orchestration schema create --resource-group "$rg" --version "1.0.0" --schema-name "ca-schema" --schema-file ./ca-schema.yaml -l "$l"
    
  2. Créer le fichier de modèle de solution

    caversion="1.0.0"
    caname="ca-template"
    
    az workload-orchestration solution-template create \
        --solution-template-name "$caname" \
        -g "$rg" \
        -l "$l" \
        --capabilities "Use for soap production" \
        --description "This is CA Solution" \
        --configuration-template-file ./ca-config-template.yaml \
        --specification "@ca-specs.json" \
        --version "$caversion"
    

Modèle de solution pour RA

  1. Créez le fichier de schéma de solution.

    az workload-orchestration schema create --resource-group "$rg" --version "1.0.0" --schema-name "ra-schema" --schema-file ./ra-schema.yaml -l "$l"
    
  2. Créer le fichier de modèle de solution

    raversion="1.0.0"
    raname="ra-template"
    az workload-orchestration solution-template create \
        --solution-template-name "$raname" \
        -g "$rg" \
        -l "$l" \
        --capabilities "Use for soap production" \
        --description "This is RA Solution" \
        --configuration-template-file ./ra-config-template.yaml \
        --specification "@ra-specs.json" \
        --version "$raversion"
    

Modèle de solution pour FA

  1. Créez le fichier de schéma de solution.

    az workload-orchestration schema create --resource-group "$rg" --version "1.0.0" --schema-name "fa-schema" --schema-file ./fa-schema.yaml -l "$l"
    
  2. Créer le fichier de modèle de solution

    faversion="1.0.0"
    faname="fa-template"
    az workload-orchestration solution-template create \
        --solution-template-name "$faname" \
        -g "$rg" \
        -l "$l" \
        --capabilities "Use for soap production" \
        --description "This is fa Solution" \
        --configuration-template-file ./fa-config-template.yaml \
        --specification "@fa-specs.json" \
        --version "$faversion"
    

Modèle de solution pour LET

  1. Créez le fichier de schéma de solution.

    az workload-orchestration schema create --resource-group "$rg" --version "1.0.0" --schema-name "let-schema" --schema-file ./let-schema.yaml -l "$l"
    
  2. Créer le fichier de modèle de solution

    letversion="1.0.0"
    letname="let-template"
    az workload-orchestration solution-template create \
        --solution-template-name "$letname" \
        -g "$rg" \
        -l "$l" \
        --capabilities "Use for soap production" \
        --description "This is LET Solution" \
        --configuration-template-file ./let-config-template.yaml \
        --specification "@let-specs.json" \
        --version "$letversion"
    

Définir la configuration des modèles de solution

  1. Définissez la configuration de la solution d’autorité de certification.

    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$caname" --target-name "$level1Name"
    
  2. Définissez la configuration de la solution RA.

    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$raname" --target-name "$level1Name"
    
    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$raname" --target-name "$level2Name"
    
  3. Définissez la configuration de la solution FA.

    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$faname" --target-name "$level1Name"
    
    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$faname" --target-name "$level2Name"
    
    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$faname" --target-name "$level3Name"
    
  4. Définissez la configuration de la solution LET.

    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$letname" --target-name "$level1Name"
    
    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$letname" --target-name "$level2Name"
    
    az workload-orchestration configuration set --subscription "$contextSubscriptionId" -g "$contextRG" --solution-template-name "$letname" --target-name "$level3Name"
    
    az workload-orchestration configuration set -g "$rg" --solution-template-name "$letname" --target-name "$lineTarget"
    

Passer en revue la configuration

  1. Passez en revue la configuration de la solution d’autorité de certification avec l’instance « ca-instance-a ».

    az workload-orchestration target review --solution-template-name "$caname" --solution-template-version "$caversion" --resource-group "$rg" --target-name "$countryTarget" --solution-instance-name "ca-instance-a"
    
  2. Passez en revue la configuration de la solution RA avec l’instance « ra-instance-a ».

    az workload-orchestration target review --solution-template-name "$raname" --solution-template-version "$raversion" --resource-group "$rg" --target-name "$regionTarget" --solution-instance-name "ra-instance-a"
    
  3. Passez en revue la configuration de la solution FA avec l’instance « fa-instance-a ».

    az workload-orchestration target review --solution-template-name "$faname" --solution-template-version "$faversion" --resource-group "$rg" --target-name "$factoryTarget" --solution-instance-name "fa-instance-a"
    
  4. Passez en revue la configuration de la solution LET avec des dépendances sur les solutions d’autorité de certification (CA), d'autorité d'enregistrement (RA) et d'autorité financière (FA). Dans le fichier dependencies.json remplacez solutionVersionId avec l’ID à partir de la sortie des commandes précédentes.

    az workload-orchestration target review --solution-template-name "$letname" --solution-template-version "$letversion" --resource-group "$rg" --target-name "$lineTarget" --solution-dependencies "@dependencies.json"
    
  5. Copiez l'élément reviewId à partir de la sortie de la commande précédente. Vous en aurez besoin pour publier la solution.

    reviewId="<reviewId>"
    version="<name>"
    

Publier et déployer la solution

  1. Publiez la solution avec l’ID de révision et le nom de version.

    az workload-orchestration target publish --solution-name "$letname" --solution-version "$version" --review-id "$reviewId" --resource-group "$rg" --target-name "$lineTarget"
    
  2. Déployez la solution sur la cible.

    az workload-orchestration target install --solution-name "$letname" --solution-version "$version" --resource-group "$rg" --target-name "$lineTarget"
    

Valider le déploiement

  1. Obtenez les informations d’identification du cluster pour la cible. Le cluster doit être lié à l’emplacement personnalisé utilisé lors de la création de cibles.

    az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName> --overwrite-existing
    
  2. Validez la configuration des cibles en vérifiant les valeurs de déploiement Helm. Remplacez <Namespace> par l’étape -solution-scopeCréer des cibles que vous avez définie.

    # There may be more releases in the same namespace if you have used the same custom location and namespace name before.
    # Look for your respective solution/instance.
    namespace="<Namespace>"
    for release in $(helm list -n "$namespace" -q); do
        echo "=================="
        echo "For release/instance: $release"
        helm get values "$release" -n "$namespace"
        echo "=================="
    done
    

Vous pouvez également accéder au portail Azure et vérifier les pods dans l’espace de noms de votre cluster AKS pour valider le déploiement.