Samouczek: tworzenie maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych z galerii obrazów udostępnionych platformy Azure przy użyciu rozwiązania Ansible

Ważne

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

Galeria obrazów udostępnionych to usługa, która umożliwia łatwe zarządzanie obrazami zarządzanymi przez użytkownika, udostępnianie i organizowanie ich. Ta funkcja jest przydatna w scenariuszach, w których wiele obrazów jest utrzymywanych i udostępnianych. Obrazy niestandardowe można udostępniać między subskrypcjami i między dzierżawami firmy Microsoft Entra. Obrazy można również replikować do wielu regionów w celu szybszego skalowania wdrożenia.

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

  • Tworzenie uogólnionej maszyny wirtualnej i obrazu niestandardowego
  • Tworzenie galerii obrazów udostępnionych
  • Tworzenie udostępnionego obrazu i wersji obrazu
  • Tworzenie maszyny wirtualnej przy użyciu uogólnionego obrazu
  • Tworzenie zestawu skalowania maszyn wirtualnych przy użyciu uogólnionego obrazu
  • Uzyskaj informacje o galerii obrazów udostępnionych, obrazach i wersji.

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Pobieranie przykładowych podręczników

Istnieją dwa sposoby uzyskania kompletnego zestawu przykładowych podręczników:

  • Pobierz folder SIG i zapisz go na komputerze lokalnym.
  • Utwórz nowy plik dla każdej sekcji i skopiuj w nim przykładowy podręcznik.

Plik vars.yml zawiera zmienne używane przez wszystkie przykładowe podręczniki na potrzeby tego samouczka. Plik można edytować, aby podać unikatowe nazwy i wartości.

Pierwszy przykładowy podręcznik 00-prerequisites.yml tworzy elementy niezbędne do ukończenia tego samouczka:

  • Grupa zasobów, która jest kontenerem logicznym, w którym są wdrażane i zarządzane zasoby platformy Azure.
  • Sieć wirtualna; Podsieci; publiczny adres IP i karta interfejsu sieciowego dla maszyny wirtualnej.
  • Źródłowa maszyna wirtualna, która służy do tworzenia uogólnionego obrazu.
- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
    - name: Create resource group if doesn't exist
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        location: "{{ location }}"
    
    - name: Create virtual network
      azure_rm_virtualnetwork:
        resource_group: "{{ resource_group }}"
        name: "{{ virtual_network_name }}"
        address_prefixes: "10.0.0.0/16"

    - name: Add subnet
      azure_rm_subnet:
        resource_group: "{{ resource_group }}"
        name: "{{ subnet_name }}"
        address_prefix: "10.0.1.0/24"
        virtual_network: "{{ virtual_network_name }}"

    - name: Create public IP address
      azure_rm_publicipaddress:
        resource_group: "{{ resource_group }}"
        allocation_method: Static
        name: "{{ ip_name }}"

    - name: Create virtual network inteface cards for VM A and B
      azure_rm_networkinterface:
        resource_group: "{{ resource_group }}"
        name: "{{ network_interface_name }}"
        virtual_network: "{{ virtual_network_name }}"
        subnet: "{{ subnet_name }}"

    - name: Create VM
      azure_rm_virtualmachine:
        resource_group: "{{ resource_group }}"
        name: "{{ source_vm_name }}"
        admin_username: testuser
        admin_password: "Password1234!"
        vm_size: Standard_B1ms
        network_interfaces: "{{ network_interface_name }}"
        image:
          offer: UbuntuServer
          publisher: Canonical
          sku: 16.04-LTS
          version: latest

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 00-prerequisites.yml

W witrynie Azure Portal sprawdź grupę zasobów określoną w programie vars.yml , aby wyświetlić nową maszynę wirtualną i różne utworzone zasoby.

Uogólnij maszynę wirtualną i utwórz obraz niestandardowy

Następny podręcznik , 01a-create-generalized-image.ymluogólnia źródłową maszynę wirtualną utworzoną w poprzednim kroku, a następnie tworzy obraz niestandardowy na jego podstawie.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
    - name: Generalize VM
      azure_rm_virtualmachine:
        resource_group: "{{ resource_group }}"
        name: "{{ source_vm_name }}"
        generalized: yes

    - name: Create custom image
      azure_rm_image:
        resource_group: "{{ resource_group }}"
        name: "{{ image_name }}"
        source: "{{ source_vm_name }}"

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 01a-create-generalized-image.yml

Sprawdź grupę zasobów i upewnij się, że testimagea jest wyświetlana.

Galeria obrazów to repozytorium do udostępniania obrazów i zarządzania nimi. Przykładowy kod podręcznika w programie 02-create-shared-image-gallery.yml tworzy galerię obrazów udostępnionych w grupie zasobów.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
    - name: Create shared image gallery
      azure_rm_gallery:
        resource_group: "{{ resource_group }}"
        name: "{{ shared_gallery_name }}"
        location: "{{ location }}"
        description: This is the gallery description.

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 02-create-shared-image-gallery.yml

Teraz zostanie wyświetlona nowa galeria , myGalleryw grupie zasobów.

Tworzenie udostępnionego obrazu i wersji obrazu

Następny podręcznik 03a-create-shared-image-generalized.yml tworzy definicję obrazu i wersję obrazu.

