PowerShell kullanarak uygulamaları dağıtma ve kaldırma


Bir uygulama türü paketlendikten sonra Azure Service Fabric kümesine dağıtıma hazır olur. Dağıtım aşağıdaki üç adımı içerir:

  1. Uygulama paketini görüntü deposuna yükleyin.
  2. Uygulama türünü görüntü deposu göreli yoluna kaydedin.
  3. Uygulama örneğini oluşturun.

Dağıtılan uygulama artık gerekli olmadığında, uygulama örneğini ve uygulama türünü silebilirsiniz. Bir uygulamayı kümeden tamamen kaldırmak için aşağıdaki adımları içerir:

  1. Çalışan uygulama örneğini kaldırın (veya silin).
  2. Artık ihtiyacınız yoksa uygulama türünün kaydını kaldırın.
  3. Uygulama paketini görüntü deposundan kaldırın.

Yerel geliştirme kümenizde uygulama dağıtmak ve hata ayıklamak için Visual Studio kullanıyorsanız, önceki tüm adımlar bir PowerShell betiği aracılığıyla otomatik olarak işlenir. Bu betik, uygulama projesinin Betikler klasöründe bulunur. Bu makalede, aynı işlemleri Visual Studio dışında gerçekleştirebilmeniz için bu betiğin ne yaptığı hakkında arka plan sağlanır.

Bir uygulamayı dağıtmanın bir diğer yolu da dış sağlama kullanmaktır. Uygulama paketi olarak sfpkg paketlenebilir ve bir dış depoya yüklenebilir. Bu durumda, görüntü deposuna yükleme gerekli değildir. Dağıtım için aşağıdaki adımlar gerekir:

  1. öğesini sfpkg bir dış depoya yükleyin. Dış depo, REST http veya https uç noktasını kullanıma sunan herhangi bir depo olabilir.
  2. Dış indirme URI'sini ve uygulama türü bilgilerini kullanarak uygulama türünü kaydedin.
  3. Uygulama örneğini oluşturun.

Temizleme için uygulama örneklerini kaldırın ve uygulama türünün kaydını kaldırın. Paket görüntü deposuna kopyalanmadığından, temizlenmek için geçici bir konum yoktur. Dış depodan sağlama, Service Fabric sürüm 6.1'den itibaren kullanılabilir.

Not

Visual Studio şu anda dış sağlamayı desteklemiyor.

Kümeye bağlanma

Bu makaledeki PowerShell komutlarını çalıştırmadan önce, her zaman Service Fabric kümesine bağlanmak için Connect-ServiceFabricCluster komutunu kullanarak başlayın. Yerel geliştirme kümesine bağlanmak için aşağıdakileri çalıştırın:

Connect-ServiceFabricCluster

Microsoft Entra ID, X509 sertifikaları veya Windows Active Directory kullanılarak güvenli hale getirilen bir uzak kümeye veya kümeye bağlanma örnekleri için bkz . Güvenli bir kümeye bağlanma.

Uygulama paketini karşıya yükleme

Uygulama paketini karşıya yüklemek, bunu iç Service Fabric bileşenleri tarafından erişilebilen bir konuma getirir. Uygulama paketini yerel olarak doğrulamak istiyorsanız Test-ServiceFabricApplicationPackage cmdlet'ini kullanın.

Copy-ServiceFabricApplicationPackage komutu, uygulama paketini küme görüntü deposuna yükler.

Visual Studio 2015'te MyApplication adlı bir uygulama oluşturup paketlediğiniz varsayılmaktadır. Varsayılan olarak, ApplicationManifest.xml listelenen uygulama türü adı "MyApplicationType" olur. Gerekli uygulama bildirimini, hizmet bildirimlerini ve kod/yapılandırma/veri paketlerini içeren uygulama paketi, C:\Users username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug konumunda bulunur.<

Aşağıdaki komut, uygulama paketinin içeriğini listeler:

