Kurz: Aktualizace vlastní image škálovacích sad virtuálních počítačů Azure pomocí Ansible
Důležité
K spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.8 (nebo novější).
Škálovací sady virtuálních počítačů Azure jsou funkce Azure, která umožňuje nakonfigurovat skupinu identických virtuálních počítačů s vyrovnáváním zatížení. Škálovací sady nejsou žádné další náklady a jsou sestavené z virtuálních počítačů. Platíte jenom za základní výpočetní prostředky, jako jsou instance virtuálních počítačů, nástroje pro vyrovnávání zatížení nebo úložiště spravovaných disků. Škálovací sady poskytují vrstvy správy a automatizace pro spouštění a škálování aplikací. Místo toho můžete ručně vytvářet a spravovat jednotlivé virtuální počítače. Použití škálovacích sad ale má dvě klíčové výhody. Jsou integrované do Azure a automaticky škálují vaše virtuální počítače tak, aby vyhovovaly potřebám aplikací.
Po nasazení virtuálního počítače nakonfigurujete virtuální počítač se softwarem, který vaše aplikace potřebuje. Místo této úlohy konfigurace pro každý virtuální počítač můžete vytvořit vlastní image. Vlastní image je snímek existujícího virtuálního počítače, který obsahuje veškerý nainstalovaný software. Při konfiguraci škálovací sady zadáte image, která se má použít pro virtuální počítače dané škálovací sady. Pomocí vlastní image je každá instance virtuálního počítače pro vaši aplikaci stejně nakonfigurovaná. Někdy může být potřeba aktualizovat vlastní image škálovací sady. Tento úkol je zaměřen na tento kurz.
V tomto článku získáte informace o těchto tématech:
- Konfigurace dvou virtuálních počítačů pomocí HTTPD
- Vytvoření vlastní image z existujícího virtuálního počítače
- Vytvoření škálovací sady z image
- Aktualizace vlastní image
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.
Nainstalujte Ansible: Proveďte jednu z následujících možností:
- Instalace a konfigurace Ansible na virtuálním počítači s Linuxem
- Nakonfigurujte Azure Cloud Shell a – pokud nemáte přístup k virtuálnímu počítači s Linuxem – vytvořte virtuální počítač pomocí Ansible.
Konfigurace dvou virtuálních počítačů
Kód playbooku v této části vytvoří dva virtuální počítače s protokolem HTTPD nainstalovaným na obou počítačích.
Na index.html
stránce pro každý virtuální počítač se zobrazí testovací řetězec:
- První virtuální počítač zobrazí hodnotu.
Image A
- Druhý virtuální počítač zobrazí hodnotu.
Image B
Tento řetězec má napodobovat konfiguraci jednotlivých virtuálních počítačů s jiným softwarem.
Ukázkový playbook můžete získat dvěma způsoby:
Stáhněte playbook a uložte ho do
create_vms.yml
souboru .Vytvořte nový soubor s názvem
create_vms.yml
. Do nového souboru vložte následující kód.
- name: Create two VMs (A and B) with HTTPS
hosts: localhost
connection: local
vars:
vm_name: vmforimage
admin_username: testuser
admin_password: Pass123$$$abx!
location: eastus
tasks:
- name: Create a resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}"
address_prefixes: "10.0.0.0/16"
- name: Create subnets for VM A and B
azure_rm_subnet:
resource_group: "{{ resource_group }}"
virtual_network: "{{ vm_name }}"
name: "{{ vm_name }}"
address_prefix: "10.0.1.0/24"
- name: Create Network Security Group that allows HTTP
azure_rm_securitygroup:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}"
rules:
- name: HTTP
protocol: Tcp
destination_port_range: 80
access: Allow
priority: 1002
direction: Inbound
- name: Create public IP addresses for VM A and B
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ vm_name }}_{{ item }}"
loop:
- A
- B
register: pip_output
- name: Create virtual network inteface cards for VM A and B
azure_rm_networkinterface:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}_{{ item }}"
virtual_network: "{{ vm_name }}"
subnet: "{{ vm_name }}"
public_ip_name: "{{ vm_name }}_{{ item }}"
security_group: "{{ vm_name }}"
loop:
- A
- B
- name: Create VM A and B
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}{{ item }}"
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
vm_size: Standard_B1ms
network_interfaces: "{{ vm_name }}_{{ item }}"
image:
offer: UbuntuServer
publisher: Canonical
sku: 16.04-LTS
version: latest
loop:
- A
- B
- name: Create VM Extension
azure_rm_virtualmachineextension:
resource_group: "{{ resource_group }}"
name: testVMExtension
virtual_machine_name: "{{ vm_name }}{{ item }}"
publisher: Microsoft.Azure.Extensions
virtual_machine_extension_type: CustomScript
type_handler_version: 2.0
auto_upgrade_minor_version: true
settings: {"commandToExecute": "sudo apt-get -y install apache2"}
loop:
- A
- B
- name: Create VM Extension
azure_rm_virtualmachineextension:
resource_group: "{{ resource_group }}"
name: testVMExtension
virtual_machine_name: "{{ vm_name }}{{ item }}"
publisher: Microsoft.Azure.Extensions
virtual_machine_extension_type: CustomScript
type_handler_version: 2.0
auto_upgrade_minor_version: true
settings: {"commandToExecute": "printf '<html><body><h1>Image {{ item }}</h1></body></html>' >> index.html; sudo cp index.html /var/www/html/"}
loop:
- A
- B
- debug:
msg: "Public IP Address A: {{ pip_output.results[0].state.ip_address }}"
- debug:
msg: "Public IP Address B: {{ pip_output.results[1].state.ip_address }}"
Spusťte playbook pomocí ansible-playbook
příkazu a nahraďte myrg
názvem vaší skupiny prostředků:
ansible-playbook create-vms.yml --extra-vars "resource_group=myrg"
debug
Vzhledem k oddílům playbooku ansible-playbook
příkaz vytiskne IP adresu každého virtuálního počítače. Zkopírujte tyto IP adresy pro pozdější použití.
Připojení ke dvěma virtuálním počítačům
V této části se připojíte ke každému virtuálnímu počítači. Jak jsme zmínili v předchozí části, řetězce Image A
a Image B
napodobují se dvěma odlišnými virtuálními počítači s různými konfiguracemi.
Pomocí IP adres z předchozí části otevřete prohlížeč a připojte se k jednotlivým virtuálním počítačům.
Vytváření imagí z každého virtuálního počítače
V tomto okamžiku máte dva virtuální počítače s mírně odlišnými konfiguracemi (jejich index.html
soubory).
Kód playbooku v této části vytvoří vlastní image pro každý virtuální počítač:
image_vmforimageA
– Vlastní image vytvořená pro virtuální počítač, který se zobrazujeImage A
na jeho domovské stránce.image_vmforimageB
– Vlastní image vytvořená pro virtuální počítač, který se zobrazujeImage B
na jeho domovské stránce.
Ukázkový playbook můžete získat dvěma způsoby:
Stáhněte playbook a uložte ho do
capture-images.yml
souboru .Vytvořte nový soubor s názvem
capture-images.yml
. Do nového souboru vložte následující kód:
- name: Capture VM Images
hosts: localhost
connection: local
vars:
vm_name: vmforimage
tasks:
- name: Stop and generalize VMs
azure_rm_virtualmachine:
resource_group: "{{ resource_group }}"
name: "{{ vm_name }}{{ item }}"
generalized: yes
loop:
- A
- B
- name: Create an images from a VMs
azure_rm_image:
resource_group: "{{ resource_group }}"
name: "image_{{ vm_name }}{{ item }}"
source: "{{ vm_name }}{{ item }}"
loop:
- A
- B
Spusťte playbook pomocí ansible-playbook
příkazu a nahraďte myrg
názvem vaší skupiny prostředků:
ansible-playbook capture-images.yml --extra-vars "resource_group=myrg"
Vytvoření škálovací sady pomocí image A
V této části se playbook používá ke konfiguraci následujících prostředků Azure:
- Veřejná IP adresa
- Load Balancer
- Škálovací sada, která odkazuje na
image_vmforimageA
Ukázkový playbook můžete získat dvěma způsoby:
Stáhněte playbook a uložte ho do
create-vmss.yml
souboru .Vytvořte nový soubor s názvem
create-vmss.yml
. Do nového souboru vložte následující kód:
---
- hosts: localhost
vars:
vmss_name: vmsstest
location: eastus
admin_username: vmssadmin
admin_password: User123!!!abc
vm_name: vmforimage
image_name: "image_vmforimageA"
tasks:
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
allocation_method: Static
name: "{{ vmss_name }}"
register: pip_output
- name: Create a load balancer
azure_rm_loadbalancer:
name: "{{ vmss_name }}lb"
location: "{{ location }}"
resource_group: "{{ resource_group }}"
public_ip: "{{ vmss_name }}"
probe_protocol: Tcp
probe_port: 80
probe_interval: 10
probe_fail_count: 3
protocol: Tcp
load_distribution: Default
frontend_port: 80
backend_port: 80
idle_timeout: 4
natpool_frontend_port_start: 50000
natpool_frontend_port_end: 50040
natpool_backend_port: 22
natpool_protocol: Tcp
- name: Create a scale set
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
ssh_password_enabled: true
capacity: 2
virtual_network_name: "{{ vm_name }}"
subnet_name: "{{ vm_name }}"
upgrade_policy: Manual
tier: Standard
managed_disk_type: Standard_LRS
os_disk_caching: ReadWrite
image:
name: "{{ image_name }}"
resource_group: "{{ resource_group }}"
load_balancer: "{{ vmss_name }}lb"
- debug:
msg: "Scale set public IP address: {{ pip_output.state.ip_address }}"
Spusťte playbook pomocí ansible-playbook
příkazu a nahraďte myrg
názvem vaší skupiny prostředků:
ansible-playbook create-vmss.yml --extra-vars "resource_group=myrg"
Vzhledem k debug
části playbooku ansible-playbook
příkaz vytiskne IP adresu škálovací sady. Zkopírujte tuto IP adresu pro pozdější použití.
Připojení ke škálovací sadě
Pomocí IP adresy z předchozí části se připojte ke škálovací sadě.
Jak jsme zmínili v předchozí části, řetězce Image A
a Image B
napodobují se dvěma odlišnými virtuálními počítači s různými konfiguracemi.
Škálovací sada odkazuje na vlastní image s názvem image_vmforimageA
. Vlastní image image_vmforimageA
byla vytvořena z virtuálního počítače, jehož domovská stránka se zobrazí Image A
.
V důsledku toho se zobrazí domovská stránka, která se zobrazí Image A
.
Nechte okno prohlížeče otevřené, až budete pokračovat k další části.
Změna vlastní image ve škálovací sadě a instancích upgradu
Kód playbooku v této části změní obrázek škálovací sady – od image_vmforimageA
do image_vmforimageB
. Aktualizují se také všechny aktuální virtuální počítače nasazené škálovací sadou.
Ukázkový playbook můžete získat dvěma způsoby:
Stáhněte playbook a uložte ho do
update-vmss-image.yml
souboru .Vytvořte nový soubor s názvem
update-vmss-image.yml
. Do nového souboru vložte následující kód:
- name: Update scale set image reference
hosts: localhost
connection: local
vars:
vmss_name: vmsstest
image_name: image_vmforimageB
admin_username: vmssadmin
admin_password: User123!!!abc
tasks:
- name: Update scale set - second image
azure_rm_virtualmachinescaleset:
resource_group: "{{ resource_group }}"
name: "{{ vmss_name }}"
vm_size: Standard_DS1_v2
admin_username: "{{ admin_username }}"
admin_password: "{{ admin_password }}"
ssh_password_enabled: true
capacity: 3
virtual_network_name: "{{ vmss_name }}"
subnet_name: "{{ vmss_name }}"
upgrade_policy: Manual
tier: Standard
managed_disk_type: Standard_LRS
os_disk_caching: ReadWrite
image:
name: "{{ image_name }}"
resource_group: "{{ resource_group }}"
load_balancer: "{{ vmss_name }}lb"
- name: List all of the instances
azure_rm_virtualmachinescalesetinstance_facts:
resource_group: "{{ resource_group }}"
vmss_name: "{{ vmss_name }}"
register: instances
- debug:
var: instances
- name: manually upgrade all the instances
azure_rm_virtualmachinescalesetinstance:
resource_group: "{{ resource_group }}"
vmss_name: "{{ vmss_name }}"
instance_id: "{{ item.instance_id }}"
latest_model: yes
with_items: "{{ instances.instances }}"
Spusťte playbook pomocí ansible-playbook
příkazu a nahraďte myrg
názvem vaší skupiny prostředků:
ansible-playbook update-vmss-image.yml --extra-vars "resource_group=myrg"
Vraťte se do prohlížeče a aktualizujte stránku, abyste viděli, že se aktualizovala základní vlastní image virtuálního počítače.
Vyčištění prostředků
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
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é adebug
části playbooku se výsledky zobrazí po dokončení příkazu.