Sdílet prostřednictvím


Kurz: Vytvoření škálovací sady virtuálních počítačů nebo virtuálních počítačů z Galerie sdílených imagí Azure pomocí Ansible

Důležité

K spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.9 (nebo novější).

Sdílená galerie imagí je služba, která umožňuje snadno spravovat, sdílet a organizovat vlastní spravované image. Tato funkce je užitečná pro scénáře, ve kterých se udržuje a sdílí mnoho imagí. Vlastní image je možné sdílet mezi předplatnými a mezi tenanty Microsoft Entra. Image je také možné replikovat do několika oblastí pro rychlejší škálování nasazení.

V tomto článku získáte informace o těchto tématech:

  • Vytvoření generalizovaného virtuálního počítače a vlastní image
  • Vytvoření služby Shared Image Gallery
  • Vytvoření sdílené image a verze image
  • Vytvoření virtuálního počítače pomocí generalizované image
  • Vytvoření škálovací sady virtuálních počítačů pomocí generalizované image
  • Získejte informace o sdílené galerii imagí, imagi a verzi.

Požadavky

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Získání ukázkových playbooků

Kompletní sadu ukázkových playbooků můžete získat dvěma způsoby:

  • Stáhněte složku SIG a uložte ji do místního počítače.
  • Vytvořte nový soubor pro každý oddíl a zkopírujte v něm ukázkový playbook.

Soubor vars.yml obsahuje proměnné používané všemi ukázkovými playbooky pro účely tohoto kurzu. Soubor můžete upravit tak, aby poskytoval jedinečné názvy a hodnoty.

První ukázkový playbook 00-prerequisites.yml vytvoří, co je nezbytné k dokončení tohoto kurzu:

  • Skupina prostředků, což je logický kontejner, ve kterém se nasazují a spravují prostředky Azure.
  • Virtuální síť; Podsítě; veřejná IP adresa a síťová karta virtuálního počítače.
  • Zdrojový virtuální počítač, který se používá k vytvoření generalizované image.
- 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

Spuštění playbooku pomocí ansible-playbooku

ansible-playbook 00-prerequisites.yml

Na webu Azure Portal zkontrolujte skupinu prostředků, ve vars.yml které jste zadali, a podívejte se na nový virtuální počítač a různé prostředky, které jste vytvořili.

Zobecnění virtuálního počítače a vytvoření vlastní image

Další playbook generalizuje 01a-create-generalized-image.ymlzdrojový virtuální počítač vytvořený v předchozím kroku a pak vytvoří vlastní image.

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

Spuštění playbooku pomocí ansible-playbooku

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

Zkontrolujte skupinu prostředků a ujistěte se, že testimagea se zobrazí.

Galerie imagí je úložiště pro sdílení a správu imagí. Vzorový kód playbooku ve 02-create-shared-image-gallery.yml vaší skupině prostředků vytvoří galerii sdílených imagí.

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

Spuštění playbooku pomocí ansible-playbooku

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

Teď se ve vaší skupině prostředků zobrazí nová galerie myGallery.

Vytvoření sdílené image a verze image

Další playbook 03a-create-shared-image-generalized.yml vytvoří definici image a verzi image.

Definice imagí zahrnují typ image (Windows nebo Linux), poznámky k verzi a minimální a maximální požadavky na paměť. Verze image je verze image. Galerie, definice obrázku a verze image vám pomůžou uspořádat obrázky v logických skupinách.

- 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

Spuštění playbooku pomocí ansible-playbooku

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

Vaše skupina prostředků teď má definici obrázku a verzi image pro vaši galerii.

Vytvoření virtuálního počítače na základě generalizované image

Nakonec spusťte vytvoření 04a-create-vm-using-generalized-image.yml virtuálního počítače na základě generalizované image, kterou jste vytvořili v předchozím 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 }}"

Spuštění playbooku pomocí ansible-playbooku

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

Vytvoření škálovacích sad virtuálních počítačů na základě generalizované image

Můžete také vytvořit škálovací sadu virtuálních počítačů na základě generalizované image. Spusťte 05a-create-vmss-using-generalized-image.yml to.

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

Spuštění playbooku pomocí ansible-playbooku

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

Informace o galerii, definici image a verzi získáte spuštěním příkazu 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 }}"

Spuštění playbooku pomocí ansible-playbooku

ansible-playbook 06-get-info.yml

Odstranění sdíleného obrázku

Pokud chcete odstranit prostředky galerie, projděte si ukázkový playbook 07-delete-gallery.yml. Odstraňte prostředky v obráceném pořadí. Začněte odstraněním verze image. Po odstranění všech verzí imagí můžete definici image odstranit. Po odstranění všech definic obrázků můžete galerii odstranit.

- 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

Spuštění playbooku pomocí ansible-playbooku

ansible-playbook 07-delete-gallery.yml

Vyčištění prostředků

  1. Uložte následující kód 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. Spusťte playbook pomocí příkazu ansible-playbook . Zástupný symbol nahraďte názvem skupiny prostředků, která se má odstranit. Odstraní se všechny prostředky v rámci skupiny prostředků.

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

    Klíčové body:

    • register Vzhledem k proměnné a debug části playbooku se výsledky zobrazí po dokončení příkazu.

Další kroky