$path = 'C:\Users\<user\>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug'
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
│   ApplicationManifest.xml
│
└───Stateless1Pkg
    │   ServiceManifest.xml
    │
    ├───Code
    │       Microsoft.ServiceFabric.Data.dll
    │       Microsoft.ServiceFabric.Data.Interfaces.dll
    │       Microsoft.ServiceFabric.Internal.dll
    │       Microsoft.ServiceFabric.Internal.Strings.dll
    │       Microsoft.ServiceFabric.Services.dll
    │       ServiceFabricServiceModel.dll
    │       Stateless1.exe
    │       Stateless1.exe.config
    │       Stateless1.pdb
    │       System.Fabric.dll
    │       System.Fabric.Strings.dll
    │
    └───Config
            Settings.xml

Uygulama paketi büyükse ve/veya çok fazla dosyası varsa, sıkıştırabilirsiniz. Sıkıştırma, dosya boyutunu ve sayısını azaltır. Bu, uygulama türünün daha hızlı kaydedilmesine ve kaydının kaydedilmesine neden olur. Özellikle paketi sıkıştırma süresini eklerseniz karşıya yükleme süresi şu anda daha yavaş olabilir.

Bir paketi sıkıştırmak için aynı Copy-ServiceFabricApplicationPackage komutunu kullanın. Sıkıştırma, karşıya yükleme işleminden SkipCopy ayrı olarak, bayrağı kullanılarak veya karşıya yükleme işlemiyle birlikte yapılabilir. Sıkıştırılmış bir pakete sıkıştırma uygulamak çalışma dışıdır. Sıkıştırılmış paketin sıkıştırmasını açmak için anahtarla UncompressPackage aynı Copy-ServiceFabricApplicationPackage komutunu kullanın.

Aşağıdaki cmdlet, paketi görüntü deposuna kopyalamadan sıkıştırır. Paket artık ve Config paketleri için Code sıkıştırılmış dosyaları içerir. Uygulama ve hizmet bildirimleri, birçok iç işlem (paket paylaşımı, uygulama türü adı ve belirli doğrulamalar için sürüm ayıklama gibi) için gerektiğinden sıkıştırmaz. Bildirimlerin zipping yapılması bu işlemleri verimsiz hale getirir.

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -CompressPackage -SkipCopy
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
|   ApplicationManifest.xml
|
└───Stateless1Pkg
       Code.zip
       Config.zip
       ServiceManifest.xml

Büyük uygulama paketleri için sıkıştırma işlemi zaman alır. En iyi sonuçlar için hızlı bir SSD sürücü kullanın. Sıkıştırma süreleri ve sıkıştırılmış paketin boyutu da paket içeriğine göre farklılık gösterir. Örneğin, sıkıştırma süresiyle birlikte ilk ve sıkıştırılmış paket boyutunu gösteren bazı paketler için sıkıştırma istatistikleri aşağıda verilmiştir.

İlk boyut (MB) Dosya sayısı Sıkıştırma Süresi Sıkıştırılmış paket boyutu (MB)
100 100 00:00:03.3547592 60
512 100 00:00:16.3850303 307
1024 500 00:00:32.5907950 615
2048 1000 00:01:04.3775554 1231
5012 100 00:02:45.2951288 3074

Bir paket sıkıştırıldıktan sonra gerektiğinde bir veya birden çok Service Fabric kümesine yüklenebilir. Dağıtım mekanizması sıkıştırılmış ve sıkıştırılmamış paketler için aynıdır. Sıkıştırılmış paketler küme görüntü deposunda bu şekilde depolanır. Paketler, uygulama çalıştırılmadan önce düğümde sıkıştırılmaz.

Aşağıdaki örnek, paketi görüntü deposuna "MyApplicationV1" adlı bir klasöre yükler:

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800

-ApplicationPackagePathInImageStore parametresini belirtmezseniz, uygulama paketi görüntü deposundaki "Debug" klasörüne kopyalanır.

Not

Copy-ServiceFabricApplicationPackage, PowerShell oturumu bir Service Fabric kümesine bağlıysa bağlantı dizesi uygun görüntü deposunu otomatik olarak algılar. 5.6'dan eski Service Fabric sürümleri için -ImageStoreConnectionString bağımsız değişkeni açıkça sağlanmalıdır.

PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800

