Поделиться через


Руководство. Создание масштабируемого набора виртуальной машины или виртуальной машины из Общая коллекция образов Azure с помощью Ansible

Важно!

Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.9 (или последующей версии).

Общая коллекция образов — это служба, которая позволяет легко предоставлять общий доступ к управляемым пользователями образам, упорядочивать их а также управлять ими. Эту функцию целесообразно использовать в сценариях, где осуществляется обслуживание и публикация многих образов для совместного использования. Пользовательские образы можно совместно использовать между подписками и клиентами Microsoft Entra. Образы можно также реплицировать в несколько регионов для более быстрого масштабирования развертываний.

Вы узнаете, как выполнять следующие задачи:

  • Создание универсальной виртуальной машины и пользовательского образа.
  • Создание Общей коллекции образов.
  • Создание общего образа и версии образа.
  • Создание виртуальной машины с помощью универсального образа.
  • Создание масштабируемого набора виртуальных машин с помощью универсального образа.
  • Получение сведений об Общей коллекции образов, образе и версии.

Необходимые компоненты

Получение примера сборников схем

Существует два способа получения полного набора с примерами сборников схем:

  • Скачайте папку SIG и сохраните ее на локальном компьютере.
  • Создайте файл для каждого раздела и скопируйте в него пример сборника схем.

Файл vars.yml содержит переменные, используемые всеми примерами сборника схем для этого учебника. Вы можете изменить файл, чтобы предоставить уникальные имена и значения.

Первый пример сборника схем 00-prerequisites.yml создает все необходимое для работы с этим учебником:

  • группу ресурсов, которая является логическим контейнером, где происходит развертывание ресурсов Azure и управление ими;
  • виртуальную сеть, подсеть, общедоступный IP-адрес и сетевую карту для виртуальной машины;
  • исходную виртуальную машину, используемую для создания универсального образа.
- 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

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook 00-prerequisites.yml

На портале Azure проверьте группу ресурсов, которую вы указали в vars.yml, чтобы просмотреть созданную виртуальную машину и различные ресурсы.

Подготовка виртуальной машины и создание пользовательского образа

Следующий сборник схем 01a-create-generalized-image.yml обобщает исходную виртуальную машину, созданную на предыдущем шаге, а затем создает на ее основе пользовательский образ.

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

Запустите сборник схем с помощью команды ansible-playbook.

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

Проверьте группу ресурсов и убедитесь, что testimagea отображается.

Коллекция образов — это репозиторий для совместного использования образов и управления ими. Код из примера сборника схем в 02-create-shared-image-gallery.yml создает Общую коллекцию образов в группе ресурсов.

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

Запустите сборник схем с помощью команды ansible-playbook.

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

Теперь в группе ресурсов можно увидеть новую коллекцию myGallery.

Создание общего образа и версии образа.

Следующий сборник схем 03a-create-shared-image-generalized.yml создает определение и версию образа.

Определение образа включает в себя: тип образа (Windows или Linux), заметки о выпуске, а также минимальные и максимальные требования к памяти. Версия образа — это версия этого образа. Коллекция, определение образа и версия образа помогают упорядочить образы в логические группы.

- 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

Запустите сборник схем с помощью команды ansible-playbook.

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

Теперь группа ресурсов содержит определение и версию образа для коллекции.

Создание виртуальной машины на основе универсального образа

Наконец, запустите 04a-create-vm-using-generalized-image.yml, чтобы создать виртуальную машину на основе универсального образа, созданного на предыдущем шаге.

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

Запустите сборник схем с помощью команды ansible-playbook.

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

Создание масштабируемого набора виртуальных машин на основе универсального образа

Вы также можете создать масштабируемый набор виртуальных машин на основе универсального образа. Для этого запустите 05a-create-vmss-using-generalized-image.yml.

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

Запустите сборник схем с помощью команды ansible-playbook.

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

Чтобы получить сведения о коллекции, определении и версии образа, запустите 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 }}"

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook 06-get-info.yml

Удаление общего образа

Чтобы удалить ресурсы коллекции, обратитесь к примеру сборника схем 07-delete-gallery.yml. Удалите ресурсы в обратном порядке. Начните с удаления версии образа. После удаления всех версий образа вы можете удалить определение образа. Затем вы можете удалить коллекцию.

- 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

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook 07-delete-gallery.yml

Очистка ресурсов

  1. Сохраните следующий код как delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Чтобы запустить сборник схем, выполните команду ansible-playbook. Замените заполнитель именем удаляемой группы ресурсов. В указанной группе ресурсов будут удалены все ресурсы.

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

    Основные моменты:

    • В связи с наличием переменной register и раздела debug в сборнике схем результаты будут отображены после завершения команды.

Следующие шаги