Projeler

Proje, düğüm yapılandırmalarını tanımlayan bir kaynak koleksiyonudur. Projeler belirtimler içerir. Bir düğüm başlatıldığında, bir dizi belirtim işlenerek ve çalıştırılarak yapılandırılır.

Azure CycleCloud, toplu iş zamanlayıcıları gibi kümelenmiş uygulamaları yönetmek için projeleri kullanır. CycleCloud HPCPack'te proje, HPCPack baş düğüm ve cn işlem düğümü yapılandırmalarını ve tariflerini tanımlayan bir hn belirtim ve belirtimdir.

Aşağıda kısmi düğüm tanımı yer almaktadır. Docker-registry düğümü üç belirtim çalıştırır: okta projesinin 1.3.0 sürümündeki bağlama belirtimlerinin yanı sıra docker projesi sürüm 2.0.0'dan çekirdek ve kayıt defteri belirtimleri:

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

Sondaki etiket, proje sürüm numarasıdır.

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

Dolap, depolama hesabı kapsayıcısına ve kimlik bilgilerine başvurudur. Düğümlerin varsayılan bir dolabı vardır, bu nedenle bu öznitelik kesinlikle gerekli değildir.

Azure CycleCloud, https://mystorage.blob.core.windows.net/mycontainer depolama hesapları için kısaltma kullandığı için az://mystorage/mycontainer olarak yazılabilir.

Düğüm, pogo aracını kullanarak başvuracağı her projeyi dolaptan indirir:

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

Bir proje bir düğümde tanımlanmışsa ancak beklenen depolama konumunda yoksa, düğüm cycleCloud'a bir Software Installation Failure rapor eder.

CycleCloud, özel birim ve ağ işleme gerçekleştirmek ve CycleCloud ile iletişim kurmak için tüm düğümlerde varsayılan olarak çalışan iç projelere sahiptir. Bu iç projeler otomatik olarak kasaya yansıtılır.

Kullanıcı, herhangi bir ek projeyi soyunma odasına yansıtmaktan sorumludur. CycleCloud CLI'nin proje oluşturma yöntemleri vardır:

cyclecloud project init myproject

ve yansıtma:

cyclecloud project init mylocker

projeleri dolaplara.

Belirtimler python, shell veya powershell betiklerinden oluşur.

Yeni Proje Oluştur

Yeni proje oluşturmak için CLI komutunu cyclecloud project init myprojectkullanın. Burada myproject , oluşturmak istediğiniz projenin adıdır. Bu, değiştirebileceğiniz "default" adlı tek bir belirtim ile "myproject" adlı bir proje oluşturur. Dizin ağacı, kendi bilgilerinizi içerecek şekilde değiştirdiğiniz iskelet dosyalarla oluşturulur.

Dizin Yapısı

Aşağıdaki dizinler proje komutu tarafından oluşturulur:

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

Templates dizini küme şablonlarınızı tutarken, belirtimler projenizi tanımlayan belirtimleri içerir. spec iki alt dizine sahiptir: cluster-init ve custom chef. cluster-init, betik dizini (düğümde sözcük düzeninde yürütülen betikler içerir), dosyalar (düğüme yerleştirilecek ham veri dosyaları) ve testler (bir küme test modunda başlatıldığında çalıştırılacak testleri içerir) gibi özel anlamlara sahip dizinler içerir.

Özel chef alt dizininde üç dizin vardır: site-yemek kitapları (yemek kitabı tanımları için), data_bags (veri çantası tanımları) ve roller (şef rol tanımı dosyaları).

project.ini

project.ini , projenizin tüm meta verilerini içeren dosyadır. İçerebilir:

Parametre Açıklama
name Projenin adı. Sözcükler tirelerle ayrılmalıdır, örneğin order-66-2018
etiket Projenin adı. Görüntüleme amacıyla kümenin uzun adı (boşluklu).
tür Üç seçenek: zamanlayıcı, uygulama, <boş>. Projenin türünü belirler ve uygun şablonu oluşturur. Varsayılan: uygulama
sürüm Biçim: x.x.x

