Öğretici: Ansible kullanarak Azure'da sanal makine ölçek kümelerine uygulama dağıtma
Önemli
Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.7 (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ümeleri ile, 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.
Bu makalede şunları öğreneceksiniz:
- Bir grup Azure VM'sinin konak bilgilerini alma
- Örnek uygulamayı kopyalama ve derleme
- JRE'yi (Java Çalışma Zamanı Ortamı) bir ölçek kümesine yükleme
- Java uygulamasını ölçek kümesine dağıtma
Ö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.
- Sanal makine ölçek kümesi: Henüz bir ölçek kümeniz yoksa Ansible ile bir ölçek kümesi yapılandırabilirsiniz.
- Git - Bu öğreticide Java örneği indirmek için git kullanılmaktadır.
- Java SE Development Kit (JDK) - Örnek Java projesini derlemek için JDK kullanılır.
- Apache Maven - Apache Maven , örnek Java projesini derlemek için kullanılır.
Ana bilgisayar bilgilerini alma
Bu bölümdeki playbook kodu, bir grup sanal makine için konak bilgilerini alır. Kod, belirtilen kaynak grubu içindeki genel IP adreslerini ve yük dengeleyiciyi alır ve envanterde adlı scalesethosts
bir konak grubu oluşturur.
Aşağıdaki örnek playbook'u get-hosts-tasks.yml
olarak kaydedin:
- name: Get facts for all Public IPs within a resource groups
azure_rm_publicipaddress_info:
resource_group: "{{ resource_group }}"
register: output_ip_address
- name: Get loadbalancer info
azure_rm_loadbalancer_info:
resource_group: "{{ resource_group }}"
name: "{{ loadbalancer_name }}"
register: output
- name: Add all hosts
add_host:
groups: scalesethosts
hostname: "{{ output_ip_address.publicipaddresses[0].ip_address }}_{{ item.properties.frontendPort }}"
ansible_host: "{{ output_ip_address.publicipaddresses[0].ip_address }}"
ansible_port: "{{ item.properties.frontendPort }}"
ansible_ssh_user: "{{ admin_username }}"
ansible_ssh_pass: "{{ admin_password }}"
with_items:
- "{{ output.ansible_info.azure_loadbalancers[0].properties.inboundNatRules }}"
Uygulamaları dağıtım için hazırlama
Bu bölümdeki playbook kodu, GitHub'dan bir Java örnek projesini kopyalamak için kullanır git
ve projeyi oluşturur.
Aşağıdaki playbook'u app.yml
olarak kaydedin:
- hosts: localhost
vars:
repo_url: https://github.com/spring-guides/gs-spring-boot.git
workspace: ~/src/helloworld
tasks:
- name: Git Clone sample app
git:
repo: "{{ repo_url }}"
dest: "{{ workspace }}"
- name: Build sample app
shell: mvn package chdir="{{ workspace }}/complete"
Örnek Ansible playbook'u aşağıdaki komut ile çalıştırın:
ansible-playbook app.yml
Playbook'u çalıştırdıktan sonra aşağıdaki sonuçlara benzer bir çıktı görürsünüz:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Git Clone sample app]
changed: [localhost]
TASK [Build sample app]
changed: [localhost]
PLAY RECAP
localhost : ok=3 changed=2 unreachable=0 failed=0
Uygulamayı ölçek kümesine dağıtma
Bu bölümdeki playbook kodu şunları yapmak için kullanılır:
- JRE'yi adlı bir konak grubuna yükleyin
saclesethosts
- Java uygulamasını adlı bir konak grubuna dağıtma
saclesethosts
Örnek playbook'u almanın iki yolu vardır:
Playbook'u indirin ve öğesine
vmss-setup-deploy.yml
kaydedin.vmss-setup-deploy.yml
adlı yeni bir dosya oluşturun. Yeni dosyaya aşağıdaki kodu ekleyin:
- hosts: localhost
vars:
resource_group: myResourceGroup
scaleset_name: myScaleSet
loadbalancer_name: myScaleSetLb
admin_username: azureuser
admin_password: "{{ admin_password }}"
tasks:
- include: get-hosts-tasks.yml
- name: Install JRE on a scale set
hosts: scalesethosts
become: yes
vars:
workspace: ~/src/helloworld
admin_username: azureuser
tasks:
- name: Install JRE
apt:
name: default-jre
update_cache: yes
- name: Copy app to Azure VM
copy:
src: "{{ workspace }}/complete/target/gs-spring-boot-0.1.0.jar"
dest: "/home/{{ admin_username }}/helloworld.jar"
force: yes
mode: 0755
- name: Start the application
shell: java -jar "/home/{{ admin_username }}/helloworld.jar" >/dev/null 2>&1 &
async: 5000
poll: 0
Playbook'u çalıştırmadan önce aşağıdaki notlara bakın:
vars
bölümünde yer tutucuyu{{ admin_password }}
kendi parolanızla değiştirin.Ssh bağlantı türünü parolalarla kullanmak için sshpass programını yükleyin:
Ubuntu:
apt-get install sshpass
Bazı ortamlarda anahtar yerine SSH parolası kullanmayla ilgili bir hata görebilirsiniz. Bu hatayı alırsanız veya öğesine aşağıdaki satırı
/etc/ansible/ansible.cfg
~/.ansible.cfg
ekleyerek konak anahtarı denetimini devre dışı bırakabilirsiniz:[defaults] host_key_checking = False
Playbook'u aşağıdaki komut ile çalıştırın:
ansible-playbook vmss-setup-deploy.yml
ansible-playbook komutunu çalıştırma çıkışı, örnek Java uygulamasının ölçek kümesinin konak grubuna yüklendiğini gösterir:
PLAY [localhost]
TASK [Gathering Facts]
ok: [localhost]
TASK [Get facts for all Public IPs within a resource groups]
ok: [localhost]
TASK [Get loadbalancer info]
ok: [localhost]
TASK [Add all hosts]
changed: [localhost] ...
PLAY [Install JRE on scale set]
TASK [Gathering Facts]
ok: [40.114.30.145_50000]
ok: [40.114.30.145_50003]
TASK [Copy app to Azure VM]
changed: [40.114.30.145_50003]
changed: [40.114.30.145_50000]
TASK [Start the application]
changed: [40.114.30.145_50000]
changed: [40.114.30.145_50003]
PLAY RECAP
40.114.30.145_50000 : ok=4 changed=3 unreachable=0 failed=0
40.114.30.145_50003 : ok=4 changed=3 unreachable=0 failed=0
localhost : ok=4 changed=1 unreachable=0 failed=0
Sonuçları doğrulama
Ölçek kümenizin yük dengeleyicinin URL'sine giderek çalışmanızın sonuçlarını doğrulayın: