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 myproject
kullanı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 list
kullanabileceğ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 upload
yeterlidir. Ayrıca komutuyla cyclecloud project default locker (locker) -global
projeler 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.