Service Fabric SDK PowerShell modülünün bir parçası olan Get-ImageStoreConnectionStringFromClusterManifest cmdlet'i, görüntü deposunu bağlantı dizesi almak için kullanılır. SDK modülünü içeri aktarmak için şunu çalıştırın:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

Görüntü deposu ve görüntü deposu bağlantı dizesi hakkında ek bilgi için bkz. Görüntü deposu bağlantı dizesi anlama.

Bir paketi karşıya yüklemek için gereken süre, birden çok faktöre bağlı olarak değişir. Bu faktörlerden bazıları paketteki dosyaların sayısı, paket boyutu ve dosya boyutlarıdır. Kaynak makine ile Service Fabric kümesi arasındaki ağ hızı da karşıya yükleme süresini etkiler. Copy-ServiceFabricApplicationPackage için varsayılan zaman aşımı 30 dakikadır. Açıklanan faktörlere bağlı olarak zaman aşımını artırmanız gerekebilir. Kopyalama çağrısında paketi sıkıştırıyorsanız sıkıştırma süresini de göz önünde bulundurmanız gerekir.

Uygulama paketini kaydetme

Uygulama bildiriminde bildirilen uygulama türü ve sürümü, uygulama paketi kaydedildiğinde kullanılabilir hale gelir. Sistem önceki adımda karşıya yüklenen paketi okur, paketi doğrular, paket içeriğini işler ve işlenen paketi bir iç sistem konumuna kopyalar.

Uygulama türünü kümeye kaydetmek ve dağıtım için kullanılabilir hale getirmek için Register-ServiceFabricApplicationType cmdlet'ini çalıştırın:

Görüntü deposuna kopyalanan uygulama paketini kaydetme

Bir paket daha önce görüntü deposuna kopyalandığında, yazmaç işlemi görüntü deposundaki göreli yolu belirtir.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1", uygulama paketinin bulunduğu görüntü deposundaki klasördür. "MyApplicationType" adlı ve "1.0.0" sürümüne (her ikisi de uygulama bildiriminde bulunur) sahip uygulama türü artık kümeye kaydedilir.

Dış depoya kopyalanan uygulama paketini kaydetme

Service Fabric sürüm 6.1'den başlayarak sağlama, paketin bir dış mağazadan indirilmesini destekler. İndirme URI'si, uygulama paketinin sfpkg HTTP veya HTTPS protokolleri kullanılarak indirilebildiği uygulama paketinin yolunu temsil eder. Paket daha önce bu dış konuma yüklenmiş olmalıdır. Service Fabric'in dosyayı indirebilmesi için URI'nin OKUMA erişimine izin vermesi gerekir. Dosya " sfpkg .sfpkg" uzantısına sahip olmalıdır. Sağlama işlemi, uygulama bildiriminde bulunan uygulama türü bilgilerini içermelidir.

Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async

Register-ServiceFabricApplicationType komutu yalnızca sistem uygulama paketini başarıyla kaydettikten sonra döndürür. Kaydın ne kadar süreceği, uygulama paketinin boyutuna ve içeriğine bağlıdır. Gerekirse, -TimeoutSec parametresi daha uzun bir zaman aşımı sağlamak için kullanılabilir (varsayılan zaman aşımı 60 saniyedir).

Büyük bir uygulama paketiniz varsa veya zaman aşımlarıyla karşılaşıyorsanız -Async parametresini kullanın. Komut, küme yazmaç komutunu kabul ettiğinde döndürür. Yazmaç işlemi gerektiği gibi devam eder. Get-ServiceFabricApplicationType komutu, uygulama türü sürümlerini ve kayıt durumlarını listeler. Kaydın ne zaman yapıldığını belirlemek için bu komutu kullanabilirsiniz.

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Görüntü deposundan uygulama paketini kaldırma

Bir paket görüntü deposuna kopyalandıysa, uygulama başarıyla kaydedildikten sonra bu paketi geçici konumdan kaldırmanız gerekir. Görüntü deposundan uygulama paketlerinin silinmesi sistem kaynaklarını boşaltıyor. Kullanılmayan uygulama paketlerinin tutulması disk depolama alanı kullanır ve uygulama performansı sorunlarına yol açar.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Uygulamayı oluşturma

