Tutorial: Konfigurieren von VM-Skalierungsgruppen in Azure mit AnsibleTutorial: Configure virtual machine scale sets in Azure using Ansible

Wichtig

Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.7 erforderlich.Ansible 2.7 (or later) is required to run the sample playbooks in this article.

Azure-VM-Skalierungsgruppen sind eine Azure-Funktion, mit der Sie eine Gruppe von identischen virtuellen Computern mit Lastenausgleich konfigurieren können.Azure virtual machine scale sets is an Azure feature that lets you configure a group of identical, load balanced VMs. Durch Skalierungsgruppen entstehen keine zusätzlichen Kosten, und sie werden aus virtuellen Computern erstellt.There's no additional cost to scale sets and they're built from virtual machines. Sie zahlen nur für die zugrunde liegenden Computeressourcen, z. B. die VM-Instanzen, den Lastenausgleich oder den Speicher für verwaltete Datenträger.You pay only for the underlying compute resources such as the VM instances, load balancers, or Managed Disk storage. Mit Skalierungsgruppen werden die Verwaltungs- und Automatisierungsebenen für die Ausführung und Skalierung Ihrer Anwendungen bereitgestellt.With scale sets, the management and automation layers are provided to run and scale your applications. Sie können stattdessen einzelne virtuelle Computer manuell erstellen und verwalten.You could instead manually create and manage individual VMs. Die Verwendung von Skalierungsgruppen bietet jedoch zwei wesentliche Vorteile.However, there are two key benefits to using scale sets. Sie sind in Azure integriert und skalieren Ihre virtuellen Computer automatisch entsprechend den Anwendungsanforderungen.They're built into Azure and they automatically scale your virtual machines to meet application needs.

In diesem Tutorial wird Ansible für Folgendes verwendet:In this tutorial, Ansible is used to:

  • Konfigurieren der Ressourcen für einen virtuellen ComputerConfigure the resources for a VM
  • Konfigurieren einer SkalierungsgruppeConfigure a scale set
  • Skalieren der Skalierungsgruppe durch die Erhöhung der Anzahl von VM-InstanzenScale the scale set by increasing it's VM instances

VoraussetzungenPrerequisites

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Konfigurieren einer SkalierungsgruppeConfigure a scale set

Mit dem Playbookcode in diesem Abschnitt werden die folgenden Ressourcen definiert:The playbook code in this section defines the following resources:

  • Die Ressourcengruppe, in der Ihre gesamten Ressourcen bereitgestellt werden.Resource group into which all of your resources will be deployed.
  • Das virtuelle Netzwerk im Adressraum 10.0.0.0/16Virtual network in the 10.0.0.0/16 address space
  • Das Subnetz innerhalb des virtuellen NetzwerksSubnet within the virtual network
  • Die öffentliche IP-Adresse, über die Sie auf Ressourcen im Internet zugreifen könnenPublic IP address that allows you to access resources across the Internet
  • Die Netzwerksicherheitsgruppe, mit der der Fluss des ein- und ausgehenden Netzwerkdatenverkehrs Ihrer Skalierungsgruppe gesteuert wird.Network security group that controls the flow of network traffic in and out of your scale set
  • Das Lastenausgleichsmodul, das den Datenverkehr auf der Grundlage von Lastenausgleichsregeln auf eine Gruppe definierter VMs verteilt.Load balancer that distributes traffic across a set of defined VMs using load balancer rules
  • Die VM-Skalierungsgruppe, die alle erstellten Ressourcen verwendetVirtual machine scale set that uses all the created resources

Es gibt zwei Möglichkeiten, das Beispielplaybook abzurufen:There are two ways to get the sample playbook:

  • Laden Sie das Playbook herunter, und speichern Sie es als vmss-create.yml.Download the playbook and save it to vmss-create.yml.
  • Erstellen Sie eine neue Datei mit dem Namen vmss-create.yml, und kopieren Sie die folgenden Inhalte in diese Datei:Create a new file named vmss-create.yml and copy into it the following contents:
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    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:
        name: "{{ vmss_lb_name }}"
        location: "{{ location }}"
        resource_group: "{{ resource_group }}"
        public_ip: "{{ vmss_name }}"
        probe_protocol: Tcp
        probe_port: 8080
        probe_interval: 10
        probe_fail_count: 3
        protocol: Tcp
        load_distribution: Default
        frontend_port: 80
        backend_port: 8080
        idle_timeout: 4
        natpool_frontend_port_start: 50000
        natpool_frontend_port_end: 50040
        natpool_backend_port: 22
        natpool_protocol: Tcp

    - name: Create Scale Set
      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_lb_name }}"
        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

