Tutoriel : Configurer des groupes de machines virtuelles identiques dans Azure à l’aide d’Ansible

Important

Ansible 2.9 (ou version ultérieure) est nécessaire pour exécuter les exemples de playbooks dans cet article.

Les groupes de machines virtuelles identiques Azure constituent une fonctionnalité Azure qui vous permet de configurer un groupe de machines virtuelles identiques à charge équilibrée. Les groupes identiques n’engendrent pas de coût supplémentaire et sont générés à partir des machines virtuelles. Vous payez uniquement les ressources de calcul sous-jacentes telles que les instances de machine virtuelle, un équilibreur de charge ou un stockage par disque managé. Avec les groupes identiques, les couches d’automatisation et de gestion sont fournies pour exécuter et faire évoluer vos applications. Vous pouvez à la place créer et gérer manuellement des machines virtuelles individuelles. Toutefois, l’utilisation de groupes identiques présente deux avantages principaux. Ils sont intégrés à Azure et appliquent automatiquement une mise à l’échelle à vos machines virtuelles pour répondre aux besoins des applications.

Dans cet article, vous apprendrez comment :

  • Configurer les ressources d’une machine virtuelle
  • Configurer un groupe identique
  • Mettre à l’échelle le groupe identique en augmentant ses instances de machines virtuelles

Prérequis

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

Configurer un groupe identique

Le code de playbook dans cette section définit les ressources suivantes :

  • Groupe de ressources dans lequel toutes les ressources seront déployées
  • Réseau virtuel dans l’espace d’adressage 10.0.0.0/16
  • Sous-réseau au sein du réseau virtuel
  • Adresse IP publique qui vous permet d’accéder aux ressources via Internet
  • Groupe de sécurité réseau qui contrôle le flux du trafic réseau en direction et en provenance du groupe identique
  • Équilibreur de charge qui répartit le trafic sur un ensemble de machines virtuelles définies en utilisant des règles d’équilibreur de charge.
  • Groupe de machines virtuelles identiques qui utilise toutes les ressources créées

Il existe deux façons d’obtenir le playbook de l’exemple :

  • Téléchargez le playbook et enregistrez le fichier sous vmss-create.yml.

  • Créez un nouveau fichier appelé vmss-create.yml. Insérez le code suivant dans le nouveau fichier :

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myvmscalesetname
    vmss_lb_name: myScaleSetLb
    location: eastus
    admin_username: azureuser
    admin_password: "{{ admin_password }}"

  tasks:
    - name: Create a resource group
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        location: "{{ location }}"
    - name: Create virtual network
      azure_rm_virtualnetwork:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        address_prefixes: "10.0.0.0/16"
    - name: Add subnet
      azure_rm_subnet:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        address_prefix: "10.0.1.0/24"
        virtual_network: "{{ vmss_name }}"
    - name: Create public IP address
      azure_rm_publicipaddress:
        resource_group: "{{ resource_group }}"
        allocation_method: Static
        name: "{{ vmss_name }}"
    - name: Create Network Security Group that allows SSH
      azure_rm_securitygroup:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        rules:
          - name: SSH
            protocol: Tcp
            destination_port_range: 22
            access: Allow
            priority: 1001
            direction: Inbound

    - name: Create a load balancer
      azure_rm_loadbalancer:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}lb"
        location: "{{ location }}"
        frontend_ip_configurations:
          - name: "{{ vmss_name }}front-config"
            public_ip_address: "{{ vmss_name }}"
        backend_address_pools:
          - name: "{{ vmss_name }}backend-pool"
        probes:
          - name: "{{ vmss_name }}prob0"
            port: 8080
            interval: 10
            fail_count: 3
        inbound_nat_pools:
          - name: "{{ vmss_name }}nat-pool"
            frontend_ip_configuration_name: "{{ vmss_name }}front-config"
            protocol: Tcp
            frontend_port_range_start: 50000
            frontend_port_range_end: 50040
            backend_port: 22
        load_balancing_rules:
          - name: "{{ vmss_name }}lb-rules"
            frontend_ip_configuration: "{{ vmss_name }}front-config"
            backend_address_pool: "{{ vmss_name }}backend-pool"
            frontend_port: 80
            backend_port: 8080
            load_distribution: Default
            probe: "{{ vmss_name }}prob0"

    - name: Create VMSS
      no_log: true
      azure_rm_virtualmachinescaleset:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        vm_size: Standard_DS1_v2
        admin_username: "{{ admin_username }}"
        admin_password: "{{ admin_password }}"
        ssh_password_enabled: true
        capacity: 2
        virtual_network_name: "{{ vmss_name }}"
        subnet_name: "{{ vmss_name }}"
        upgrade_policy: Manual
        tier: Standard
        managed_disk_type: Standard_LRS
        os_disk_caching: ReadWrite
        image:
          offer: UbuntuServer
          publisher: Canonical
          sku: 16.04-LTS
          version: latest
        load_balancer: "{{ vmss_name }}lb"
        data_disks:
          - lun: 0
            disk_size_gb: 20
            managed_disk_type: Standard_LRS
            caching: ReadOnly
          - lun: 1
            disk_size_gb: 30
            managed_disk_type: Standard_LRS
            caching: ReadOnly

