Implantar e remover aplicativos usando o PowerShell
Depois que um tipo de aplicativo for empacotado, ele estará pronto para implantação em um cluster do Azure Service Fabric. A implantação envolve as três etapas a seguir:
- Carregue o pacote do aplicativo para o armazenamento de imagens.
- Registre o tipo de aplicativo com o caminho relativo do armazenamento de imagens.
- Crie a instância do aplicativo.
Quando o aplicativo implantado não for mais necessário, você poderá excluir a instância do aplicativo e seu tipo de aplicativo. Para remover completamente um aplicativo do cluster envolve as seguintes etapas:
- Remova (ou exclua) a instância do aplicativo em execução.
- Cancele o registro do tipo de aplicativo se não precisar mais dele.
- Remova o pacote do aplicativo do armazenamento de imagens.
Se você usar o Visual Studio para implantar e depurar aplicativos em seu cluster de desenvolvimento local, todas as etapas anteriores serão tratadas automaticamente por meio de um script do PowerShell. Esse script é encontrado na pasta Scripts do projeto de aplicativo. Este artigo fornece informações básicas sobre o que esse script está fazendo para que você possa executar as mesmas operações fora do Visual Studio.
Outra maneira de implantar um aplicativo é usando o provisionamento externo. O pacote do aplicativo pode ser empacotado como sfpkg
e carregado em uma loja externa. Neste caso, o upload para a loja de imagens não é necessário. A implantação precisa das seguintes etapas:
- Carregue o
sfpkg
para uma loja externa. O armazenamento externo pode ser qualquer armazenamento que exponha um ponto de extremidade REST http ou https. - Registre o tipo de aplicativo usando o URI de download externo e as informações de tipo de aplicativo.
- Crie a instância do aplicativo.
Para limpeza, remova as instâncias do aplicativo e cancele o registro do tipo de aplicativo. Como o pacote não foi copiado para o armazenamento de imagens, não há nenhum local temporário para limpeza. O provisionamento do repositório externo está disponível a partir do Service Fabric versão 6.1.
Nota
Visual Studio atualmente não oferece suporte a provisionamento externo.
Ligar ao cluster
Antes de executar qualquer comando do PowerShell neste artigo, sempre comece usando Connect-ServiceFabricCluster para se conectar ao cluster do Service Fabric. Para se conectar ao cluster de desenvolvimento local, execute o seguinte:
Connect-ServiceFabricCluster
Para obter exemplos de conexão a um cluster remoto ou cluster protegido usando Microsoft Entra ID, certificados X509 ou Windows Ative Directory, consulte Conectar-se a um cluster seguro.
Carregue o pacote de candidatura
O carregamento do pacote de aplicativos o coloca em um local acessível por componentes internos do Service Fabric. Se quiser verificar o pacote do aplicativo localmente, use o cmdlet Test-ServiceFabricApplicationPackage .
O comando Copy-ServiceFabricApplicationPackage carrega o pacote do aplicativo no armazenamento de imagens do cluster.
Suponha que você crie e empacote um aplicativo chamado MyApplication no Visual Studio 2015. Por padrão, o nome do tipo de aplicativo listado no ApplicationManifest.xml é "MyApplicationType". O pacote do aplicativo, que contém o manifesto do aplicativo necessário, manifestos de serviço e pacotes de código/config/dados, está localizado em C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.
O comando a seguir lista o conteúdo do pacote do aplicativo:
$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
Se o pacote do aplicativo for grande e/ou tiver muitos arquivos, você poderá compactá-lo. A compactação reduz o tamanho e o número de arquivos. Isso resulta em um registro mais rápido e cancelamento do registro do tipo de aplicativo. O tempo de upload pode ser mais lento atualmente, especialmente se você incluir o tempo para compactar o pacote.
Para compactar um pacote, use o mesmo comando Copy-ServiceFabricApplicationPackage . A compressão pode ser feita separadamente do upload, usando o SkipCopy
sinalizador ou juntamente com a operação de upload. A aplicação de compactação em um pacote compactado é no-op.
Para descompactar um pacote compactado, use o mesmo comando Copy-ServiceFabricApplicationPackage com o UncompressPackage
switch.
O cmdlet a seguir compacta o pacote sem copiá-lo para o armazenamento de imagens. O pacote agora inclui arquivos compactados para os Code
e Config
pacotes.
Os manifestos do aplicativo e do serviço não são compactados, porque são necessários para muitas operações internas (como compartilhamento de pacotes, nome do tipo de aplicativo e extração de versão para determinadas validações). Compactar os manifestos tornaria essas operações ineficientes.
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
Para pacotes de aplicativos grandes, a compactação leva tempo. Para obter melhores resultados, utilize uma unidade SSD rápida. Os tempos de compressão e o tamanho do pacote compactado também diferem com base no conteúdo do pacote. Por exemplo, aqui estão as estatísticas de compressão para alguns pacotes, que mostram o tamanho inicial e o tamanho do pacote compactado, com o tempo de compactação.
Tamanho inicial (MB) | Contagem de ficheiros | Tempo de compressão | Tamanho da embalagem compactada (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 |
Depois que um pacote é compactado, ele pode ser carregado em um ou vários clusters do Service Fabric, conforme necessário. O mecanismo de implantação é o mesmo para pacotes compactados e não compactados. Os pacotes compactados são armazenados como tal no armazenamento de imagens do cluster. Os pacotes são descompactados no nó, antes que o aplicativo seja executado.
O exemplo a seguir carrega o pacote para o armazenamento de imagens, em uma pasta chamada "MyApplicationV1":
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800
Se você não especificar o parâmetro -ApplicationPackagePathInImageStore , o pacote do aplicativo será copiado para a pasta "Debug" no armazenamento de imagens.
Nota
O Copy-ServiceFabricApplicationPackage detetará automaticamente a cadeia de conexão de armazenamento de imagens apropriada se a sessão do PowerShell estiver conectada a um cluster do Service Fabric. Para versões do Service Fabric anteriores à 5.6, o argumento -ImageStoreConnectionString deve ser fornecido explicitamente.
PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800
O cmdlet Get-ImageStoreConnectionStringFromClusterManifest , que faz parte do módulo PowerShell do SDK do Service Fabric, é usado para obter a cadeia de conexão do armazenamento de imagens. Para importar o módulo SDK, execute:
Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"
Consulte Compreender a cadeia de conexão do armazenamento de imagens para obter informações complementares sobre o armazenamento de imagens e a cadeia de conexão do armazenamento de imagens.
O tempo necessário para carregar um pacote difere dependendo de vários fatores. Alguns desses fatores são o número de arquivos no pacote, o tamanho do pacote e os tamanhos dos arquivos. A velocidade da rede entre a máquina de origem e o cluster do Service Fabric também afeta o tempo de carregamento. O tempo limite padrão para Copy-ServiceFabricApplicationPackage é de 30 minutos. Dependendo dos fatores descritos, você pode ter que aumentar o tempo limite. Se você estiver compactando o pacote na chamada de cópia, você também precisa considerar o tempo de compactação.
Registar o pacote de candidaturas
O tipo e a versão do aplicativo declarados no manifesto do aplicativo ficam disponíveis para uso quando o pacote do aplicativo é registrado. O sistema lê o pacote carregado na etapa anterior, verifica o pacote, processa o conteúdo do pacote e copia o pacote processado para um local interno do sistema.
Execute o cmdlet Register-ServiceFabricApplicationType para registrar o tipo de aplicativo no cluster e disponibilizá-lo para implantação:
Registrar o pacote do aplicativo copiado para o armazenamento de imagens
Quando um pacote foi copiado anteriormente para o armazenamento de imagens, a operação de registro especifica o caminho relativo no armazenamento de imagens.
Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded
"MyApplicationV1" é a pasta no armazenamento de imagens onde o pacote do aplicativo está localizado. O tipo de aplicativo com nome "MyApplicationType" e versão "1.0.0" (ambos são encontrados no manifesto do aplicativo) agora está registrado no cluster.
Registrar o pacote do aplicativo copiado para um armazenamento externo
A partir da versão 6.1 do Service Fabric, a provisão oferece suporte ao download do pacote de um repositório externo. O URI de download representa o caminho para o sfpkg
pacote do aplicativo de onde o pacote do aplicativo pode ser baixado usando protocolos HTTP ou HTTPS. O pacote deve ter sido carregado anteriormente para este local externo. O URI deve permitir o acesso READ para que o Service Fabric possa baixar o arquivo. O sfpkg
arquivo deve ter a extensão ".sfpkg". A operação de fornecimento deve incluir as informações sobre o tipo de aplicação, tal como constam do manifesto da aplicação.
Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async
O comando Register-ServiceFabricApplicationType retorna somente depois que o sistema registrou com êxito o pacote do aplicativo. O tempo de registo depende da dimensão e do conteúdo do pacote de candidaturas. Se necessário, o parâmetro -TimeoutSec pode ser usado para fornecer um tempo limite maior (o tempo limite padrão é de 60 segundos).
Se você tiver um pacote de aplicativo grande ou se estiver enfrentando tempos limites, use o parâmetro -Async . O comando retorna quando o cluster aceita o comando register. A operação de registo continua conforme necessário. O comando Get-ServiceFabricApplicationType lista as versões de tipo de aplicativo e seu status de registro. Você pode usar esse comando para determinar quando o registro é concluído.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Remover um pacote de aplicativo do armazenamento de imagens
Se um pacote foi copiado para o armazenamento de imagens, você deve removê-lo do local temporário depois que o aplicativo for registrado com êxito. A exclusão de pacotes de aplicativos do armazenamento de imagens libera recursos do sistema. Manter pacotes de aplicativos não utilizados consome armazenamento em disco e leva a problemas de desempenho do aplicativo.
Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1
Criar a aplicação
Você pode instanciar um aplicativo de qualquer versão de tipo de aplicativo que tenha sido registrada com êxito usando o cmdlet New-ServiceFabricApplication . O nome de cada aplicativo deve começar com o esquema "fabric:" e deve ser exclusivo para cada instância do aplicativo. Todos os serviços padrão definidos no manifesto do aplicativo do tipo de aplicativo de destino também são criados.
New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName : fabric:/MyApp
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters : {}
Várias instâncias de aplicativo podem ser criadas para qualquer versão de um tipo de aplicativo registrado. Cada instância de aplicativo é executada isoladamente, com seu próprio diretório de trabalho e processo.
Para ver quais aplicativos e serviços nomeados estão em execução no cluster, execute os cmdlets Get-ServiceFabricApplication e Get-ServiceFabricService :
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
Remover uma aplicação
Quando uma instância de aplicativo não é mais necessária, você pode removê-la permanentemente pelo nome usando o cmdlet Remove-ServiceFabricApplication . Remove-ServiceFabricApplication remove automaticamente todos os serviços que pertencem ao aplicativo também, removendo permanentemente todo o estado do serviço.
Aviso
Essa operação não pode ser revertida e o estado do aplicativo não pode ser recuperado.
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
Cancelar o registro de um tipo de aplicativo
Quando uma versão específica de um tipo de aplicativo não for mais necessária, você deverá cancelar o registro do tipo de aplicativo usando o cmdlet Unregister-ServiceFabricApplicationType . Cancelar o registro de tipos de aplicativos não utilizados libera espaço de armazenamento usado pelo armazenamento de imagens removendo os arquivos de tipo de aplicativo. Cancelar o registro de um tipo de aplicativo não remove o pacote de aplicativo copiado para o local temporário do armazenamento de imagens, se a cópia para o armazenamento de imagens tiver sido usada. Um tipo de aplicativo pode ser cancelado, desde que nenhum aplicativo seja instanciado contra ele e nenhuma atualização pendente do aplicativo esteja fazendo referência a ele.
Execute Get-ServiceFabricApplicationType para ver os tipos de aplicativo atualmente registrados no cluster:
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Execute Unregister-ServiceFabricApplicationType para cancelar o registro de um tipo de aplicativo específico:
Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0
Resolução de Problemas
Copy-ServiceFabricApplicationPackage solicita um ImageStoreConnectionString
O ambiente do SDK do Service Fabric já deve ter os padrões corretos configurados. Mas, se necessário, o ImageStoreConnectionString para todos os comandos deve corresponder ao valor que o cluster do Service Fabric está usando. Você pode encontrar o ImageStoreConnectionString no manifesto do cluster, recuperado usando os comandos Get-ServiceFabricClusterManifest e Get-ImageStoreConnectionStringFromClusterManifest:
Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)
O cmdlet Get-ImageStoreConnectionStringFromClusterManifest , que faz parte do módulo PowerShell do SDK do Service Fabric, é usado para obter a cadeia de conexão do armazenamento de imagens. Para importar o módulo SDK, execute:
Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"
O ImageStoreConnectionString é encontrado no manifesto do cluster:
<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>
[...]
Consulte Compreender a cadeia de conexão do armazenamento de imagens para obter informações complementares sobre o armazenamento de imagens e a cadeia de conexão do armazenamento de imagens.
Implantar pacote de aplicativos grande
Problema: o tempo limite do Copy-ServiceFabricApplicationPackage para um pacote de aplicativo grande (ordem de GB). Experimente:
- Especifique um tempo limite maior para o comando Copy-ServiceFabricApplicationPackage , com
TimeoutSec
parâmetro. Por padrão, o tempo limite é de 30 minutos. - Verifique a conexão de rede entre a máquina de origem e o cluster. Se a conexão for lenta, considere usar uma máquina com uma conexão de rede melhor. Se a máquina cliente estiver em outra região que não o cluster, considere usar uma máquina cliente em uma região mais próxima ou igual à do cluster.
- Verifique se você está atingindo a limitação externa. Por exemplo, quando o armazenamento de imagens está configurado para usar o armazenamento azure, o carregamento pode ser limitado.
Problema: o pacote de carregamento foi concluído com êxito, mas o tempo limite de Register-ServiceFabricApplicationType expira. Experimente:
- Comprima o pacote antes de copiar para o armazenamento de imagens. A compactação reduz o tamanho e o número de arquivos, o que, por sua vez, reduz a quantidade de tráfego e trabalho que o Service Fabric deve executar. A operação de upload pode ser mais lenta (especialmente se você incluir o tempo de compactação), mas registrar e cancelar o registro do tipo de aplicativo são mais rápidos.
- Especifique um tempo limite maior para Register-ServiceFabricApplicationType com
TimeoutSec
parâmetro. - Especifique
Async
a opção para Register-ServiceFabricApplicationType. O comando retorna quando o cluster aceita o comando e o registro do tipo de aplicativo continua de forma assíncrona. Por esse motivo, não há necessidade de especificar um tempo limite maior neste caso. O comando Get-ServiceFabricApplicationType lista todas as versões de tipo de aplicativo registradas com êxito e seu status de registro. Você pode usar esse comando para determinar quando o registro é concluído.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Implante o pacote de aplicativos com muitos arquivos
Problema: o tempo limite de Register-ServiceFabricApplicationType para um pacote de aplicativo com muitos arquivos (ordem de milhares). Experimente:
- Comprima o pacote antes de copiar para o armazenamento de imagens. A compressão reduz o número de ficheiros.
- Especifique um tempo limite maior para Register-ServiceFabricApplicationType com
TimeoutSec
parâmetro. - Especifique
Async
a opção para Register-ServiceFabricApplicationType. O comando retorna quando o cluster aceita o comando e o registro do tipo de aplicativo continua de forma assíncrona. Por esse motivo, não há necessidade de especificar um tempo limite maior neste caso. O comando Get-ServiceFabricApplicationType lista todas as versões de tipo de aplicativo registradas com êxito e seu status de registro. Você pode usar esse comando para determinar quando o registro é concluído.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Próximos passos
Atualização do aplicativo Service Fabric
Introdução à integridade do Service Fabric
Diagnosticar e solucionar problemas de um serviço do Service Fabric