Oktatóanyag: Az Azure-beli virtuálisgép-méretezési csoportok egyéni rendszerképének frissítése az Ansible használatával
Fontos
Az Ansible 2.8 (vagy újabb) szükséges a jelen cikkben szereplő minta forgatókönyvek futtatásához.
Az Azure-beli virtuálisgép-méretezési csoportok egy Olyan Azure-szolgáltatás, amellyel azonos, elosztott terhelésű virtuális gépek csoportját konfigurálhatja. A skálázási csoportoknak nincs további költsége, és virtuális gépekből vannak felépítve. Csak a mögöttes számítási erőforrásokért kell fizetnie, például a virtuálisgép-példányokért, a terheléselosztókért vagy a felügyelt lemeztárolókért. A méretezési csoportok biztosítják az alkalmazások futtatásához és méretezéséhez szükséges felügyeleti és automatizálási rétegeket. Ehelyett manuálisan is létrehozhat és kezelhet egyéni virtuális gépeket. A méretezési csoportok használatának azonban két fő előnye van. Az Azure-ba vannak beépítve, és automatikusan skálázzák a virtuális gépeket az alkalmazás igényeinek megfelelően.
A virtuális gép üzembe helyezése után konfigurálja a virtuális gépet az alkalmazás által igényelt szoftverrel. Ahelyett, hogy ezt a konfigurációs feladatot minden virtuális géphez elvégezte, létrehozhat egy egyéni rendszerképet. Az egyéni rendszerkép egy meglévő virtuális gép pillanatképe, amely tartalmazza a telepített szoftvereket. Méretezési csoport konfigurálásakor meg kell adnia a méretezési csoport virtuális gépeihez használni kívánt rendszerképet. Egyéni rendszerkép használatával minden virtuálisgép-példány azonos módon van konfigurálva az alkalmazáshoz. Előfordulhat, hogy frissítenie kell a méretezési csoport egyéni rendszerképét. Az oktatóanyag középpontjában ez a feladat áll.
Ebben a cikkben az alábbiakkal ismerkedhet meg:
- Két virtuális gép konfigurálása HTTPD-vel
- Egyéni rendszerkép létrehozása meglévő virtuális gépről
- Méretezési csoport létrehozása képből
- Az egyéni rendszerkép frissítése
Előfeltételek
- Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
Az Ansible telepítése: Válasszon az alábbi lehetőségek közül:
- Az Ansible telepítése és konfigurálása Linux rendszerű virtuális gépen
- Konfigurálja az Azure Cloud Shellt , és – ha nincs hozzáférése Linux rendszerű virtuális géphez – hozzon létre egy virtuális gépet az Ansible használatával.
Két virtuális gép konfigurálása
Az ebben a szakaszban található forgatókönyvkód két virtuális gépet hoz létre, mindkettőre HTTPD-vel.
Az index.html
egyes virtuális gépek lapja egy tesztsztringet jelenít meg:
- Az első virtuális gép megjeleníti az értéket
Image A
- A második virtuális gép megjeleníti az értéket
Image B
Ez a sztring az egyes virtuális gépek különböző szoftverekkel való konfigurálását hivatott utánozni.
A minta forgatókönyv kétféleképpen szerezhető be:
Töltse le a forgatókönyvet , és mentse a következőre
create_vms.yml
: .Hozzon létre egy új fájlt
create_vms.yml
néven. Szúrja be a következő kódot az új fájlba.
- 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 }}"
Futtassa a forgatókönyvet a ansible-playbook
paranccsal, és cserélje le myrg
az erőforráscsoport nevére:
ansible-playbook create-vms.yml --extra-vars "resource_group=myrg"
debug
A forgatókönyv szakaszai miatt a ansible-playbook
parancs kinyomtatja az egyes virtuális gépek IP-címét. Másolja ki ezeket az IP-címeket későbbi használatra.
Csatlakozás a két virtuális géphez
Ebben a szakaszban minden virtuális géphez csatlakozik. Ahogy az előző szakaszban is említettük, a sztringek Image A
és Image B
a mimika két különböző, különböző konfigurációjú virtuális géppel rendelkezik.
Az előző szakasz IP-címeinek használatával nyisson meg egy böngészőt, és csatlakozzon az egyes virtuális gépekhez.
Képek létrehozása az egyes virtuális gépekről
Ezen a ponton két, kissé eltérő konfigurációjú virtuális géppel rendelkezik (a fájljaikkal index.html
).
Az ebben a szakaszban található forgatókönyvkód minden virtuális géphez létrehoz egy egyéni rendszerképet:
image_vmforimageA
– A kezdőlapján megjelenőImage A
virtuális géphez létrehozott egyéni rendszerkép.image_vmforimageB
– A kezdőlapján megjelenőImage B
virtuális géphez létrehozott egyéni rendszerkép.
A minta forgatókönyv kétféleképpen szerezhető be:
Töltse le a forgatókönyvet , és mentse a következőre
capture-images.yml
: .Hozzon létre egy új fájlt
capture-images.yml
néven. Szúrja be a következő kódot az új fájlba:
- 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
Futtassa a forgatókönyvet a ansible-playbook
paranccsal, és cserélje le myrg
az erőforráscsoport nevére:
ansible-playbook capture-images.yml --extra-vars "resource_group=myrg"
Méretezési csoport létrehozása az A kép használatával
Ebben a szakaszban egy forgatókönyvet használunk a következő Azure-erőforrások konfigurálásához:
- Nyilvános IP-cím
- Terheléselosztóval
- Hivatkozásokat tartalmazó méretezési csoport
image_vmforimageA
A minta forgatókönyv kétféleképpen szerezhető be:
Töltse le a forgatókönyvet , és mentse a következőre
create-vmss.yml
: .Hozzon létre egy új fájlt
create-vmss.yml
néven. Szúrja be a következő kódot az új fájlba:
---
- 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 }}"
Futtassa a forgatókönyvet a ansible-playbook
paranccsal, és cserélje le myrg
az erőforráscsoport nevére:
ansible-playbook create-vmss.yml --extra-vars "resource_group=myrg"
debug
A forgatókönyv szakasza miatt a ansible-playbook
parancs kinyomtatja a méretezési csoport IP-címét. Másolja ki ezt az IP-címet későbbi használatra.
Csatlakozás a méretezési csoporthoz
Az előző szakasz IP-címének használatával csatlakozzon a méretezési csoporthoz.
Ahogy az előző szakaszban is említettük, a sztringek Image A
és Image B
a mimika két különböző, különböző konfigurációjú virtuális géppel rendelkezik.
A méretezési csoport a névvel ellátott image_vmforimageA
egyéni rendszerképre hivatkozik. Az egyéni rendszerkép image_vmforimageA
abból a virtuális gépből lett létrehozva, amelynek kezdőlapja megjelenik Image A
.
Ennek eredményeként megjelenik egy kezdőlap, amely megjelenik Image A
.
A következő szakasz folytatásaként hagyja nyitva a böngészőablakot.
Egyéni rendszerkép módosítása méretezési csoportban és példányok frissítése
Az ebben a szakaszban található forgatókönyv-kód a méretezési csoport képét módosítja – a helyről image_vmforimageA
a gombra image_vmforimageB
. Emellett a méretezési csoport által üzembe helyezett összes jelenlegi virtuális gép frissül.
A minta forgatókönyv kétféleképpen szerezhető be:
Töltse le a forgatókönyvet , és mentse a következőre
update-vmss-image.yml
: .Hozzon létre egy új fájlt
update-vmss-image.yml
néven. Szúrja be a következő kódot az új fájlba:
- 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 }}"
Futtassa a forgatókönyvet a ansible-playbook
paranccsal, és cserélje le myrg
az erőforráscsoport nevére:
ansible-playbook update-vmss-image.yml --extra-vars "resource_group=myrg"
Térjen vissza a böngészőbe, és frissítse a lapot, hogy a virtuális gép alapjául szolgáló egyéni rendszerkép frissüljön.
Az erőforrások eltávolítása
Mentse a következő kódot.
delete_rg.yml
--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
Futtassa a forgatókönyvet az ansible-playbook paranccsal. Cserélje le a helyőrzőt a törölni kívánt erőforráscsoport nevére. Az erőforráscsoporton belüli összes erőforrás törlődik.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Főbb pontok:
register
A forgatókönyv változója ésdebug
szakasza miatt az eredmények a parancs befejeződésekor jelennek meg.