Sdílet prostřednictvím


Projekty

Projekt je kolekce prostředků, které definují konfigurace uzlů. Projekty obsahují specifikace. Když se uzel spustí, nakonfiguruje se zpracováním a spuštěním posloupnosti specifikací.

Azure CycleCloud používá projekty ke správě clusterovaných aplikací, jako jsou dávkové plánovače. V prostředí CycleCloud HPCPack je hn projekt specifikace a cn specifikace, která definuje konfigurace a recepty pro hlavní uzel HPCPack a výpočetní uzel.

Níže je definice částečného uzlu. Uzel registru dockeru spustí tři specifikace: vazbu specifikace z projektu okta verze 1.3.0 a také specifikace základního a registru z projektu Docker verze 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]]]

Koncová značka je číslo verze projektu.

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

Locker je odkaz na kontejner účtu úložiště a přihlašovací údaje. Uzly mají výchozílocker, takže tento atribut není nezbytně nutný.

Azure CycleCloud používá zkratku pro účty úložiště, takže https://mystorage.blob.core.windows.net/mycontainer je možné ho zapsat jako az://mystorage/mycontainer.

Uzel stáhne každý projekt, na který odkazuje zlockeru, pomocí nástroje pogo:

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

Pokud je projekt definován na uzlu, ale neexistuje v očekávaném umístění úložiště, bude uzel hlásit Software Installation Failure na CycleCloud.

CycleCloud má interní projekty, které běží ve výchozím nastavení na všech uzlech, aby prováděly speciální objem a zpracování sítě a nastavily komunikaci s CycleCloudem. Tyto interní projekty se automaticky zrcadlí dolockeru.

Uživatel zodpovídá za zrcadlení všech dalších projektů dolockeru. Rozhraní příkazového řádku CycleCloud obsahuje metody pro vytváření projektů:

cyclecloud project init myproject

a zrcadlo:

cyclecloud project init mylocker

projekty na zámky.

Specifikace jsou tvořeny skripty Pythonu, Shellu nebo PowerShellu.

Vytvoření nového projektu

Pokud chcete vytvořit nový projekt, použijte příkaz cyclecloud project init myprojectrozhraní příkazového řádku, kde myproject je název projektu, který chcete vytvořit. Tím se vytvoří projekt s názvem "myproject" s jednou specifikací s názvem "default", kterou můžete změnit. Adresářový strom se vytvoří s kostrami souborů, které změníte tak, aby obsahovaly vlastní informace.

Adresářová struktura

Příkaz projektu vytvoří následující adresáře:

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

Adresář šablon bude obsahovat šablony clusteru, zatímco specifikace budou obsahovat specifikace definující váš projekt. specifikace má dvě podadresáře: cluster-init a vlastní chef. cluster-init obsahuje adresáře, které mají zvláštní význam, například adresář skriptů (obsahuje skripty spouštěné v lexicografickém pořadí na uzlu), soubory (nezpracované datové soubory, které se mají umístit do uzlu) a testy (obsahuje testy , které se mají spustit při spuštění clusteru v testovacím režimu).

Podadresář vlastního chefu má tři adresáře: site-cookbooky (pro definice kuchařů), data_bags (definice datového kabelku) a role (soubory definic rolí chefu ).

project.ini

project.ini je soubor obsahující všechna metadata pro váš projekt. Může obsahovat:

Parametr Popis
name Název projektu. Slova musí být oddělena pomlčkami, např. order-66-2018
label Název projektu. Dlouhý název (s mezerami) clusteru pro účely zobrazení
typ Tři možnosti: plánovač, aplikace, <prázdná>. Určuje typ projektu a vygeneruje příslušnou šablonu. Výchozí: aplikace
verze Formát: x.x.x.x

Skříňky

Obsah projektu se ukládá dolockeru. Obsah projektu můžete nahrát do libovolnéholockeru definovaného v instalaci CycleCloudu pomocí příkazu cyclecloud project upload (locker), kde (locker) je název cloudového úložiště v instalaci CycleCloud. Tentolocker se nastaví jako výchozí cíl. Můžete také zjistit, jaké zámky jsou k dispozici pomocí příkazu cyclecloud locker list. Podrobnosti o konkrétnímlockeru lze zobrazit pomocí cyclecloud locker show (locker).

Pokud přidáte více než jeden zámek, můžete nastavit výchozí nastavení , cyclecloud project default_target (locker)a pak jednoduše spustit cyclecloud project upload. Můžete také nastavit globální výchozílocker, který lze sdílet projekty s příkazem cyclecloud project default locker (locker) -global.

Poznámka

