Skip to main content
  • »
  • OPENSTACK CLI »
  • Jak utworzyć zestaw maszyn wirtualnych przy użyciu OpenStack Heat Orchestration na 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-test2.png

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

../_images/heat_test2_stacks.png

Nowa instancja zostanie utworzona w sekcji Compute -> Instances:

../_images/heat_test2_instances.png

Używanie Heat z GUI

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

../_images/stacks_menu_nsis_cloud.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/orch4.png

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

../_images/select_template_yaml.png

Podaj nazwę swojego stacku i hasło openstack:

../_images/launch_stack.png

W rezultacie utworzony zostanie nowy szablon Heat:

../_images/create_new_template.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_instance.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_4.png

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

../_images/four_created.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_generator.png

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