Projekty

Projekt to kolekcja zasobów, które definiują konfiguracje węzłów. Projekty zawierają specyfikacje. Po uruchomieniu węzła jest on konfigurowany przez przetwarzanie i uruchamianie sekwencji specyfikacji.

Usługa Azure CycleCloud używa projektów do zarządzania aplikacjami klastra, takimi jak harmonogramy wsadowe. W cyklu CycleCloud HPCPack projekt jest specyfikacją i cn specyfikacjąhn, która definiuje konfiguracje i przepisy dotyczące węzła głównego i węzła obliczeniowego HPCPack.

Poniżej znajduje się definicja węzła częściowego. Węzeł docker-registry będzie uruchamiać trzy specyfikacje: powiązać specyfikację z projektu okta w wersji 1.3.0, a także specyfikacje podstawowe i rejestru z projektu platformy Docker w wersji 2.0.0:

[[node docker-registry]]
    Locker = base-storage
    [[[cluster-init okta:bind:1.3.0]]]
    [[[cluster-init docker:core:2.0.0]]]
    [[[cluster-init docker:registry:2.0.0]]]

Końcowy tag to numer wersji projektu.

[[[cluster-init <project>:<spec>:<project version>]]]

Szafka jest odwołaniem do kontenera konta magazynu i poświadczeń. Węzły mają domyślną funkcję locker, więc ten atrybut nie jest ściśle konieczny.

Usługa Azure CycleCloud używa skrótu dla kont magazynu, więc https://mystorage.blob.core.windows.net/mycontainer można je zapisać jako az://mystorage/mycontainer.

Węzeł pobierze każdy projekt, do których odwołuje się on z szafki przy użyciu narzędzia pogo:

pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind

Jeśli projekt jest zdefiniowany w węźle, ale nie istnieje w oczekiwanej lokalizacji magazynu, węzeł zgłosi Software Installation Failure element do aplikacji CycleCloud.

Usługa CycleCloud ma projekty wewnętrzne, które są domyślnie uruchamiane na wszystkich węzłach w celu wykonywania specjalnej obsługi woluminów i sieci oraz konfigurowania komunikacji z aplikacją CycleCloud. Te projekty wewnętrzne są automatycznie dublowane do szafki.

Użytkownik jest odpowiedzialny za dublowanie wszelkich dodatkowych projektów w szafce. Interfejs wiersza polecenia cycleCloud zawiera metody tworzenia projektów:

cyclecloud project init myproject

i lustro:

cyclecloud project init mylocker

projekty do zamknięć.

Specyfikacje składają się z skryptów języka Python, powłoki lub programu PowerShell.

Tworzenie nowego projektu

Aby utworzyć nowy projekt, użyj polecenia interfejsu wiersza polecenia cyclecloud project init myproject, gdzie myproject jest nazwą projektu, który chcesz utworzyć. Spowoduje to utworzenie projektu o nazwie "myproject" z pojedynczą specyfikacją o nazwie "default", którą można zmienić. Drzewo katalogów zostanie utworzone z plikami szkieletów, które zmienisz w celu uwzględnienia własnych informacji.

Struktura katalogu

Następujące katalogi zostaną utworzone przez polecenie projektu:

      \myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bag
          │         └── roles

Katalog templates będzie przechowywać szablony klastra, natomiast specyfikacje będą zawierać specyfikacje definiujące projekt. Spec ma dwa podkatalogi: cluster-init i custom chef. cluster-init zawiera katalogi, które mają specjalne znaczenie, takie jak katalog scripts (zawiera skrypty wykonywane w kolejności leksykograficznej w węźle), pliki (nieprzetworzone pliki danych do umieszczenia w węźle) i testy (zawiera testy do uruchomienia po uruchomieniu klastra w trybie testowania).

Niestandardowy podkatalog chef ma trzy katalogi: podręczniki witryny (w przypadku definicji książek kucharskich), data_bags (definicje worków danych) i role (pliki definicji roli szefa kuchni).

project.ini

project.ini to plik zawierający wszystkie metadane projektu. Może zawierać następujące elementy:

