Samouczek: wdrażanie aplikacji w zestawach skalowania maszyn wirtualnych na platformie Azure przy użyciu rozwiązania Ansible

Ważne

Rozwiązanie Ansible w wersji 2.7 (lub nowszej) jest wymagane do uruchomienia przykładowych podręczników w tym artykule.

Zestawy skalowania maszyn wirtualnych platformy Azure to funkcja platformy Azure, która umożliwia skonfigurowanie grupy identycznych maszyn wirtualnych o zrównoważonym obciążeniu. Zestawy skalowania nie mają dodatkowych kosztów i są tworzone na podstawie maszyn wirtualnych. Płacisz tylko za bazowe zasoby obliczeniowe, takie jak wystąpienia maszyn wirtualnych, moduły równoważenia obciążenia lub magazyn dysków zarządzanych. Zestawy skalowania udostępniają warstwy zarządzania i automatyzacji do uruchamiania i skalowania Twoich aplikacji. Zamiast tego można ręcznie tworzyć poszczególne maszyny wirtualne i zarządzać nimi. Istnieją jednak dwie kluczowe korzyści wynikające z używania zestawów skalowania. Są one wbudowane na platformie Azure i automatycznie skalują maszyny wirtualne zgodnie z potrzebami aplikacji.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Pobieranie informacji o hoście dla grupy maszyn wirtualnych platformy Azure
  • Klonowanie i tworzenie przykładowej aplikacji
  • Instalowanie środowiska JRE (Java Runtime Environment) w zestawie skalowania
  • Wdrażanie aplikacji Java w zestawie skalowania

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Usługa git - git jest używana do pobrania przykładu w języku Java używanego w tym samouczku.
  • Java SE Development Kit (JDK) — zestaw JDK służy do utworzenia przykładowego projektu w języku Java.
  • Narzędzie Apache Maven Apache Maven - służy do kompilowania przykładowego projektu Java.

Pobieranie informacji o hoście

Kod podręcznika w tej sekcji pobiera informacje o hoście dla grupy maszyn wirtualnych. Kod pobiera publiczne adresy IP i moduł równoważenia obciążenia w określonej grupie zasobów i tworzy grupę hostów o nazwie scalesethosts w spisie.

Zapisz następujący przykładowy podręcznik jako 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 }}"

Przygotowywanie aplikacji do wdrożenia

Kod podręcznika w tej sekcji służy git do klonowania przykładowego projektu Java z usługi GitHub i kompilowania projektu.

Zapisz następujący podręcznik jako 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"

Uruchom przykładowy podręcznik rozwiązania Ansible za pomocą następującego polecenia:

ansible-playbook app.yml

Po uruchomieniu podręcznika zobaczysz dane wyjściowe podobne do następujących wyników:

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

Wdrażanie aplikacji w zestawie skalowania

Kod podręcznika w tej sekcji służy do:

  • Instalowanie środowiska JRE w grupie hostów o nazwie saclesethosts
  • Wdrażanie aplikacji Java w grupie hostów o nazwie saclesethosts

Istnieją dwa sposoby pobrania przykładowego podręcznika:

  • Pobierz podręcznik i zapisz go w pliku vmss-setup-deploy.yml.

  • Utwórz nowy plik o nazwie vmss-setup-deploy.yml. Wstaw następujący kod do nowego pliku:

- 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

Przed uruchomieniem podręcznika zapoznaj się z następującymi uwagami:

  • vars W sekcji zastąp {{ admin_password }} symbol zastępczy własnym hasłem.

  • Aby użyć typu połączenia ssh z hasłami, zainstaluj program sshpass:

    Ubuntu:

    apt-get install sshpass
    

    Centos:

    yum install sshpass
    
  • W niektórych środowiskach może wystąpić błąd dotyczący używania hasła SSH zamiast klucza. Jeśli wystąpi ten błąd, możesz wyłączyć sprawdzanie klucza hosta, dodając następujący wiersz do /etc/ansible/ansible.cfg lub ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    

Uruchom podręcznik za pomocą następującego polecenia:

ansible-playbook vmss-setup-deploy.yml

Dane wyjściowe z uruchomienia polecenia ansible-playbook wskazują, że przykładowa aplikacja Java została zainstalowana w grupie hostów zestawu skalowania:

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

Weryfikowanie wyników

Sprawdź wyniki pracy, przechodząc do adresu URL modułu równoważenia obciążenia dla zestawu skalowania:

Java app running in a scale set in Azure.

Następne kroki