Skip to main content
  • »
  • OPENSTACK CLI »
  • Jak utworzyć zestaw maszyn wirtualnych przy użyciu OpenStack Heat Orchestration na NSIS Cloud
  • NSIS Cloud

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:

../_images/heat-test21.png

W Horizon jest to widoczne w sekcji Orchestration -> Stacks:

../_images/heat_test2_stacks1.png

Nowa instancja zostanie utworzona w sekcji Compute -> Instances:

../_images/heat_test2_instances1.png

Używanie Heat z GUI

Zaloguj się do Horizon Dashboard, wybierz sekcję Orchestration, a następnie kartę Stacks:

../_images/stacks_menu_nsis_cloud1.png

Przejdź do prawej części ekranu, kliknij przycisk click_button_launch_stack i wyświetl okno Select Template.

Wybierz źródło szablonu i wybierz konkretny plik, bezpośrednie dane wejściowe lub adres URL szablonu.

../_images/orch41.png

Wprowadź tekst szablonu skopiowany z pliku template.yaml bezpośrednio do formularza:

../_images/select_template_yaml1.png

Podaj nazwę swojego stacku i hasło openstack:

../_images/launch_stack1.png

W rezultacie utworzony zostanie nowy szablon Heat:

../_images/create_new_template1.png

Przy tworzeniu stacka w Horizon został wykonany również ten szablon. W rezultacie zostanie utworzona nowa instancja – zobacz ją w sekcji Compute -> Instances:

../_images/heat_instance1.png

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:

../_images/create_heat_41.png

Na karcie Compute -> Instance pojawi się pięć nowych instancji:

../_images/four_created1.png

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:

../_images/template_generator1.png

Bardziej szczegółowe wyjaśnienia tej opcji wykraczają poza zakres tego artykułu.