Parametr Opis
name Nazwa projektu. Wyrazy muszą być oddzielone kreskami, np. order-66-2018
label Nazwa projektu. Długa nazwa (z spacjami) klastra na potrzeby wyświetlania.
typ Trzy opcje: harmonogram, aplikacja, <puste>. Określa typ projektu i generuje odpowiedni szablon. Ustawienie domyślne: aplikacja
Wersja Format: x.x.x

Szafki

Zawartość projektu jest przechowywana w szafce. Zawartość projektu można przekazać do dowolnej funkcji zdefiniowanej w instalacji narzędzia CycleCloud za pomocą polecenia cyclecloud project upload (locker), gdzie (locker) jest nazwą szafki magazynu w chmurze w instalacji usługi CycleCloud. Ta funkcja zostanie ustawiona jako domyślny element docelowy. Możesz też zobaczyć, jakie blokady są dostępne za pomocą polecenia cyclecloud locker list. Szczegółowe informacje o określonej szafce można wyświetlić za pomocą polecenia cyclecloud locker show (locker).

Jeśli dodasz więcej niż jedną funkcję, możesz ustawić wartość domyślną za pomocą cyclecloud project default_target (locker)polecenia , a następnie po prostu uruchomić polecenie cyclecloud project upload. Można również ustawić globalną domyślną funkcjęlocker, która może być udostępniana przez projekty za pomocą polecenia cyclecloud project default locker (locker) -global.

Uwaga

Domyślne blokady będą przechowywane w pliku konfiguracji cyclecloud (zwykle znajduje się w lokalizacji ~/.cycle/config.ini), a nie w project.ini. Ma to na celu umożliwienie kontroli wersji project.ini.

