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.
Zainstaluj oprogramowanie Ansible: Wykonaj jedną z następujących opcji:
- Instalowanie i konfigurowanie rozwiązania Ansible na maszynie wirtualnej z systemem Linux
- Skonfiguruj usługę Azure Cloud Shell i — jeśli nie masz dostępu do maszyny wirtualnej z systemem Linux — utwórz maszynę wirtualną za pomocą rozwiązania Ansible.
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 interface 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.yml
uogó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.
Tworzenie galerii obrazów udostępnionych
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 , myGallery
w 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
Uzyskiwanie informacji o galerii
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
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
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
idebug
sekcję podręcznika wyniki są wyświetlane po zakończeniu polecenia.
- Ze względu na zmienną