Uygulamaları paketleme
Bu makalede, bir Service Fabric uygulamasının nasıl paketlenip dağıtıma hazır hale getirilip hazır hale getirilip hazır hale getirilediği açıklanır.
Paket düzeni
Uygulama bildirimi, bir veya daha fazla hizmet bildirimi ve diğer gerekli paket dosyaları, Service Fabric kümesine dağıtım için belirli bir düzende düzenlenmelidir. Bu makaledeki örnek bildirimlerin aşağıdaki dizin yapısında düzenlenmesi gerekir:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Klasörler, karşılık gelen her öğenin Name öznitelikleriyle eşleşecek şekilde adlandırılır. Örneğin, hizmet bildirimi MyCodeA ve MyCodeB adlarına sahip iki kod paketi içeriyorsa, aynı adlara sahip iki klasör her kod paketi için gerekli ikili dosyaları içerir.
SetupEntryPoint kullanma
SetupEntryPoint'i kullanmaya yönelik tipik senaryolar, hizmet başlamadan önce yürütülebilir dosya çalıştırmanız veya yükseltilmiş ayrıcalıklarla bir işlem gerçekleştirmeniz gerektiği durumlardır. Örneğin:
- Hizmet yürütülebilir dosyasının ihtiyaç duyduğu ortam değişkenlerini ayarlama ve başlatma. Yalnızca Service Fabric programlama modelleri aracılığıyla yazılan yürütülebilir dosyalarla sınırlı değildir. Örneğin, npm.exe bir Node.js uygulaması dağıtmak için yapılandırılmış bazı ortam değişkenleri gerekir.
- Güvenlik sertifikalarını yükleyerek erişim denetimini ayarlama.
SetupEntryPoint'i yapılandırma hakkında daha fazla bilgi için bkz. Hizmet kurulum giriş noktası için ilkeyi yapılandırma
Yapılandırma
Visual Studio kullanarak paket oluşturma
Uygulamanızı oluşturmak için Visual Studio kullandıysanız, yukarıda açıklanan düzen ile eşleşen bir paketi otomatik olarak oluşturmak için Paketle komutunu kullanabilirsiniz.
Paket oluşturmak için, Çözüm Gezgini'da uygulama projesine sağ tıklayın ve Paket komutunu seçin:
Paketleme tamamlandığında, paketin konumunu Çıkış penceresinde bulabilirsiniz. Visual Studio'da uygulamanızı dağıttığınızda veya hatalarını ayıkladığınızda paketleme adımı otomatik olarak gerçekleşir.
Komut satırına göre paket oluşturma
Kullanarak uygulamanızı msbuild.exe
program aracılığıyla paketlemek de mümkündür. Arka planda Visual Studio bunu çalıştırdığından çıktı aynı olur.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Paketi test edin
Test-ServiceFabricApplicationPackage komutunu kullanarak PowerShell aracılığıyla paket yapısını yerel olarak doğrulayabilirsiniz. Bu komut bildirim ayrıştırma sorunlarını denetler ve tüm başvuruları doğrular. Bu komut yalnızca paketteki dizinlerin ve dosyaların yapısal doğruluğunu doğrular. Tüm gerekli dosyaların mevcut olup olmadığını denetlemenin ötesinde kod veya veri paketi içeriğini doğrulamaz.
Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml
Bu hata, SetupEntryPoint hizmet bildiriminde başvuruda bulunan MySetup.bat dosyasının kod paketinde eksik olduğunu gösterir. Eksik dosya eklendikten sonra uygulama doğrulaması şunları geçirir:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True
Uygulamanız tanımlı uygulama parametrelerine sahipse, bunları doğru doğrulama için Test-ServiceFabricApplicationPackage'da geçirebilirsiniz.
Uygulamanın dağıtılacağı kümeyi biliyorsanız parametresini ImageStoreConnectionString
geçirmeniz önerilir. Bu durumda paket, kümede zaten çalışmakta olan uygulamanın önceki sürümlerine göre de doğrulanır. Örneğin, doğrulama aynı sürüme sahip ancak farklı içeriğe sahip bir paketin zaten dağıtılıp dağıtılmadığını algılayabilir.
Uygulama doğru paketlenip doğrulamayı geçtikten sonra, daha hızlı dağıtım işlemleri için paketi sıkıştırmayı göz önünde bulundurun.
Paketi sıkıştırma
Bir paket büyükse veya çok sayıda dosyası varsa, daha hızlı dağıtım için paketi sıkıştırabilirsiniz. Sıkıştırma, dosya sayısını ve paket boyutunu azaltır. Sıkıştırılmış bir uygulama paketi için, özellikle sıkıştırma kopyalamanın bir parçası olarak yapılıyorsa, uygulama paketini karşıya yüklemek sıkıştırılmamış paketi karşıya yüklemeyle karşılaştırıldığında daha uzun sürebilir. Sıkıştırma ile uygulama türünün kaydedilmesi ve kaydının kaldırılması daha hızlı olur.
Sıkıştırılmış ve sıkıştırılmamış paketler için dağıtım mekanizması aynıdır. Paket sıkıştırılırsa, küme görüntü deposunda bu şekilde depolanır ve uygulama çalıştırılmadan önce düğümde sıkıştırılmaz. Sıkıştırma, geçerli Service Fabric paketini sıkıştırılmış sürümle değiştirir. Klasör yazma izinlerine izin vermelidir. Zaten sıkıştırılmış bir pakette sıkıştırma çalıştırıldığında hiçbir değişiklik yapılmaz.
Anahtarla CompressPackage
Copy-ServiceFabricApplicationPackage PowerShell komutunu çalıştırarak bir paketi sıkıştırabilirsiniz. Anahtarı kullanarak UncompressPackage
paketin sıkıştırmasını aynı komutla açabilirsiniz.
Aşağıdaki komut, paketi görüntü deposuna kopyalamadan sıkıştırır. Bayrak olmadan Copy-ServiceFabricApplicationPackage komutunu kullanarak sıkıştırılmış bir paketi gerektiği gibi bir veya daha fazla Service Fabric kümesine SkipCopy
kopyalayabilirsiniz.
Paket artık , config
ve data
paketleri için code
sıkıştırılmış dosyaları içerir. Uygulama bildirimi ve hizmet bildirimleri, birçok iç işlem için gerekli olduğundan sıkıştırmaz. Örneğin, paket paylaşımı, uygulama türü adı ve belirli doğrulamalar için sürüm ayıklamanın tümü bildirimlere erişmesi gerekir. Bildirimlerin zipping yapılması bu işlemleri verimsiz hale getirir.
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
ServiceManifest.xml
MyCode.zip
MyConfig.zip
MyData.zip
Alternatif olarak, paketi tek adımda Copy-ServiceFabricApplicationPackage ile sıkıştırabilir ve kopyalayabilirsiniz. Paket büyükse, hem paket sıkıştırma hem de kümeye yükleme için zaman aşımına izin verecek kadar yüksek bir zaman aşımı sağlayın.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
Service Fabric, doğrulama için uygulama paketleri için sağlama toplamlarını dahili olarak hesaplar. Sıkıştırma kullanılırken sağlama toplamları her paketin sıkıştırılmış sürümlerinde hesaplanır. Aynı uygulama paketinden yeni bir zip oluşturmak farklı sağlama toplamları oluşturur. Doğrulama hatalarını önlemek için fark sağlamayı kullanın. Bu seçenekle, değiştirilmemiş paketleri yeni sürüme eklemeyin. Bunun yerine, bunlara doğrudan yeni hizmet bildiriminden başvurun.
Fark sağlama bir seçenek değilse ve paketleri dahil etmeniz gerekiyorsa sağlama toplamı uyuşmazlığından kaçınmak için , config
ve data
paketleri için code
yeni sürümler oluşturun. Önceki sürümde sıkıştırma kullanılıp kullanılmadığına bakılmaksızın, sıkıştırılmış bir paket kullanıldığında, değişmeyen paketler için yeni sürümler oluşturmak gerekir.
Paket artık doğru paketlenmiş, doğrulanmış ve sıkıştırılmıştır (gerekirse), bu nedenle bir veya daha fazla Service Fabric kümesine dağıtım için hazırdır.
Visual Studio kullanarak dağıtım yaparken paketleri sıkıştırma
Öğesini yayımlama profilinize ekleyerek CopyPackageParameters
ve özniteliğini true
olarak ayarlayarak Visual Studio'ya dağıtımdaki paketleri sıkıştırmasını CompressPackage
sağlayabilirsiniz.
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
<ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
<ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
<CopyPackageParameters CompressPackage="true"/>
</PublishProfile>
Sfpkg oluşturma
Sürüm 6.1'den başlayarak Service Fabric, bir dış depodan sağlama sağlar.
Bu seçenekle, uygulama paketinin görüntü deposuna kopyalanması gerekmez. Bunun yerine, bir sfpkg
dosya oluşturup bir dış depoya yükleyebilir, ardından sağlama sırasında indirme URI'sini Service Fabric'e sağlayabilirsiniz. Aynı paket birden çok kümeye sağlanabilir. Dış depodan sağlama, paketi her kümeye kopyalamak için gereken süreden tasarruf sağlar.
Dosya sfpkg
, ilk uygulama paketini içeren ve uzantısına .sfpkg
sahip bir zip dosyasıdır. Zip içinde uygulama paketi sıkıştırılabilir veya sıkıştırılamaz. Zip içindeki uygulama paketinin sıkıştırması, daha önce belirtildiği gibi kod, yapılandırma ve veri paketi düzeylerinde gerçekleştirilir.
Dosya oluşturmak sfpkg
için, sıkıştırılmış veya değil özgün uygulama paketini içeren bir klasörle başlayın. Ardından, ".sfpkg" uzantısına sahip klasörü sıkıştırmak için herhangi bir yardımcı programı kullanın. Örneğin, ZipFile.CreateFromDirectory kullanın.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
, sfpkg
Service Fabric'in dışında bant dışında dış depoya yüklenmelidir. Dış depo, REST http veya https uç noktasını kullanıma sunan herhangi bir depo olabilir. Sağlama sırasında Service Fabric uygulama paketini indirmek sfpkg
için bir GET işlemi yürütür, bu nedenle deponun paket için OKUMA erişimine izin vermesi gerekir.
Paketi sağlamak için, indirme URI'sini ve uygulama türü bilgilerini gerektiren dış sağlamayı kullanın.
Not
Görüntü deposu göreli yolunu temel alan sağlama şu anda dosyaları desteklemez sfpkg
. Bu nedenle, sfpkg
görüntü deposuna kopyalanmamalıdır.
Sonraki adımlar
Uygulamaları dağıtma ve kaldırma, uygulama örneklerini yönetmek için PowerShell'in nasıl kullanılacağını açıklar
Birden çok ortam için uygulama parametrelerinin yönetilmesi, farklı uygulama örnekleri için parametrelerin ve ortam değişkenlerinin nasıl yapılandırıldığı açıklanmaktadır.
Uygulamanız için güvenlik ilkelerini yapılandırma, erişimi kısıtlamak için güvenlik ilkeleri altında hizmetlerin nasıl çalıştırıldığı açıklanmaktadır.