Freigeben über


Anleitung: Bereitstellen von Apps auf virtuellen Maschinen-Skalierungsgruppen in Azure mithilfe von Ansible

Von Bedeutung

Ansible 2.7 (oder höher) ist erforderlich, um die Beispiel-Playbooks in diesem Artikel auszuführen.

Skalierungssätze für virtuelle Azure-Computer sind ein Azure-Feature, mit dem Sie eine Gruppe identischer VMs mit Lastenausgleich konfigurieren können. Es gibt keine zusätzlichen Kosten zum Skalieren von Sätzen, die von virtuellen Computern erstellt werden. Sie zahlen nur für die zugrunde liegenden Computeressourcen wie vm-Instanzen, Lastenausgleichsgeräte oder verwalteten Datenträgerspeicher. Mit Skalierungssätzen werden die Verwaltungs- und Automatisierungsebenen bereitgestellt, um Ihre Anwendungen auszuführen und zu skalieren. Sie können stattdessen einzelne virtuelle Computer manuell erstellen und verwalten. Es gibt jedoch zwei wichtige Vorteile für die Verwendung von Skalierungssätzen. Sie sind in Azure integriert, und sie skalieren Ihre virtuellen Computer automatisch auf anwendungsanforderungen.

In diesem Artikel erfahren Sie, wie Sie:

  • Abrufen von Hostinformationen für eine Gruppe von Azure-VMs
  • Klonen und Erstellen der Beispiel-App
  • Installieren der JRE (Java-Runtime-Umgebung) in einem Skalierungssatz
  • Bereitstellen der Java-Anwendung in einem Skalierungssatz

Voraussetzungen

  • Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
  • git - git wird verwendet, um ein Java-Beispiel herunterzuladen, das in diesem Lernprogramm verwendet wird.
  • Java SE Development Kit (JDK) – Das JDK wird verwendet, um das Java-Beispielprojekt zu erstellen.
  • Apache Maven - Apache Maven wird verwendet, um das Java-Beispielprojekt zu erstellen.

Abrufen von Hostinformationen

Der Playbook-Code in diesem Abschnitt ruft Hostinformationen für eine Gruppe virtueller Computer ab. Der Code ruft die öffentlichen IP-Adressen und das Lastenausgleichsmodul in einer angegebenen Ressourcengruppe ab und erstellt eine Hostgruppe, die im Bestand benannt ist scalesethosts .

Speichern Sie das folgende Beispiel-Playbook unter get-hosts-tasks.yml:

- name: Get facts for all Public IPs within a resource groups
  azure_rm_publicipaddress_info:
    resource_group: "{{ resource_group }}"
  register: output_ip_address

- name: Get loadbalancer info
  azure_rm_loadbalancer_info:
    resource_group: "{{ resource_group }}"
    name: "{{ loadbalancer_name }}"
  register: output

- name: Add all hosts
  add_host:
    groups: scalesethosts
    hostname: "{{ output_ip_address.publicipaddresses[0].ip_address }}_{{ item.properties.frontendPort }}"
    ansible_host: "{{ output_ip_address.publicipaddresses[0].ip_address }}"
    ansible_port: "{{ item.properties.frontendPort }}"
    ansible_ssh_user: "{{ admin_username }}"
    ansible_ssh_pass: "{{ admin_password }}"
  with_items:
    - "{{ output.ansible_info.azure_loadbalancers[0].properties.inboundNatRules }}"

Vorbereiten einer Anwendung für die Bereitstellung

Der Playbook-Code in diesem Abschnitt verwendet git , um ein Java-Beispielprojekt von GitHub zu klonen und das Projekt zu erstellen.

Speichern Sie das folgende Playbook unter app.yml:

- hosts: localhost
  vars:
    repo_url: https://github.com/spring-guides/gs-spring-boot.git
    workspace: ~/src/helloworld

  tasks:
  - name: Git Clone sample app
    git:
      repo: "{{ repo_url }}"
      dest: "{{ workspace }}"

  - name: Build sample app
    shell: mvn package chdir="{{ workspace }}/complete"

Führen Sie das Ansible-Playbook mit dem folgenden Befehl aus.

ansible-playbook app.yml

Nach dem Ausführen des Playbooks wird eine Ausgabe angezeigt, die den folgenden Ergebnissen ähnelt:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Git Clone sample app] 
changed: [localhost]

TASK [Build sample app] 
changed: [localhost]

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

Die Anwendung in einer Skalierungsgruppe bereitstellen

Der Playbook-Code in diesem Abschnitt wird verwendet für:

  • Installieren der JRE auf einer Hostgruppe mit dem Namen saclesethosts
  • Bereitstellen der Java-Anwendung in einer Hostgruppe namens saclesethosts

Es gibt zwei Möglichkeiten, das Beispiel-Playbook abzurufen:

  • Laden Sie das Playbook herunter , und speichern Sie es auf vmss-setup-deploy.yml.

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

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    scaleset_name: myScaleSet
    loadbalancer_name: myScaleSetLb
    admin_username: azureuser
    admin_password: "{{ admin_password }}"
  tasks:
  - include: get-hosts-tasks.yml

- name: Install JRE on a scale set
  hosts: scalesethosts
  become: yes
  vars:
    workspace: ~/src/helloworld
    admin_username: azureuser

  tasks:
  - name: Install JRE
    apt:
      name: default-jre
      update_cache: yes

  - name: Copy app to Azure VM
    copy:
      src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
      dest: "/home/{{ admin_username }}/helloworld.jar"
      force: yes
      mode: 0755

  - name: Start the application
    shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
    async: 5000
    poll: 0

Bevor Sie das Playbook ausführen, lesen Sie die folgenden Hinweise:

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

  • Um den SSH-Verbindungstyp mit Kennwörtern zu verwenden, installieren Sie das sshpass-Programm:

    Ubuntu:

    apt-get install sshpass
    
  • In einigen Umgebungen wird möglicherweise ein Fehler bei der Verwendung eines SSH-Kennworts anstelle eines Schlüssels angezeigt. Wenn sie diesen Fehler erhalten, können Sie die Hostschlüsselüberprüfung deaktivieren, indem Sie die folgende Zeile /etc/ansible/ansible.cfg hinzufügen oder ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    

Führen Sie das Playbook mit dem folgenden Befehl aus:

ansible-playbook vmss-setup-deploy.yml

Die Ausgabe des Befehls "ansible-playbook" gibt an, dass die Java-Beispielanwendung in der Hostgruppe des Skalierungssatzes installiert wurde:

PLAY [localhost]

TASK [Gathering Facts]
ok: [localhost]

TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]

TASK [Get loadbalancer info]
ok: [localhost]

TASK [Add all hosts]
changed: [localhost] ...

PLAY [Install JRE on scale set]

TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]

TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]

TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]

PLAY RECAP
40.114.30.145_50000        : ok=4    changed=3    unreachable=0    failed=0
40.114.30.145_50003        : ok=4    changed=3    unreachable=0    failed=0
localhost                  : ok=4    changed=1    unreachable=0    failed=0

Überprüfen der Ergebnisse

Überprüfen Sie die Ergebnisse Ihrer Arbeit, indem Sie zur URL des Lastenausgleichs für Ihren Skalierungssatz navigieren:

Java-App, die in einem Skalierungssatz in Azure ausgeführt wird.

Nächste Schritte