Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.8 (veya üzeri) gereklidir.
Azure sanal makine ölçek kümeleri , aynı, yük dengeli VM'lerden oluşan bir grup yapılandırmanıza olanak tanıyan bir Azure özelliğidir. Kümeleri ölçeklendirmek için ek maliyet yoktur ve bunlar sanal makinelerden oluşturulur. Yalnızca VM örnekleri, yük dengeleyiciler veya Yönetilen Disk depolama alanı gibi temel işlem kaynakları için ödeme yapın. Ölçek kümeleriyle, uygulamalarınızı çalıştırmak ve ölçeklendirmek için yönetim ve otomasyon katmanları sağlanır. Bunun yerine tek tek VM'leri el ile oluşturabilir ve yönetebilirsiniz. Ancak ölçek kümelerini kullanmanın iki temel avantajı vardır. Azure'da yerleşik olarak bulunurlar ve sanal makinelerinizi uygulama gereksinimlerini karşılayacak şekilde otomatik olarak ölçeklendirirler.
Vm dağıtıldıktan sonra, VM'yi uygulamanızın ihtiyaç duyduğu yazılımla yapılandırabilirsiniz. Bu yapılandırma görevini her VM için yapmak yerine özel bir görüntü oluşturabilirsiniz. Özel görüntü, yüklü yazılımları içeren mevcut bir VM'nin anlık görüntüsüdür. Bir ölçek kümesini yapılandırırken, bu ölçek kümesinin VM'leri için kullanılacak görüntüyü belirtirsiniz. Özel görüntü kullanıldığında, her VM örneği uygulamanız için aynı şekilde yapılandırılır. Bazen ölçek kümenizin özel görüntüsünü güncelleştirmeniz gerekebilir. Bu görev, bu kılavuzun odak noktasıdır.
Bu makalede şunları öğreneceksiniz:
- HTTPD ile iki VM yapılandırma
- Mevcut bir VM'den özel görüntü oluşturma
- Görüntüden ölçek kümesi oluşturma
- Özel görüntüyü güncelleştirme
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Ansible'ı Yükleme: Aşağıdaki seçeneklerden birini yapın:
- Ansible'ı Linux sanal makinesine yükleme ve yapılandırma
- Azure Cloud Shell'i yapılandırın ve Linux sanal makinesine erişiminiz yoksa Ansible ile bir sanal makine oluşturun.
İki VM yapılandırma
Bu bölümdeki playbook kodu, her ikisinde de HTTPD yüklü iki sanal makine oluşturur.
Her VM'nin index.html sayfasında bir test dizesi görüntülenir:
- İlk VM değerini görüntüler
Image A - İkinci VM
Image Bdeğerini görüntüler
Bu dize, her vm'nin farklı yazılımlarla yapılandırılmasını taklit etmek için kullanılır.
Örnek playbook'u almanın iki yolu vardır:
Playbook'u indirin ve
create_vms.yml'e kaydedin.create_vms.ymladlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin.
- 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 interface 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 }}"
ansible-playbook komutunu kullanarak playbook'u çalıştırın ve myrg ile kaynak grubunuzun adını değiştirin.
ansible-playbook create-vms.yml --extra-vars "resource_group=myrg"
Playbook'un debug bölümleri nedeniyle, ansible-playbook komutu her VM'nin IP adresini yazdıracaktır. Bu IP adreslerini daha sonra kullanmak üzere kopyalayın.
İki VM'ye bağlanma
Bu bölümde her vm'ye bağlanacaksınız. Önceki bölümde belirtildiği gibi, Image A ve Image B dizeleri, farklı yapılandırmalara sahip iki ayrı VM'yi simüle eder.
Önceki bölümdeki IP adreslerini kullanarak bir tarayıcı açın ve her vm'ye bağlanın.
Her VM'den görüntü oluşturma
Bu noktada, biraz farklı yapılandırmalara (dosyaları) index.html sahip iki VM'niz vardır.
Bu bölümdeki playbook kodu her VM için özel bir görüntü oluşturur:
-
image_vmforimageA- Ana sayfasındaImage Agösteren VM için oluşturulan özel görüntü. -
image_vmforimageB- Ana sayfasındaImage Bgösterilen VM için oluşturulmuş özel görüntü.
Örnek playbook'u almanın iki yolu vardır:
Playbook'u indirin ve
capture-images.yml'e kaydedin.capture-images.ymladlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:
- 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
ansible-playbook komutunu kullanarak playbook'u çalıştırın ve myrg ile kaynak grubunuzun adını değiştirin.
ansible-playbook capture-images.yml --extra-vars "resource_group=myrg"
Görüntü A kullanarak ölçek kümesi oluşturma
Bu bölümde, aşağıdaki Azure kaynaklarını yapılandırmak için bir playbook kullanılır:
- Genel IP adresi
- Yük Dengeleyici
- Başvuran ölçek kümesi
image_vmforimageA
Örnek playbook'u almanın iki yolu vardır:
Playbook'u indirin ve
create-vmss.yml'e kaydedin.create-vmss.ymladlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:
---
- 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 }}"
ansible-playbook komutunu kullanarak playbook'u çalıştırın ve myrg ile kaynak grubunuzun adını değiştirin.
ansible-playbook create-vmss.yml --extra-vars "resource_group=myrg"
Playbook'un debug bölümü dolayısıyla, ansible-playbook komutu ölçek kümesinin IP adresini yazdıracaktır. Bu IP adresini daha sonra kullanmak üzere kopyalayın.
Ölçek kümesine bağlanma
Önceki bölümdeki IP adresini kullanarak ölçek kümesine bağlanın.
Önceki bölümde belirtildiği gibi, Image A ve Image B dizeleri, farklı yapılandırmalara sahip iki ayrı VM'yi simüle eder.
Ölçek kümesi, image_vmforimageA adlı özel görüntüye atıfta bulunur. "image_vmforimageA Özel görüntü, giriş sayfasında Image A görüntülenen VM'den oluşturuldu."
Sonuç olarak, Image A görüntüleyen bir ana sayfa görürsünüz.
Sonraki bölüme devam ettikçe tarayıcı pencerenizi açık bırakın.
Ölçek kümesinde özel görüntüyü değiştirme ve örnekleri yükseltme
Bu bölümdeki playbook kodu, ölçek kümesinin görüntüsünü image_vmforimageA'den image_vmforimageB'e değiştirir. Ayrıca, ölçek kümesince dağıtılan tüm mevcut sanal makineler güncelleştirilir.
Örnek playbook'u almanın iki yolu vardır:
Playbook'u indirin ve
update-vmss-image.yml'e kaydedin.update-vmss-image.ymladlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:
- 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 }}"
ansible-playbook komutunu kullanarak playbook'u çalıştırın ve myrg ile kaynak grubunuzun adını değiştirin.
ansible-playbook update-vmss-image.yml --extra-vars "resource_group=myrg"
Sanal makinenin temel alınan özel görüntüsünün güncelleştirildiğini görmek için tarayıcıya dönün ve sayfayı yenileyin.
Kaynakları temizle
Aşağıdaki kodu olarak
delete_rg.ymlkaydedin.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgansible-playbook komutunu kullanarak playbook'u çalıştırın. Yer tutucuyu silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Önemli noktalar:
- Playbook'un
registerdeğişkeni vedebugbölümü nedeniyle, komut tamamlandığında sonuçlar görüntülenir.
- Playbook'un