Przekazanie zawartości projektu spowoduje spakowanie katalogów chef i zsynchronizowanie zarówno narzędzia Chef, jak i inicjowania klastra z funkcją docelową. Będą one przechowywane w:

  • (locker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (locker)/projects/(project)/(version)/(spec_name)/chef

Pobieranie obiektów blob

Użyj polecenia project download , aby pobrać wszystkie obiekty blob, do których odwołuje się project.ini, do lokalnego katalogu obiektów blob. Polecenie używa parametru [locker] i podejmie próbę pobrania obiektów blob wymienionych w project.ini z funkcjilocker do magazynu lokalnego. Jeśli nie można znaleźć plików, zostanie zwrócony błąd.

Konfiguracja projektu

Specyfikacje

Podczas tworzenia nowego projektu definiowana jest pojedyncza domyślna specyfikacja. Dodatkowe specyfikacje można dodać do projektu za pomocą cyclecloud project add_spec polecenia .

Przechowywanie wersji

Domyślnie wszystkie projekty mają wersję 1.0.0. Wersję niestandardową można ustawić podczas opracowywania i wdrażania projektów, ustawiając w version=x.y.z pliku project.ini .

Jeśli na przykład "locker_url" to "az://my-account/my-container/projects", projekt miał nazwę "Order66", wersja to "1.6.9", a specyfikacja to "default", adres URL będzie:

  • az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
  • az://my-account/my-container/projects/Order66/1.6.9/default/chef

Obiekty blob

Istnieją dwa typy obiektów blob: obiekty blob projektu i obiekty blob użytkownika.

Obiekty blob projektu

Obiekty blob projektu to pliki binarne dostarczane przez autora projektu z założeniem, że mogą być dystrybuowane (tj. plik binarny dla projektu open source, który można legalnie rozpowszechnić). Obiekty blob projektu przechodzą do katalogu "obiekty blob" projektu, a po przekazaniu do szafki będą one znajdować się w lokalizacji /project/blobs.

Aby dodać obiekty blob do projektów, dodaj pliki do project.ini:

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

Wiele obiektów blob można rozdzielić przecinkami. Można również określić ścieżkę względną do katalogu obiektów blob projektu.

Obiekty blob użytkownika

Obiekty blob użytkownika to pliki binarne, których autor projektu nie może legalnie rozpowszechnić, takich jak pliki binarne UGE. Te pliki nie są pakowane w projekcie, ale zamiast tego muszą być przygotowane ręcznie do szafki. Pliki będą znajdować się w lokalizacji /blobs/my-project/my-blob.tgz. Obiekty blob użytkownika nie muszą być zdefiniowane w project.ini.

Aby pobrać dowolny obiekt blob, użyj jetpack download polecenia z interfejsu jetpack_download wiersza polecenia lub zasobu Chef. Usługa CycleCloud najpierw wyszuka obiekt blob użytkownika. Jeśli ten plik nie znajduje się, zostanie użyty obiekt blob na poziomie projektu.

Uwaga

Istnieje możliwość zastąpienia obiektu blob projektu za pomocą obiektu blob użytkownika o tej samej nazwie.

Określanie projektu w szablonie klastra

Składnia projektu umożliwia określenie wielu specyfikacji w węzłach. Aby zdefiniować projekt, użyj następujących elementów:

[[[cluster-init myspec]]]
  Project = myproject # inferred from name
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

Uwaga

Nazwa określona po specyfikacji może być niczym, ale może i powinna być używana jako skrót do zdefiniowania niektórych > typowych właściwości.

Można również zastosować wiele specyfikacji do danego węzła w następujący sposób:

[[node scheduler]]
  [[[cluster-init myspec]]]
  Project = myproject
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec  # (optional)

Oddzielając nazwę projektu, nazwę specyfikacji i wersję dwukropkami, usługa CycleCloud może automatycznie analizować te wartości w odpowiednich Project/Version/Spec ustawieniach:

[[node scheduler]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs
  [[[cluster-init myproject:myspec:x.y.z]]]
  [[[cluster-init otherproject:otherspec:a.b.c]]]

Specyfikacje można również dziedziczyć między węzłami. Na przykład można udostępnić wspólną specyfikację między wszystkimi węzłami, a następnie uruchomić niestandardową specyfikację w węźle harmonogramu:

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
   Order = 1 # optional

Spowoduje to zastosowanie zarówno specyfikacji, jak common i scheduler do węzła harmonogramu, przy jednoczesnym zastosowaniu common tylko specyfikacji i execute do środowiska nodearray wykonywania.

Domyślnie specyfikacje będą uruchamiane w kolejności, w której są wyświetlane w szablonie, uruchamiając najpierw dziedziczone specyfikacje. Order jest opcjonalną liczbą całkowitą ustawioną na wartość domyślną 1000 i może służyć do definiowania kolejności specyfikacji.

Jeśli w [[[cluster-init]]] definicji określono tylko jedną nazwę, przyjmuje się, że będzie to nazwa specyfikacji. Przykład:

[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0

jest prawidłową konfiguracją specyfikacji, w której Spec=myspec jest implikowane przez nazwę.

run_list

Listę uruchamiania można określić na poziomie projektu lub specyfikacji w ramach project.ini:

[spec scheduler]
run_list = role[a], recipe[b]

Gdy węzeł zawiera specyfikację "scheduler", zdefiniowana run_list zostanie automatycznie dołączona do dowolnej wcześniej zdefiniowanej listy runlist. Jeśli na przykład moja run_list zdefiniowana w obszarze [configuration] to run_list = recipe[test], ostateczna lista runlisty będzie miała wartość run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Możesz również zastąpić listę uruchamiania na poziomie specyfikacji w węźle. Spowoduje to zastąpienie wszystkich run_list uwzględnionych w project.ini. Jeśli na przykład zmieniliśmy definicję węzła na następującą:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

Lista runlista zdefiniowana w projekcie zostanie zignorowana, a powyższe zamiast tego zostaną użyte. Ostateczna lista uruchamiania w węźle to run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Uwaga

Listy runlist są specyficzne dla szefa kuchni i nie mają zastosowania w przeciwnym razie.

Lokalizacje plików

Spakowane pliki chef zostaną pobrane podczas fazy uruchamiania węzła rozruchowego. Są one pobierane do $JETPACK_HOME/system/chef/tarballs i rozpakowane do $JETPACK_HOME/system/chef/chef-repo/i używane podczas zbieżnia węzła.

Uwaga

Aby uruchomić niestandardowe książki kucharskie, musisz określić je w run_list dla węzła.

Pliki cluster-init zostaną pobrane do pliku /mnt/cluster-init/(project)/(spec)//. W przypadku "my-project" i "my-spec" zobaczysz skrypty, pliki i testy znajdujące się w folderze /mnt/cluster-init/my-project/my-spec.

Synchronizowanie projektów

Projekty CycleCloud można synchronizować z dublowania do lokalnego magazynu w chmurze klastra. Ustaw atrybut Funkcji SourceLocker w [cluster-init] sekcji w szablonie. Określona nazwa funkcji będzie używana jako źródło projektu, a zawartość zostanie zsynchronizowana z funkcją locker podczas uruchamiania klastra. Możesz również użyć nazwy funkcji locker jako pierwszej części nazwy inicjatora klastra. Jeśli na przykład funkcja źródłowa miała wartość "cyclecloud", następujące dwie definicje są takie same:

[cluster-init my-project:my-spect:1.2.3]
  SourceLocker=cyclecloud

[cluster-init cyclecloud/my-proect:my-spec:1.2.3]

Duży magazyn plików

Projekty obsługują duże pliki. Na najwyższym poziomie nowo utworzonego projektu zostanie wyświetlony katalog "blobs" dla dużych plików (obiektów blob). Należy pamiętać, że obiekty blob umieszczone w tym katalogu mają określony cel i działają inaczej niż elementy w katalogu "files".

Elementy w katalogu "blobs" są niezależne od specyfikacji i wersji: wszystkie elementy w "obiektach blob" mogą być współużytkowane między specyfikacjami lub wersjami projektu. Na przykład instalator programu, który często zmienia się, może być przechowywany w "obiektach blob" i przywołyny w project.ini. Podczas iterowania wersji projektu pojedynczy plik pozostaje taki sam i jest kopiowany tylko do magazynu w chmurze raz, co pozwala zaoszczędzić na kosztach transferu i magazynowania.

Aby dodać obiekt blob, wystarczy umieścić plik w katalogu "blobs" i edytować project.ini , aby odwołać się do tego pliku:

[blobs]
  Files=big_file1.tgz

W przypadku korzystania z project upload polecenia wszystkie obiekty blob, do których odwołuje się project.ini zostaną przeniesione do magazynu w chmurze.

Pliki dziennika

Pliki dziennika generowane podczas uruchamiania klastra-init znajdują się w $JETPACK_HOME/logs/cluster-init/(project)/(spec).

Uruchamianie plików

Po pomyślnym uruchomieniu skryptu cluster-init plik jest umieszczany w pliku /mnt/cluster-init/.run/(project)/(spec), aby upewnić się, że nie zostanie on uruchomiony ponownie w kolejnym konwercie. Jeśli chcesz ponownie uruchomić skrypt, usuń odpowiedni plik w tym katalogu.

Katalogi skryptów

Gdy usługa CycleCloud wykonuje skrypty w katalogu scripts, doda zmienne środowiskowe do ścieżki i nazwy katalogów specyfikacji i projektów:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

W systemie Linux projekt o nazwie "test-project" ze specyfikacją "default" będzie miał ścieżki w następujący sposób:

CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default

Uruchamianie tylko skryptów

Aby uruchomić tylko skrypty cluster-init:

jetpack converge --cluster-init

Dane wyjściowe z polecenia będą przechodzić do pliku STDOUT, a także jetpack.log. Każdy skrypt będzie również miał zarejestrowane dane wyjściowe:

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

Niestandardowa specyfikacja szefa kuchni i komposable

Każda specyfikacja ma w nim katalog chef. Przed zbieżniem każda specyfikacja zostanie rozpakowana i wyodrębniona do lokalnego repozytorium szefa kuchni, zastępując wszystkie istniejące książki kucharskie, role i torby na dane o takich samych nazwach. Odbywa się to w kolejności zdefiniowanej specyfikacji, więc w przypadku kolizji nazewnictwa ostatnia zdefiniowana specyfikacja zawsze wygra.

pobieranie pakietu jetpack

Aby pobrać obiekt blob w skryscie cluster-init, użyj polecenia jetpack download (filename) , aby pobrać go z katalogu obiektów blob. Uruchomienie tego polecenia ze skryptu cluster-init określi projekt i podstawowy adres URL. Aby użyć go w kontekście innego niż klaster,należy określić projekt (zobacz --help, aby uzyskać więcej informacji).

Dla użytkowników kuchni utworzono elementy jetpack_download LWRP:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

W programie chef domyślną lokalizacją pobierania jest #{node[:jetpack][:downloads]}. Aby zmienić miejsce docelowe pliku, użyj następujących elementów:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

W przypadku użycia w programie Chef należy określić projekt.