Dolap

Proje içeriği bir dolabın içinde depolanır. Projenizin içeriğini CycleCloud yüklemenizde tanımlanan herhangi bir dolapota komutuyla cyclecloud project upload (locker)yükleyebilirsiniz. Burada (dolap), CycleCloud yüklemenizdeki bir bulut depolama dolabının adıdır. Bu dolap varsayılan hedef olarak ayarlanır. Alternatif olarak, komutuyla cyclecloud locker listkullanabileceğiniz dolapları görebilirsiniz. Belirli bir dolap hakkındaki ayrıntılar ile cyclecloud locker show (locker)görüntülenebilir.

Birden fazla dolap eklerseniz, ile cyclecloud project default_target (locker)varsayılanınızı ayarlayabilir ve ardından komutunu çalıştırmanız cyclecloud project uploadyeterlidir. Ayrıca komutuyla cyclecloud project default locker (locker) -globalprojeler tarafından paylaşılabilen bir genel varsayılan dolap da ayarlayabilirsiniz.

Not

Varsayılan dolaplar project.ini değil cyclecloud yapılandırma dosyasında (genellikle ~/.cycle/config.ini bulunur) depolanır. Bu, project.ini sürüm denetimine izin vermek için yapılır.

Proje içeriğinizi karşıya yüklediğinizde chef dizinleri sıkıştırılır ve hem chef hem de cluster init hedef dolabınızla eşitlenir. Bunlar şu konumda depolanır:

  • (locker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (dolap)/projeler/(proje)/(sürüm)/(spec_name)/chef

Blob İndirme

project.ini başvuruda bulunan tüm blobları yerel bloblar dizininize indirmek için kullanın project download . komutu parametresini [locker] kullanır ve project.ini'de listelenen blobları dolaptan yerel depolama alanına indirmeyi dener. Dosyalar bulunamazsa bir hata döndürülür.

Proje Kurulumu

Özellikler

Yeni proje oluştururken tek bir varsayılan belirtim tanımlanır. komutunu kullanarak cyclecloud project add_spec projenize ek özellikler ekleyebilirsiniz.

Sürüm Oluşturma

Varsayılan olarak, tüm projeler 1.0.0 sürümüne sahiptir. project.ini dosyasını ayarlayarak version=x.y.z proje geliştirirken ve dağıtırken özel bir sürüm ayarlayabilirsiniz.

Örneğin, "locker_url" "az://my-account/my-container/projects" ise, proje "Order66" olarak adlandırıldıysa, sürüm "1.6.9" ve belirtim "varsayılan" ise url'niz şu şekilde olur:

  • 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

Bloblar

İki tür blob vardır: proje blobları ve kullanıcı blobları.

Proje Blobları

Proje Blobları, dağıtılabilir varsayımıyla projenin yazarı tarafından sağlanan ikili dosyalardır (yani yasal olarak yeniden dağıtmanıza izin verilen açık kaynak bir proje için ikili dosya). Proje Blobları bir projenin "bloblar" dizinine gider ve bir dolapta yüklendiğinde /project/blobs konumunda bulunur.

Projelere blob eklemek için dosyaları project.iniekleyin:

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

Birden çok blob virgülle ayrılabilir. Projenin blob dizininin göreli yolunu da belirtebilirsiniz.

Kullanıcı Blobları

Kullanıcı Blobları, projenin yazarının UGE ikili dosyaları gibi yasal olarak yeniden dağıtamadığı ikili dosyalardır. Bu dosyalar projeyle birlikte paketlenmez, ancak bunun yerine el ile soyunma odasına hazırlanmalıdır. Dosyalar /blobs/my-project/my-blob.tgz konumunda bulunur. Kullanıcı Bloblarının project.ini tanımlanması gerekmez.

Herhangi bir blobu indirmek için CLI'dan veya Chef kaynağından jetpack_download komutunu kullanınjetpack download. CycleCloud önce kullanıcı blobunu arar. Bu dosya bulunmazsa proje düzeyi blobu kullanılır.

Not

Bir proje blobunu aynı ada sahip bir kullanıcı blobuyla geçersiz kılmak mümkündür.

Küme Şablonu İçinde Proje Belirtme

Proje söz dizimi, düğümlerinizde birden çok belirtim belirtmenize olanak tanır. Proje tanımlamak için aşağıdakileri kullanın:

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

Not

'Belirtim' sonrasında belirtilen ad herhangi bir şey olabilir, ancak bazı > ortak özellikleri tanımlamak için kısayol olarak kullanılabilir ve kullanılmalıdır.

Belirli bir düğüme aşağıdaki gibi birden çok belirtim de uygulayabilirsiniz:

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

CycleCloud, proje adını, belirtim adını ve sürümünü iki nokta üst üste ile ayırarak bu değerleri otomatik olarak uygun Project/Version/Spec ayarlara ayrıştırabilir:

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

Belirtimler düğümler arasında da devralınabilir. Örneğin, tüm düğümler arasında ortak bir belirtim paylaşabilir ve ardından zamanlayıcı düğümünde özel bir belirtim çalıştırabilirsiniz:

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

Bu, zamanlayıcı düğümüne hem ve scheduler belirtimlerini hem de common ve belirtimlerini uygularken nodearray yürütmesine yalnızca ve execute belirtimlerini uygularcommon.

Varsayılan olarak, belirtimler şablonda gösterildikleri sırayla çalıştırılır ve önce devralınan belirtimler çalıştırılır. Order 1000 varsayılan değerine ayarlanmış isteğe bağlı bir tamsayıdır ve belirtimlerin sırasını tanımlamak için kullanılabilir.

Tanımda [[[cluster-init]]] yalnızca bir ad belirtilirse belirtim adı olduğu varsayılır. Örnek:

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

adıyla ima edilen Spec=myspec geçerli bir belirtim kurulumudur.

run_list

project.ini içinde proje veya belirtim düzeyinde bir runlist belirtebilirsiniz:

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

Bir düğüm "scheduler" belirtimini içerdiğinde, tanımlanan run_list önceden tanımlanmış herhangi bir çalıştırma listesine otomatik olarak eklenir. Örneğin, altında [configuration]run_list = recipe[test]tanımlanan run_list ise, son çalıştırma listesi olacaktır run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Ayrıca düğümdeki belirtim düzeyinde bir çalıştırma listesinin üzerine yazabilirsiniz. Bu, project.ini dahil edilen tüm run_list değiştirir. Örneğin, düğüm tanımını aşağıdaki şekilde değiştirdiğimizde:

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

Projede tanımlanan çalıştırma listesi yoksayılır ve bunun yerine yukarıdakiler kullanılır. Ardından düğümdeki son çalıştırma listesi olacaktır run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Not

runlists chef'e özeldir ve aksini uygulamaz.

Dosya Konumları

Sıkıştırılmış chef dosyaları, düğüm başlatma işleminin önyükleme aşamasında indirilir. bunlar $JETPACK_HOME/system/chef/tarballs'a indirilir ve $JETPACK_HOME/system/chef/chef-repo/ öğesine açılır ve düğüm yakınsanırken kullanılır.

Not

Özel yemek kitaplarını çalıştırmak için bunları düğümün run_list belirtmeniz GEREKİr.

cluster-init dosyaları /mnt/cluster-init/(project)/(spec)/ öğesine indirilir. "my-project" ve "my-spec" için /mnt/cluster-init/my-project/my-spec konumunda bulunan betiklerinizi, dosyalarınızı ve testlerinizi görürsünüz.

Projeleri Eşitleme

CycleCloud projeleri yansıtmalardan küme yerel bulut depolama alanına eşitlenebilir. Şablonunuzun içindeki bir bölümde SourceLocker [cluster-init] özniteliği ayarlayın. Belirtilen dolabın adı projenin kaynağı olarak kullanılır ve içerik küme başlangıcındaki dolabınızla eşitlenir. Ayrıca, cluster-init adının ilk parçası olarak dolabın adını da kullanabilirsiniz. Örneğin, kaynak dolap "cyclecloud" ise, aşağıdaki iki tanım aynıdır:

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

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

Büyük Dosya Depolama

Projeler büyük dosyaları destekler. Yeni oluşturulan projenin en üst düzeyinde, büyük dosyalarınız (bloblar) için bir "bloblar" dizini görürsünüz. Bu dizine yerleştirilen blobların belirli bir amacı olduğunu ve "dosyalar" dizinindeki öğelerden farklı davranacağını lütfen unutmayın.

"Bloblar" dizinindeki öğeler belirtim ve sürümden bağımsızdır: "bloblar" içindeki her şey belirtimler veya proje sürümleri arasında paylaşılabilir. Örneğin, nadiren değişen bir programın yükleyicisi "bloblar" içinde depolanabilir ve project.iniiçinde başvurulabilir. Projenizin sürümlerinde yineleme yaptığınız sırada, bu tek dosya aynı kalır ve bulut depolama alanınıza yalnızca bir kez kopyalanır ve bu da aktarım ve depolama maliyetinden tasarruf etmenizi sağlar.

Blob eklemek için bir dosyayı "blobs" dizinine yerleştirmeniz ve project.ini bu dosyaya başvurmak üzere düzenlemeniz yeterlidir:

[blobs]
  Files=big_file1.tgz

komutunu kullandığınızda project upload , project.ini başvuruda bulunan tüm bloblar bulut depolama alanına aktarılır.

Günlük Dosyaları

cluster-init çalıştırılırken oluşturulan günlük dosyaları $JETPACK_HOME/logs/cluster-init/(project)/(spec) konumunda bulunur.

Dosyaları Çalıştır

Bir cluster-init betiği başarıyla çalıştırıldığında, sonraki bir yakınsamada yeniden çalışmadığından emin olmak için /mnt/cluster-init/.run/(project)/(spec) içine bir dosya yerleştirilir. Betiği yeniden çalıştırmak istiyorsanız, bu dizindeki uygun dosyayı silin.

Betik Dizinleri

CycleCloud betikler dizininde betikleri yürüttüğünde, belirtim ve proje dizinlerinin yoluna ve adına ortam değişkenleri ekler:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

Linux'ta, "test-project" adlı ve "default" belirtimi olan bir projenin yolları aşağıdaki gibi olacaktır:

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

Yalnızca Betikleri Çalıştır

YALNIZCA cluster-init betiklerini çalıştırmak için:

jetpack converge --cluster-init

Komutun çıkışı hem STDOUT'a hem de jetpack.log'a gider. Her betiğin çıkışı da şu şekilde günlüğe kaydedilir:

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

Özel şef ve Birleştirilebilir Özellikler

Her belirtim içinde bir chef dizini vardır. Yakınsanmadan önce her belirtim birleştirilmeyecek ve yerel chef-repo'ya ayıklanacak ve mevcut yemek kitaplarını, rolleri ve veri torbalarını aynı adlarla değiştirecektir. Bu, belirtimlerin tanımlanma sırasına göre yapılır, bu nedenle adlandırma çakışması durumunda, tanımlanan son belirtim her zaman kazanır.

jetpack indirme

Cluster-init betiğindeki bir blobu indirmek için komutunu jetpack download (filename) kullanarak blobs dizininden çekin. Bu komutu bir cluster-init betiğinden çalıştırmak, sizin için projeyi ve temel URL'yi belirler. Bunu cluster-init olmayan bir bağlamda kullanmak için projeyi belirtmeniz gerekir (daha fazla bilgi için --help bölümüne bakın).

Şef kullanıcıları için bir jetpack_download LWRP oluşturuldu:

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

Chef'te varsayılan indirme konumu şeklindedir #{node[:jetpack][:downloads]}. Dosya hedefini değiştirmek için aşağıdakileri kullanın:

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

Chef içinde kullanıldığında projeyi belirtmeniz gerekir.