New-ServiceFabricApplication cmdlet'ini kullanarak başarıyla kaydedilmiş herhangi bir uygulama türü sürümünden bir uygulama örneği oluşturabilirsiniz. Her uygulamanın adı "fabric:" düzeniyle başlamalı ve her uygulama örneği için benzersiz olmalıdır. Hedef uygulama türünün uygulama bildiriminde tanımlanan tüm varsayılan hizmetler de oluşturulur.

New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters  : {}

Kayıtlı bir uygulama türünün belirli bir sürümü için birden çok uygulama örneği oluşturulabilir. Her uygulama örneği, kendi iş dizini ve işlemiyle yalıtılarak çalışır.

Kümede hangi adlandırılmış uygulamaların ve hizmetlerin çalıştığını görmek için Get-ServiceFabricApplication ve Get-ServiceFabricService cmdlet'lerini çalıştırın:

Get-ServiceFabricApplication  
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationStatus      : Ready
HealthState            : Ok
ApplicationParameters  : {}
Get-ServiceFabricApplication | Get-ServiceFabricService
ServiceName            : fabric:/MyApp/Stateless1
ServiceKind            : Stateless
ServiceTypeName        : Stateless1Type
IsServiceGroup         : False
ServiceManifestVersion : 1.0.0
ServiceStatus          : Active
HealthState            : Ok

Uygulamayı kaldırma

Bir uygulama örneğine artık gerek kalmadığında Remove-ServiceFabricApplication cmdlet'ini kullanarak adıyla kalıcı olarak kaldırabilirsiniz. Remove-ServiceFabricApplication , uygulamaya ait tüm hizmetleri de otomatik olarak kaldırır ve tüm hizmet durumunu kalıcı olarak kaldırır.

Uyarı

Bu işlem geri alınamaz ve uygulama durumu kurtarılamaz.

Remove-ServiceFabricApplication fabric:/MyApp
Confirm
Continue with this operation?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):
Remove application instance succeeded
Get-ServiceFabricApplication

Uygulama türünün kaydını kaldırma

Uygulama türünün belirli bir sürümüne artık gerek kalmadığında Unregister-ServiceFabricApplicationType cmdlet'ini kullanarak uygulama türünün kaydını kaldırmanız gerekir. Kullanılmayan uygulama türlerinin kaydının kaldırılması, uygulama türü dosyalarını kaldırarak görüntü deposu tarafından kullanılan depolama alanını serbest bırakır. Bir uygulama türünün kaydının kaldırılması, görüntü deposuna kopyalandıysa görüntü deposu geçici konumuna kopyalanan uygulama paketini kaldırmaz. Hiçbir uygulama örneği oluşturmadıkça ve bekleyen uygulama yükseltmeleri başvuruda bulunmadığı sürece bir uygulama türünün kaydı silinebilir.

Kümede kayıtlı olan uygulama türlerini görmek için Get-ServiceFabricApplicationType komutunu çalıştırın:

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Belirli bir uygulama türünün kaydını kaldırmak için Unregister-ServiceFabricApplicationType komutunu çalıştırın:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Sorun giderme

Copy-ServiceFabricApplicationPackage bir ImageStoreConnectionString istiyor

Service Fabric SDK ortamında zaten doğru varsayılanlar ayarlanmış olmalıdır. Ancak gerekirse, tüm komutlar için ImageStoreConnectionString, Service Fabric kümesinin kullandığı değerle eşleşmelidir. ImageStoreConnectionString'i Get-ServiceFabricClusterManifest ve Get-ImageStoreConnectionStringFromClusterManifest komutları kullanılarak alınan küme bildiriminde bulabilirsiniz:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

Service Fabric SDK PowerShell modülünün bir parçası olan Get-ImageStoreConnectionStringFromClusterManifest cmdlet'i, görüntü deposunu bağlantı dizesi almak için kullanılır. SDK modülünü içeri aktarmak için şunu çalıştırın:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

ImageStoreConnectionString, küme bildiriminde bulunur:

<ClusterManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="Server-Default-SingleNode" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">

    [...]

    <Section Name="Management">
      <Parameter Name="ImageStoreConnectionString" Value="file:D:\ServiceFabric\Data\ImageStore" />
    </Section>

    [...]

Görüntü deposu ve görüntü deposu bağlantı dizesi hakkında ek bilgi için bkz. Görüntü deposu bağlantı dizesi anlama.

Büyük uygulama paketini dağıtma

Sorun: Copy-ServiceFabricApplicationPackage büyük bir uygulama paketi için zaman aşımına uğradı (GB sırası). Şunu deneyin:

  • Copy-ServiceFabricApplicationPackage komutu için parametresiyle TimeoutSec daha büyük bir zaman aşımı belirtin. Varsayılan olarak, zaman aşımı 30 dakikadır.
  • Kaynak makinenizle küme arasındaki ağ bağlantısını denetleyin. Bağlantı yavaşsa, daha iyi bir ağ bağlantısına sahip bir makine kullanmayı göz önünde bulundurun. İstemci makine kümeden başka bir bölgedeyse, istemci makinesini kümeyle daha yakın veya aynı bölgede kullanmayı göz önünde bulundurun.
  • Dış azaltmaya ulaşılıp ulaşılmadığını denetleyin. Örneğin, görüntü deposu Azure Depolama'yı kullanacak şekilde yapılandırıldığında karşıya yükleme kısıtlanabilir.

Sorun: Paketi karşıya yükleme başarıyla tamamlandı, ancak Register-ServiceFabricApplicationType zaman aşımına uğradı. Denemek:

  • Görüntü deposuna kopyalamadan önce paketi sıkıştırın. Sıkıştırma, dosya boyutunu ve dosya sayısını azaltır ve bu da Service Fabric'in gerçekleştirmesi gereken trafik ve çalışma miktarını azaltır. Karşıya yükleme işlemi daha yavaş olabilir (özellikle sıkıştırma süresini dahil ederseniz), ancak uygulama türünü kaydetme ve kaydını kaldırma işlemi daha hızlıdır.
  • Parametresiyle TimeoutSec Register-ServiceFabricApplicationType için daha büyük bir zaman aşımı belirtin.
  • Register-ServiceFabricApplicationType anahtarını belirtinAsync. Komut, küme komutu kabul ettiğinde ve uygulama türünün kaydı zaman uyumsuz olarak devam ettiğinde döndürür. Bu nedenle, bu durumda daha yüksek bir zaman aşımı belirtmeniz gerekmez. Get-ServiceFabricApplicationType komutu, başarıyla kaydedilmiş tüm uygulama türü sürümlerini ve bunların kayıt durumunu listeler. Kaydın ne zaman yapıldığını belirlemek için bu komutu kullanabilirsiniz.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Uygulama paketini birçok dosyayla dağıtma

Sorun: Register-ServiceFabricApplicationType , birçok dosya içeren bir uygulama paketi için zaman aşımına uğradı (binlerce sıra). Şunu deneyin:

  • Görüntü deposuna kopyalamadan önce paketi sıkıştırın. Sıkıştırma, dosya sayısını azaltır.
  • Parametresiyle TimeoutSec Register-ServiceFabricApplicationType için daha büyük bir zaman aşımı belirtin.
  • Register-ServiceFabricApplicationType anahtarını belirtinAsync. Komut, küme komutu kabul ettiğinde ve uygulama türünün kaydı zaman uyumsuz olarak devam ettiğinde döndürür. Bu nedenle, bu durumda daha yüksek bir zaman aşımı belirtmeniz gerekmez. Get-ServiceFabricApplicationType komutu, başarıyla kaydedilmiş tüm uygulama türü sürümlerini ve bunların kayıt durumunu listeler. Kaydın ne zaman yapıldığını belirlemek için bu komutu kullanabilirsiniz.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Sonraki adımlar

Uygulamaları paketleme

Service Fabric uygulama yükseltmesi

Service Fabric sistem durumuna giriş

Service Fabric hizmetini tanılama ve sorunlarını giderme

Service Fabric'te uygulama modelleme