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 myproject
rozhraní 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 common
scheduler
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.