Beachten Sie vor dem Ausführen des Playbooks die folgenden Hinweise:Before running the playbook, see the following notes:

  • Ersetzen Sie im Abschnitt vars den Platzhalter {{ admin_password }} durch Ihr eigenes Kennwort.In the vars section, replace the {{ admin_password }} placeholder with your own password.

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-create.yml

Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt:After running the playbook, you see output similar to the following results:

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

Anzeigen der Anzahl von VM-InstanzenView the number of VM instances

Die konfigurierte Skalierungsgruppe verfügt derzeit über zwei Instanzen.The configured scale set currently has two instances. Die folgenden Schritte werden verwendet, um diesen Wert zu bestätigen:The following steps are used to confirm that value:

  1. Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.

  2. Navigieren Sie zu der Skalierungsgruppe, die Sie konfiguriert haben.Navigate to the scale set you configured.

  3. Der Name der Skalierungsgruppe wird mit der Anzahl von Instanzen in Klammern angezeigt: Standard_DS1_v2 (2 instances).You see the scale set name with the number of instances in parenthesis: Standard_DS1_v2 (2 instances)

  4. Sie können die Änderung auch per Azure Cloud Shell überprüfen, indem Sie den folgenden Befehl ausführen:You can also verify the number of instances with the Azure Cloud Shell by running the following command:

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

    In den Ergebnissen der Ausführung des Azure CLI-Befehls in Cloud Shell sehen Sie, dass jetzt drei Instanzen vorhanden sind:The results of running the Azure CLI command in Cloud Shell show that three instances now exist:

    {
      "capacity": 3,
    }
    

Horizontales Hochskalieren einer SkalierungsgruppeScale out a scale set

Mit dem Playbookcode in diesem Abschnitt werden Informationen zur Skalierungsgruppe abgerufen, und die Kapazität wird von 2 in 3 geändert.The playbook code in this section retrieves information about the scale set and changes its capacity from two to three.

Es gibt zwei Möglichkeiten, das Beispielplaybook abzurufen:There are two ways to get the sample playbook:

  • Laden Sie das Playbook herunter, und speichern Sie es als vmss-scale-out.yml.Download the playbook and save it to vmss-scale-out.yml.
  • Erstellen Sie eine neue Datei mit dem Namen vmss-scale-out.yml, und kopieren Sie die folgenden Inhalte in diese Datei:Create a new file named vmss-scale-out.yml and copy into it the following contents:
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
  tasks: 
    - name: Get scaleset info
      azure_rm_virtualmachine_scaleset_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        format: curated
      register: output_scaleset

    - name: Dump scaleset info
      debug:
        var: output_scaleset

    - name: Modify scaleset (change the capacity to 3)
      set_fact:
        body: "{{ output_scaleset.ansible_facts.azure_vmss[0] | combine({'capacity': 3}, recursive=True) }}"

    - name: Update something in that scale set
      azure_rm_virtualmachinescaleset: "{{ body }}"

Führen Sie das Playbook mit dem Befehl ansible-playbook aus:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-scale-out.yml

Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt:After running the playbook, you see output similar to the following results:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Get scaleset info] 
ok: [localhost]

TASK [Dump scaleset info] 
ok: [localhost] => {
    "output_scaleset": {
        "ansible_facts": {
            "azure_vmss": [
                {
                    ......
                }
            ]
        },
        "changed": false,
        "failed": false
    }
}

TASK [Modify scaleset (set upgradePolicy to Automatic and capacity to 3)] 
ok: [localhost]

TASK [Update something in that scale set] 
changed: [localhost]

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

Überprüfen der ErgebnisseVerify the results

Überprüfen Sie die Ergebnisse Ihrer Arbeit über das Azure-Portal:Verify your results of your work via the Azure portal:

  1. Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.

  2. Navigieren Sie zu der Skalierungsgruppe, die Sie konfiguriert haben.Navigate to the scale set you configured.

  3. Der Name der Skalierungsgruppe wird mit der Anzahl von Instanzen in Klammern angezeigt: Standard_DS1_v2 (3 instances).You see the scale set name with the number of instances in parenthesis: Standard_DS1_v2 (3 instances)

  4. Sie können die Änderung auch mithilfe von Azure Cloud Shell überprüfen, indem Sie den folgenden Befehl ausführen:You can also verify the change with the Azure Cloud Shell by running the following command:

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

    In den Ergebnissen der Ausführung des Azure CLI-Befehls in Cloud Shell sehen Sie, dass jetzt drei Instanzen vorhanden sind:The results of running the Azure CLI command in Cloud Shell show that three instances now exist:

    {
      "capacity": 3,
    }
    

Nächste SchritteNext steps