Jak utworzyć zestaw maszyn wirtualnych przy użyciu OpenStack Heat Orchestration na NSIS Cloud
Heat to komponent OpenStack odpowiedzialny za orkiestrację. Jego celem jest dostarczenie silnika automatyzacji i optymalizacja procesów.
Heat otrzymuje polecenia za pośrednictwem szablonów, które są plikami tekstowymi w formacie yaml. Szablon opisuje całą infrastrukturę, którą chcesz wdrożyć. Wdrożone środowisko nazywane jest stack i może składać się z dowolnej kombinacji spośród 102 różnych zasobów dostępnych w OpenStack.
Co zostanie omówione?
Typowe elementy szablonu Heat
Podstawowy szablon do korzystania z Heat
Jak uzyskać dane dla szablonu Heat
Korzystanie z Heat za pomocą CLI
Używanie Heat z GUI
Bardziej zaawansowany szablon dla Heat
Wymagania wstępne
Nr 1 Konto
Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.
Nr 2 Zainstalowane środowisko Python i jego wirtualne środowisko
Jeśli chcesz korzystać z Heat za pomocą poleceń CLI, musi być zainstalowane środowisko Python i musi być aktywowane jego wirtualne środowisko. Zobacz artykuł Jak zainstalować Python virtualenv lub virtualenvwrapper na NSIS Cloud.
Jeśli po raz pierwszy instalujesz klienta OpenStack, zobacz artykuł Jak zainstalować klientów OpenStack i Magnum dla interfejsu wiersza poleceń w NSIS Horizon?.
Zawsze używaj najnowszej wartości identyfikatora obrazu
Od czasu do czasu domyślne obrazy systemów operacyjnych w chmurze NSIS są aktualizowane do nowych wersji. W konsekwencji ich obraz id ulegnie zmianie. Powiedzmy, że w momencie pisania tego artykułu identyfikator obrazu dla Ubuntu 20.04 LTS to 574fe1db-8099-4db4-a543-9e89526d20ae. Pracując nad artykułem, nalezy wziąć aktualną wartość identyfikatora obrazu i użyć jej, aby zastąpić 574fe1db-8099-4db4-a543-9e89526d20ae w całym tekście.
Załóżmy teraz, że chcesz zautomatyzować procesy w OpenStack, być może używając Heat, Terraform, Ansible lub innego narzędzia do automatyzacji OpenStack; jeśli dla identyfikatora obrazu użyjesz wartości 574fe1db-8099-4db4-a543-9e89526d20ae, pozostanie ona zakodowana na stałe i jeśli ta wartość zostanie zmieniona podczas aktualizacji, zautomatyzowany proces może przestać się wykonywać.
Ostrzeżenie
Upewnij się, że kod automatyzacji używa aktualnej wartości identyfikatora obrazu systemu operacyjnego, a nie wartości zakodowanej na stałe.
Podstawowy szablon do korzystania z Heat
Korzystając z poniższego fragmentu kodu, można utworzyć jedną maszynę wirtualną uruchamianą z dysku ulotnego (ephemeral disk). Utwórz plik tekstowy o nazwie template.yaml za pomocą ulubionego edytora tekstu i zapisz go na dysku:
heat_template_version: 2015-04-30
resources:
instance:
type: OS::Nova::Server
properties:
flavor: eo1.xsmall
image: Ubuntu 18.04 LTS
networks:
- network: <type in your network name here, e.g. cloud_00341_3>
- network: <type in your network name here, e.g. eodata_00341_3>
key_name: <type in your ssh key name>
security_groups:
- allow_ping_ssh_icmp_rdp
- default
Ważne
Format Yaml nie zezwala na używanie tabulatorów, zamiast nich należy wprowadzić spacje.
Typowe elementy szablonu Heat
Oto podstawowe elementy szablonu Heat:
- heat_template_version
Dokładna wersja szablonu Heat. Każda z nich różni się pod wieloma względami (w tym obsługą różnych modułów, dodatkowymi parametrami, dostosowaniem itp.), Patrz sekcja Orchestration -> Template Versions.
- resources
Wpis mający na celu rozpoczęcie dostarczania określonych komponentów do wdrożenia.
- instance
Nazwa zasobu (można wpisać dowolną nazwę).
- type
Definicja komponentu OpenStack (pełna lista znajduje się w sekcji Orchestration -> Resource Types)
- properties
Parametry wymagane do wdrożenia komponentu.
Informacja
Twoje konto będzie zwykle miało sieć zaczynającą się od cloud_, ale może mieć również inne sieci. W poniższych przykładach używamy sieci o nazwie eodata_ jako przykładu dodatkowej sieci, którą można dodać podczas tworzenia i używania szablonów Heat.
Jak uzyskać dane dla szablonu Heat
Szablony wymagają danych dla obrazów, sieci dla flavorów, par kluczy, grup zabezpieczeń i tak dalej. Zwykle wszystkie te elementy są znane z wyprzedzeniem lub można „rozejrzeć się” po różnych częściach środowiska OpenStack:
flavor |
Compute -> Instances -> Launch Instance -> Flavor |
obraz |
Compute -> Instance -> Launch Instance -> Source. |
sieci |
Network -> Networks -> cloud i eodata sieci dla twojej domeny |
key_name |
Compute -> Pary kluczy |
security_groups |
Sieć -> Grupy zabezpieczeń |
Z Heat można pracować na dwa sposoby:
za pomocą interfejsu wiersza poleceń (CLI), z preinstalowanym pakietem python-heatclient i
interaktywnie, za pomocą poleceń Horizon.
Korzystanie z Heat za pomocą CLI
Zakładając, że masz
zainstalowane środowisko Python i
aktywowane środowisko pracy
jak wyjaśniono w wymaganiu wstępnym nr 2, uruchom polecenie pip, aby zainstalować pakiet python-heatclient:
pip install python-heatclient
Ogólne polecenie uruchomienia przygotowania szablonu w celu wdrożenia stacku wygląda następująco:
.. code::
openstack stack create -t template.yaml <stackname>
gdzie -t przypisuje szablon do wdrożenia, a <stackname> definiuje nazwę stacku.
W rezultacie zostanie wykonany nowy stack i zostanie utworzona nowa instancja. Na przykład polecenie
openstack stack create -t template.yaml heat-test2
wygeneruje następujące dane wyjściowe:
W Horizon jest to widoczne w sekcji Orchestration -> Stacks:
Nowa instancja zostanie utworzona w sekcji Compute -> Instances:
Używanie Heat z GUI
Zaloguj się do Horizon Dashboard, wybierz sekcję Orchestration, a następnie kartę Stacks:
Przejdź do prawej części ekranu, kliknij przycisk
i wyświetl okno Select Template.
Wybierz źródło szablonu i wybierz konkretny plik, bezpośrednie dane wejściowe lub adres URL szablonu.
Wprowadź tekst szablonu skopiowany z pliku template.yaml bezpośrednio do formularza:
Podaj nazwę swojego stacku i hasło openstack:
W rezultacie utworzony zostanie nowy szablon Heat:
Przy tworzeniu stacka w Horizon został wykonany również ten szablon. W rezultacie zostanie utworzona nowa instancja – zobacz ją w sekcji Compute -> Instances:
Otrzymujemy dwa stacki i dwie nowe instancje, raz przy użyciu CLI, a drugi przy użyciu GUI.
Utworzenie czterech maszyn wirtualnych przy użyciu zaawansowanego szablonu Heat
W poniższym przykładzie dodamy parametry, a następnie utworzymy ResourceGroup z licznikiem, maszyną wirtualną uruchamianą z Cinder Volume i kilkoma predefiniowanymi wyjściami. W parametrze count określamy, że chcemy wygenerować 4 instancje jednocześnie, co zapewni automatyzację, o którą nam chodziło. Zapisz poniższy kod jako template4.yaml:
heat_template_version: 2015-04-30
parameters:
key_name:
type: string
label: sshkey
description: SSH key to be used for all instances
default: <insert your ssh key name here>
image_id:
type: string
description: Image to be used. Check all available options in Horizon dashboard or, with CLI, use openstack image list command.
default: Ubuntu 18.04 LTS
private_net_id:
type: string
description: ID/Name of private network
default: <insert your network name here, e.g. cloud_00341_3>
resources:
Group_of_VMs:
type: OS::Heat::ResourceGroup
properties:
count: 4
resource_def:
type: OS::Nova::Server
properties:
name: my_vm%index%
flavor: eo1.xsmall
image: { get_param: image_id }
networks:
- network: { get_param: private_net_id }
key_name: { get_param: key_name }
security_groups:
- allow_ping_ssh_icmp_rdp
- default
VOL_FAQ:
type: OS::Cinder::Volume
properties:
name: vol
size: 20
image : { get_param: image_id }
With_volume:
type: OS::Nova::Server
properties:
flavor: eo1.xsmall
block_device_mapping: [{"volume_size": 20, "volume_id": { get_resource: VOL_FAQ }, "delete_on_termination": False, "device_name": "/dev/vda" }]
networks:
- network: { get_param: private_net_id }
key_name: { get_param: key_name }
security_groups:
- allow_ping_ssh_icmp_rdp
- default
image : { get_param: image_id }
outputs:
SERVER_DETAILS:
description: Shows details of all virtual servers.
value: { get_attr: [ Group_of_VMs, show ] }
Pierwszym krokiem jest utworzenie rzeczywistego volume (o nazwie VOL_FAQ), a drugim utworzenie maszyny wirtualnej (With_volume).
Objaśnienie
- Parametry
Tutaj podajesz wartości domyślne (w tym przypadku key_name, * obraz_id*, private_net_id), a następnie wprowadzasz je do definicji zasobów. Składnia jest następująca:
{get param: param_name }- ResourceGroup
Komponent używany do wielokrotnego wdrażania, na przykład dwóch identycznych maszyn wirtualnych.
- Count
Definiuje zmienną dla operacji iteracyjnych.
- resource_def
Instrukcja początkowa definiowania zasobów grupy.
- %index%
W ten sposób do nazwy maszyny wirtualnej jest dodawany numer iteracyjny, zwiększający wartości począwszy od 0.
- block_device_mapping
Właściwość definiująca na przykład wolumin rozruchowy Cinder.
- outputs
Dodatkowe informacje dotyczące wdrożonych elementów stacku. W tym przypadku zwraca dane wyjściowe atrybutu „show”. Ten rodzaj informacji można sprawdzić za pomocą listy wyjściowej stacku openstack. Dostępne atrybuty dla każdego komponentu można znaleźć tutaj: https://docs.openstack.org/heat/latest/template_guide/openstack.html .
Uruchom szablon za pomocą następującego polecenia:
openstack stack create -t template4.yaml four
Nazwą stacku będzie four. W oknie CLI wynik jest następujący:
Na karcie Compute -> Instance pojawi się pięć nowych instancji:
Cztery z nich mają nazwy my_vm0, my_vm1, my_vm1 i my_vm1, jak zdefiniowano w wierszu name: my_vm%index% w szablonie. Piąty nazywa się four-With_volume-lrejw222kfvi. Jego nazwa zaczyna się tak samo jak nazwa samego szablonu, podczas gdy reszta jest generowana automatycznie.
Co można zrobić dalej?
Możesz zapisywać własne szablony jako pliki yaml lub skorzystać z opcji Orchestration -> Template Generator, która umożliwi Ci interaktywne wprowadzanie komponentów:
Bardziej szczegółowe wyjaśnienia tej opcji wykraczają poza zakres tego artykułu.