Lernprogramm: Konfigurieren von Skalierungssätzen für virtuelle Computer in Azure mithilfe von Ansible

Wichtig

Für die Ausführung der Beispielplaybooks in diesem Artikel ist mindestens Ansible 2.9 erforderlich.

Azure-VM-Skalierungsgruppen sind eine Azure-Funktion, mit der Sie eine Gruppe von identischen virtuellen Computern mit Lastenausgleich konfigurieren können. Durch Skalierungsgruppen entstehen keine zusätzlichen Kosten, und sie werden aus virtuellen Computern erstellt. Sie zahlen nur für die zugrunde liegenden Computeressourcen, z. B. die VM-Instanzen, den Lastenausgleich oder den Speicher für verwaltete Datenträger. Mit Skalierungsgruppen werden die Verwaltungs- und Automatisierungsebenen für die Ausführung und Skalierung Ihrer Anwendungen bereitgestellt. Sie können stattdessen einzelne virtuelle Computer manuell erstellen und verwalten. Die Verwendung von Skalierungsgruppen bietet jedoch zwei wesentliche Vorteile. Sie sind in Azure integriert und skalieren Ihre virtuellen Computer automatisch entsprechend den Anwendungsanforderungen.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

  • Konfigurieren der Ressourcen für einen virtuellen Computer
  • Konfigurieren einer Skalierungsgruppe
  • Skalieren der Skalierungsgruppe durch die Erhöhung der Anzahl von VM-Instanzen

Voraussetzungen

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Konfigurieren einer Skalierungsgruppe

Mit dem Playbookcode in diesem Abschnitt werden die folgenden Ressourcen definiert:

  • Die Ressourcengruppe, in der Ihre gesamten Ressourcen bereitgestellt werden.
  • Das virtuelle Netzwerk im Adressraum 10.0.0.0/16
  • Das Subnetz innerhalb des virtuellen Netzwerks
  • Die öffentliche IP-Adresse, über die Sie auf Ressourcen im Internet zugreifen können
  • Die Netzwerksicherheitsgruppe, mit der der Fluss des ein- und ausgehenden Netzwerkdatenverkehrs Ihrer Skalierungsgruppe gesteuert wird.
  • Das Lastenausgleichsmodul, das den Datenverkehr auf der Grundlage von Lastenausgleichsregeln auf eine Gruppe definierter VMs verteilt.
  • Die VM-Skalierungsgruppe, die alle erstellten Ressourcen verwendet

Es gibt zwei Möglichkeiten, das Beispielplaybook abzurufen:

  • Laden Sie das Playbook herunter, und speichern Sie die Datei als vmss-create.yml.

  • Erstelle eine neue Datei mit dem Namen vmss-create.yml. Fügen Sie den folgenden Code in die neue Datei ein:

- 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

Beachten Sie vor dem Ausführen des Playbooks die folgenden Hinweise:

  • Ersetzen Sie im Abschnitt vars den Platzhalter {{ admin_password }} durch Ihr eigenes Kennwort.

Führen Sie das Playbook mithilfe von ansible-playbook aus.

ansible-playbook vmss-create.yml

Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt:

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-Instanzen

Die konfigurierte Skalierungsgruppe verfügt derzeit über zwei Instanzen. Die folgenden Schritte werden verwendet, um diesen Wert zu bestätigen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu der Skalierungsgruppe, die Sie konfiguriert haben.

  3. Der Name der Skalierungsgruppe wird mit der Anzahl von Instanzen in Klammern angezeigt: 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:

    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 zwei Instanzen vorhanden sind:

    {
      "capacity": 2,
    }
    

Aufskalieren einer Skalierungsgruppe

Mit dem Playbookcode in diesem Abschnitt werden Informationen zur Skalierungsgruppe abgerufen, und die Kapazität wird von 2 in 3 geändert.

Es gibt zwei Möglichkeiten, das Beispielplaybook abzurufen:

  • Laden Sie das Playbook herunter, und speichern Sie es als vmss-scale-out.yml.

  • Erstelle eine neue Datei mit dem Namen vmss-scale-out.yml. Fügen Sie den folgenden Code in die neue Datei ein:

---
- 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 }}"

Führen Sie das Playbook mithilfe von ansible-playbook aus.

ansible-playbook vmss-scale-out.yml

Nach dem Ausführen des Playbooks wird in etwa die folgende Ausgabe angezeigt:

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

Überprüfen der Ergebnisse

Überprüfen Sie die Ergebnisse Ihrer Arbeit über das Azure-Portal:

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu der Skalierungsgruppe, die Sie konfiguriert haben.

  3. Der Name der Skalierungsgruppe wird mit der Anzahl von Instanzen in Klammern angezeigt: 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:

    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:

    {
      "capacity": 3,
    }
    

Nächste Schritte