Avant d’exécuter le playbook, consultez les notes suivantes :

  • Dans la section vars, remplacez l’espace réservé {{ admin_password }} par votre propre mot de passe.

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook vmss-create.yml

Après avoir exécuté le playbook, vous voyez une sortie similaire aux résultats suivants :

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Create a resource group] 
changed: [localhost]

TASK [Create virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Create public IP address] 
changed: [localhost]

TASK [Create Network Security Group that allows SSH] 
changed: [localhost]

TASK [Create a load balancer] 
changed: [localhost]

TASK [Create Scale Set] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=8    changed=7    unreachable=0    failed=0

Voir le nombre d’instances de machines virtuelles

Le groupe identique configuré comporte actuellement deux instances. Suivez les étapes ci-dessous pour vérifier cette valeur :

  1. Connectez-vous au portail Azure.

  2. Accédez au groupe identique que vous avez configuré.

  3. Le nom du groupe identique apparaît avec le nombre d’instances entre parenthèses : Standard_DS1_v2 (2 instances).

  4. Vous pouvez également vérifier le nombre d’instances avec Azure Cloud Shell en exécutant la commande suivante :

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    La commande Azure CLI dans Cloud Shell montre qu’il existe deux instances :

    {
      "capacity": 2,
    }
    

Effectuer un scale-out d’un groupe identique

Le code du playbook de cette section récupère des informations sur le groupe identique et fait passer sa capacité de deux à trois.

Il existe deux façons d’obtenir le playbook de l’exemple :

  • Téléchargez le manifeste et enregistrez-le sous vmss-scale-out.yml.

  • Créez un nouveau fichier appelé vmss-scale-out.yml. Insérez le code suivant dans le nouveau fichier :

---
- hosts: localhost
  gather_facts: false
  
  vars:
    resource_group: myTestRG
    vmss_name: myTestVMSS
  
  tasks:

    - name: Get scaleset info
      azure_rm_virtualmachine_scaleset_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        format: curated
      register: output_scaleset

    - name: set image fact
      set_fact:
        vmss_image: "{{ output_scaleset.vmss[0].image }}"

    - name: Create VMSS
      no_log: true
      azure_rm_virtualmachinescaleset:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        capacity: 3
        image: "{{ vmss_image }}"

Exécutez le playbook en utilisant ansible-playbook

ansible-playbook vmss-scale-out.yml

Après avoir exécuté le playbook, vous voyez une sortie similaire aux résultats suivants :

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Get scaleset info] 
ok: [localhost]

TASK [Set image fact] 
ok: [localhost]

TASK [Change VMSS capacity] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=1    unreachable=0    failed=0

Vérifier les résultats

Vérifiez le résultat de votre travail sur le Portail Azure :

  1. Connectez-vous au portail Azure.

  2. Accédez au groupe identique que vous avez configuré.

  3. Le nom du groupe identique apparaît avec le nombre d’instances entre parenthèses : Standard_DS1_v2 (3 instances).

  4. Vous pouvez également vérifier la modification avec Azure Cloud Shell en exécutant la commande suivante :

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    La commande Azure CLI dans Cloud Shell montre qu’il existe maintenant trois instances :

    {
      "capacity": 3,
    }
    

Étapes suivantes