Definicje obrazów obejmują typ obrazu (Windows lub Linux), informacje o wersji oraz minimalne i maksymalne wymagania dotyczące pamięci. Wersja obrazu to wersja obrazu. Galeria, definicja obrazu i wersja obrazu ułatwiają organizowanie obrazów w grupach logicznych.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
    - name: Create shared image
      azure_rm_galleryimage:
        resource_group: "{{ resource_group }}"
        gallery_name: "{{ shared_gallery_name }}"
        name: "{{ shared_image_name }}"
        location: "{{ location }}"
        os_type: linux
        os_state: generalized
        identifier:
          publisher: myPublisherName
          offer: myOfferName
          sku: mySkuName
        description: Image description
    
    - name: Create or update a simple gallery image version.
      azure_rm_galleryimageversion:
        resource_group: "{{ resource_group }}"
        gallery_name: "{{ shared_gallery_name }}"
        gallery_image_name: "{{ shared_image_name }}"
        name: "{{ shared_image_version }}"
        location: "{{ location }}"
        publishing_profile:
          end_of_life_date: "2020-10-01t00:00:00+00:00"
          exclude_from_latest: yes
          replica_count: 3
          storage_account_type: Standard_LRS
          target_regions:
            - name: West US
              regional_replica_count: 1
            - name: East US
              regional_replica_count: 2
              storage_account_type: Standard_ZRS
          managed_image:
            name: "{{ image_name }}"
            resource_group: "{{ resource_group }}"
      register: output

    - debug:
        var: output

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 03a-create-shared-image-generalized.yml

Grupa zasobów ma teraz definicję obrazu i wersję obrazu dla galerii.

Tworzenie maszyny wirtualnej na podstawie uogólnionego obrazu

Na koniec uruchom polecenie 04a-create-vm-using-generalized-image.yml , aby utworzyć maszynę wirtualną na podstawie uogólnionego obrazu utworzonego w poprzednim kroku.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
  - name: Create VM using shared image
    azure_rm_virtualmachine:
      resource_group: "{{ resource_group }}"
      name: "{{ vm_name }}"
      vm_size: Standard_DS1_v2
      admin_username: adminUser
      admin_password: PassWord01
      managed_disk_type: Standard_LRS
      image:
        id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 04a-create-vm-using-generalized-image.yml

Tworzenie zestawów skalowania maszyn wirtualnych na podstawie uogólnionego obrazu

Można również utworzyć zestaw skalowania maszyn wirtualnych na podstawie uogólnionego obrazu. Uruchom 05a-create-vmss-using-generalized-image.yml polecenie , aby to zrobić.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
  - name: Create a virtual machine scale set using a shared image
    azure_rm_virtualmachinescaleset:
      resource_group: "{{ resource_group }}"
      name: "{{ vmss_name }}"
      vm_size: Standard_DS1_v2
      admin_username: adminUser
      admin_password: PassWord01
      capacity: 2
      virtual_network_name: "{{ virtual_network_name }}"
      upgrade_policy: Manual
      subnet_name: "{{ subnet_name }}"
      managed_disk_type: Standard_LRS
      image:
        id: "/subscriptions/{{ lookup('env', 'AZURE_SUBSCRIPTION_ID') }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Compute/galleries/{{ shared_gallery_name }}/images/{{ shared_image_name }}/versions/{{ shared_image_version }}"

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 05a-create-vmss-using-generalized-image.yml

Aby uzyskać informacje o galerii, definicji obrazu i wersji, możesz uruchomić polecenie 06-get-info.yml.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
  - name: Get Shared Image Gallery information
    azure_rm_gallery_info:
      resource_group: "{{ resource_group }}"
      name: "{{ shared_gallery_name }}"
  - name: Get shared image information
    azure_rm_galleryimage_info:
      resource_group: "{{ resource_group }}"
      gallery_name: "{{ shared_gallery_name }}"
      name: "{{ shared_image_name }}"
  - name: Get Shared Image Gallery image version information
    azure_rm_galleryimageversion_info:
      resource_group: "{{ resource_group }}"
      gallery_name: "{{ shared_gallery_name }}"
      gallery_image_name: "{{ shared_image_name }}"
      name: "{{ shared_image_version }}"

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 06-get-info.yml

Usuwanie udostępnionego obrazu

Aby usunąć zasoby galerii, zapoznaj się z przykładowym podręcznikiem 07-delete-gallery.yml. Usuwanie zasobów w odwrotnej kolejności. Zacznij od usunięcia wersji obrazu. Po usunięciu wszystkich wersji obrazu można usunąć definicję obrazu. Po usunięciu wszystkich definicji obrazów możesz usunąć galerię.

- hosts: localhost
  connection: local
  vars_files:
    - ./vars.yml

  tasks:
  - name: Delete gallery image version.
    azure_rm_galleryimageversion:
      resource_group: "{{ resource_group }}"
      gallery_name: "{{ shared_gallery_name }}"
      gallery_image_name: "{{ shared_image_name }}"
      name: "{{ shared_image_version }}"
      state: absent

  - name: Delete gallery image
    azure_rm_galleryimage:
      resource_group: "{{ resource_group }}"
      gallery_name: "{{ shared_gallery_name }}"
      name: "{{ shared_image_name }}"
      state: absent

  - name: Delete a simple gallery.
    azure_rm_gallery:
      resource_group: "{{ resource_group }}"
      name: "{{ shared_gallery_name }}"
      state: absent

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook 07-delete-gallery.yml

Czyszczenie zasobów

  1. Zapisz następujący kod jako delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Uruchom podręcznik przy użyciu polecenia ansible-playbook . Zastąp symbol zastępczy nazwą grupy zasobów, która ma zostać usunięta. Wszystkie zasoby w grupie zasobów zostaną usunięte.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Kluczowe punkty:

    • Ze względu na zmienną register i debug sekcję podręcznika wyniki są wyświetlane po zakończeniu polecenia.

Następne kroki