Výchozí zámky se uloží do konfiguračního souboru cyclecloudu (obvykle se nachází v souboru ~/.cycle/config.ini), nikoli v project.ini. To se provádí, aby project.ini byla řízena verzí.

Nahrání obsahu projektu zazipuje adresáře chefů a synchronizuje init chef i cluster s vaším cílovýmlockerem. Budou uloženy na adrese:

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

Stažení objektu blob

Slouží project download ke stažení všech objektů blob odkazovaných v project.ini do místního adresáře objektů blob. Příkaz použije [locker] parametr a pokusí se stáhnout objekty blob uvedené v project.ini z nástroje Locker do místního úložiště. Pokud se soubory nedají najít, vrátí se chyba.

Nastavení projektu

Specifikace

Při vytváření nového projektu je definována jedna výchozí specifikace. Pomocí příkazu můžete do projektu cyclecloud project add_spec přidat další specifikace.

Správa verzí

Ve výchozím nastavení mají všechny projekty verzi 1.0.0. Při vývoji a nasazování projektů můžete nastavit vlastní verzi nastavením version=x.y.z v souboru project.ini .

Pokud například "locker_url" byl "az://my-account/my-container/projects", název projektu "Order66", verze byla 1.6.9 a specifikace je "výchozí", adresa URL by byla:

  • 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

Objekty blob

Existují dva typy objektů blob: objekty blob projektu a objekty blob uživatele.

Objekty blob projektu

Objekty blob projektu jsou binární soubory poskytované autorem projektu s předpokladem, že je možné je distribuovat (tj. binární soubor pro open source projekt, který můžete právně distribuovat). Objekty blob projektu přejdou do adresáře objektů blob projektu a po nahrání dolockeru se budou nacházet v umístění /project/blobs.

Pokud chcete do projektů přidat objekty blob, přidejte soubory do svéhoproject.ini:

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

Více objektů blob je možné oddělit čárkou. Můžete také zadat relativní cestu k adresáři objektů blob projektu.

Objekty blob uživatele

Objekty blob uživatele jsou binární soubory, které autor projektu nemůže právně distribuovat, například binární soubory UGE. Tyto soubory nejsou zabalené s projektem, ale místo toho je nutné je ručně nafázovat do nástroje Locker. Soubory se budou nacházet v umístění /blobs/my-project/my-blob.tgz. Objekty blob uživatele nemusí být definovány v project.ini.

Pokud chcete stáhnout libovolný objekt blob, použijte příkaz z rozhraní příkazového jetpack download řádku nebo jetpack_download prostředku Chefu. CycleCloud nejprve vyhledá objekt blob uživatele. Pokud tento soubor není umístěný, použije se objekt blob na úrovni projektu.

Poznámka

Objekt blob projektu je možné přepsat objektem blob uživatele se stejným názvem.

Zadání projektu v rámci šablony clusteru

Syntaxe projektu umožňuje zadat více specifikací na uzlech. Pokud chcete definovat projekt, použijte následující:

[[[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)

Poznámka

Název zadaný po "specifikaci" může být cokoli, ale může a měl by být použit jako zástupce k definování některých > běžných vlastností.

Na daný uzel můžete také použít několik specifikací:

[[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)

Oddělením názvu projektu, názvu specifikace a verze dvojtečkami může CycleCloud tyto hodnoty analyzovat automaticky do příslušných Project/Version/Spec nastavení:

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

Specifikace lze také dědit mezi uzly. Můžete například sdílet společnou specifikaci mezi všemi uzly a pak spustit vlastní specifikaci na uzlu plánovače:

[[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

To by se použilo jak u commonscheduler uzlu plánovače, tak i specifikace, zatímco pouze použití common a execute specifikace pro spuštění nodearray.

Ve výchozím nastavení se specifikace spustí v pořadí, ve kterém jsou zobrazeny v šabloně, a nejprve spustí zděděné specifikace. Order je volitelné celé číslo nastavené na výchozí hodnotu 1000 a lze ho použít k definování pořadí specifikací.

Pokud je v [[[cluster-init]]] definici zadán pouze jeden název, předpokládá se, že se jedná o název specifikace. Příklad:

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

je platné nastavení specifikace, ve kterém Spec=myspec je odvozeno z názvu.

run_list

Seznam runlist můžete zadat na úrovni projektu nebo specifikace v rámci project.ini:

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

Pokud uzel obsahuje specifikátor "scheduler", run_list definované se automaticky připojí k libovolnému dříve definovanému seznamu runlist. Pokud je run_list = recipe[test]například můj run_list definovaný v části [configuration] , konečný seznam runlist by byl run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Seznam runlist můžete také přepsat na úrovni specifikace na uzlu. Tím se nahradí všechny run_list zahrnuté v project.ini. Pokud jsme například změnili definici uzlu na následující:

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

Seznam runlist definovaný v projektu bude ignorován a místo toho by se použil výše uvedený seznam. Konečný seznam runlist na uzlu by pak byl run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Poznámka

seznamy runlist jsou specifické pro chef a nevztahují se jinak.

Umístění souborů

Soubory zip chefu se stáhnou během fáze spouštění uzlu. Stáhnou se do $JETPACK_HOME/system/chef/tarballs a rozbalí se do $JETPACK_HOME/system/chef/chef-repo/ a použijí se při sblížení uzlu.

Poznámka

Pokud chcete spustit vlastní kuchařky, musíte je zadat v run_list uzlu.

Soubory cluster-init se stáhnou do /mnt/cluster-init/(project)/(spec)/. V případě "my-project" a "my-spec" uvidíte skripty, soubory a testy umístěné v /mnt/cluster-init/my-project/my-spec.

Synchronizace projektů

Projekty CycleCloud je možné synchronizovat ze zrcadlek do místního cloudového úložiště clusteru. Nastavte atribut SourceLockeru v oddílu [cluster-init] v šabloně. Zadaný názevlockeru se použije jako zdroj projektu a obsah se synchronizuje s vašímlockerem na začátku clusteru. Můžete také použít názevlockeru jako první část názvu cluster-init. Pokud je například zdrojovýlocker "cyclecloud", jsou následující dvě definice stejné:

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

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

Velké úložiště souborů

Projekty podporují velké soubory. Na nejvyšší úrovni nově vytvořeného projektu uvidíte adresář objektů blob pro velké soubory (objekty blob). Upozorňujeme, že objekty blob umístěné v tomto adresáři mají konkrétní účel a budou fungovat jinak než položky v adresáři "soubory".

Položky v adresáři "blobs" jsou specifikace a verze nezávislé: cokoli v objektech blob lze sdílet mezi specifikacemi nebo verzemi projektu. Instalační program pro program, který se často mění, může být uložen v "objektech blob" a odkazován v rámci vašeho project.ini. Při iteraci verzí projektu zůstane tento soubor stejný a zkopíruje se do cloudového úložiště jenom jednou, což šetří náklady na přenos a úložiště.

Pokud chcete přidat objekt blob, jednoduše umístěte soubor do adresáře objektů blob a upravte project.ini tak, aby odkaz na tento soubor:

[blobs]
  Files=big_file1.tgz

Při použití project upload příkazu se všechny objekty blob odkazované v project.ini přenesou do cloudového úložiště.

Soubory protokolu

Soubory protokolů vygenerované při spouštění cluster-init jsou umístěny v $JETPACK_HOME/logs/cluster-init/(project)/(spec).

Spuštění souborů

Když se skript cluster-init úspěšně spustí, soubor se umístí do složky /mnt/cluster-init/.run/(project)/(spec), aby se zajistilo, že se znovu nespustí v následném konvergování. Pokud chcete skript spustit znovu, odstraňte příslušný soubor v tomto adresáři.

Adresáře skriptů

Když CycleCloud spustí skripty v adresáři skriptů, přidá proměnné prostředí do cesty a názvu adresáře specifikace a projektu:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

V linuxu by projekt s názvem "test-project" se specifikací "default" měl následující cesty:

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

Spouštění pouze skriptů

Spuštění pouze skriptů cluster-init:

jetpack converge --cluster-init

Výstup z příkazu přejde na STDOUT i na jetpack.log. Každý skript bude mít také protokolovaný výstup:

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

Vlastní specifikace chefu a komposable

Každá specifikace má v něm adresář chefu. Před konvergováním se všechny specifikace nebudou oddělovat a extrahují do místního úložiště chef a nahradí stávající kuchařky, role a datové tašky stejnými názvy. To se provádí v pořadí, v jakém jsou specifikace definovány, takže v případě kolize pojmenování bude poslední definovaná specifikace vždy vyhrát.

jetpack download

Pokud chcete stáhnout objekt blob v rámci skriptu cluster-init, pomocí příkazu jetpack download (filename) ho stáhněte z adresáře objektů blob. Spuštěním tohoto příkazu ze skriptu cluster-init určíte projekt a základní adresu URL. Pokud ho chcete použít v kontextu bez clusteru, budete muset zadat projekt (další informace najdete v nápovědě).

Pro uživatele chefu jetpack_download byl vytvořen LWRP:

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

V chefu je výchozí umístění #{node[:jetpack][:downloads]}pro stažení . Pokud chcete změnit cíl souboru, použijte následující:

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

Při použití v rámci chefu je nutné zadat projekt.