Condividi tramite


Aggiornare il sistema operativo Linux per Azure Service Fabric

Questo documento descrive come eseguire la migrazione del cluster Azure Service Fabric per Linux da Ubuntu versione 18.04 LTS a 20.04 LTS. Ogni versione del sistema operativo richiede un pacchetto di runtime di Service Fabric diverso. Questo articolo descrive i passaggi necessari per semplificare la migrazione alla versione più recente.

Annotazioni

U18.04 ha raggiunto la fine del ciclo di vita nel giugno 2023. A partire dalla versione 10.0CU1, il runtime di Service Fabric interromperà il supporto per U18.04. Service Fabric non fornirà più aggiornamenti o patch in quel momento.

Approccio alla migrazione

L'approccio generale alla migrazione segue questa procedura:

  1. Impostare la risorsa vmImage di Azure Resource Manager del cluster di Service Fabric su Ubuntu20_04. Questa impostazione scarica gli aggiornamenti futuri del codice per questa versione del sistema operativo. Questo disallineamento temporaneo del sistema operativo rispetto ai tipi di nodo esistenti blocca il rilascio automatico degli aggiornamenti del codice per garantire una transizione sicura.

    Suggerimento

    Evitare di eseguire aggiornamenti manuali del codice del cluster di Service Fabric durante la migrazione del sistema operativo. In questo modo, i nodi del tipo di nodo precedente possono entrare in uno stato che richiede l'intervento umano.

  2. Per ogni tipo di nodo nel cluster, creare un altro tipo di nodo destinato all'immagine del sistema operativo Ubuntu 20.04 per il set di scalabilità di macchine virtuali sottostante. Ogni nuovo tipo di nodo assume il ruolo della controparte precedente.

    • È necessario creare un nuovo tipo di nodo primario per sostituire il tipo di nodo precedente contrassegnato come isPrimary: true.
    • Per ogni tipo di nodo non primario, questi tipi di nodi sono contrassegnati come isPrimary: false.
    • Assicurarsi che dopo la creazione del nuovo tipo di nodo del sistema operativo di destinazione i carichi di lavoro esistenti continuino a funzionare correttamente. Se vengono rilevati problemi, risolvere le modifiche necessarie nei pacchetti di computer preinstallati o dell'app prima di procedere con la rimozione del tipo di nodo precedente.
  3. Contrassegna il tipo di nodo primario isPrimary: false precedente. Questa impostazione determina un set di aggiornamenti a esecuzione prolungata per eseguire la transizione di tutti i nodi principali.

  4. (Solo per i tipi di nodo di durabilità Bronze): connettersi al cluster usando sfctl, PowerShell o FabricClient. Disabilitare tutti i nodi nel tipo di nodo precedente.

  5. Rimuovere i tipi di nodo precedenti.

Az PowerShell genera un nuovo nome DNS per il tipo di nodo aggiunto. Reindirizzare il traffico esterno a questo endpoint.

Procedura d'uso semplice per i cluster non di produzione

Questa procedura illustra come creare rapidamente un prototipo della migrazione del tipo di nodo usando i cmdlet az di PowerShell in un cluster solo TEST. Per i cluster di produzione destinati al traffico aziendale reale, si prevede che gli stessi passaggi vengano eseguiti eseguendo gli aggiornamenti di Resource Manager, per preservare la ripetibilità e una fonte dichiarativa coerente di verità.

  1. Aggiornare l'impostazione vmImage nella risorsa cluster di Service Fabric usando Update-AzServiceFabricVmImage:

    # Replace subscriptionId, resourceGroup, clusterName with ones corresponding to your cluster.
    $subscriptionId="aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
    Login-AzAccount; Select-AzSubscription -SubscriptionId $subscriptionId
    
    $resourceGroup="Group1"
    $clusterName="Contoso01SFCluster"
    # Update cluster vmImage to target OS. This registers the SF runtime package type that is supplied for upgrades.
    Update-AzServiceFabricVmImage -ResourceGroupName $resourceGroup -ClusterName $clusterName -VmImage Ubuntu20_04
    
  2. Aggiungere una nuova controparte del tipo di nodo per ognuno dei tipi di nodo esistenti:

    $nodeTypeName="nt1u18"
    # You can customize this to fetch a password from a secure store.
    $securePassword = ConvertTo-SecureString -String 'Yourpassword123!@#' -AsPlainText -Force
    
    # Ensure last upgrade is done - Ready means the next command can be issued.
    (Get-AzServiceFabricCluster -ResourceGroupName $resourceGroup).ClusterState
    
    # Add new primary node type. Omit the IsPrimaryNodeType parameter for non-primary node types.
    Add-AzServiceFabricNodeType -ResourceGroupName $resourceGroup  -ClusterName $clusterName -NodeType $nodeTypeName -Capacity 5 -VmUserName testuser -VmPassword $securePassword -DurabilityLevel Silver -Verbose -VMImageSku 18.04-LTS -IsPrimaryNodeType $true
    
    # Redirect traffic to new node type dns
    # dns-Contoso01SFCluster-nt1u18.westus2.cloudapp.azure.com
    
  3. Aggiornare il tipo di nodo primario precedente a quello non primario per eseguire il rollover dei nodi di inizializzazione e dei servizi di sistema al nuovo tipo di nodo:

    # Query to ensure background upgrades are done.
    (Get-AzServiceFabricCluster -ResourceGroupName $resourceGroup).ClusterState
    
    # Update old nodetype to isPrimary: false
    $oldNodeTypeName="nt1"
    Update-AzServiceFabricNodeType -ResourceGroupName $resourceGroup -ClusterName $clusterName -IsPrimaryNodeType $false -NodeType $oldNodeTypeName -Verbose
    
    # Ensure node type is showing isPrimary: False before proceeding.
    Get-AzServiceFabricCluster -ResourceGroupName $resourceGroup
    

    L'output sarà simile all'esempio seguente:

    NodeTypes :
              NodeTypeDescription :
                  Name : nt1
                  PlacementProperties :
                  Capacities :
                  ClientConnectionEndpointPort : 19000
                  HttpGatewayEndpointPort : 19080
                  DurabilityLevel : Bronze
                  ApplicationPorts :
                      StartPort : 20000
                      EndPort : 30000
                  EphemeralPorts :
                      StartPort : 49152
                      EndPort : 65534
                  IsPrimary : False
                  VmInstanceCount : 5
                  ReverseProxyEndpointPort :
              NodeTypeDescription :
                  Name : nt1u18
                  PlacementProperties :
                  Capacities :
                  ClientConnectionEndpointPort : 19000
                  HttpGatewayEndpointPort : 19080
                  DurabilityLevel : Silver
                  ApplicationPorts :
                      StartPort : 20000
                      EndPort : 30000
                  EphemeralPorts :
                      StartPort : 49152
                      EndPort : 65534
                  IsPrimary : True
                  VmInstanceCount : 5
                  ReverseProxyEndpointPort :
    
  4. Per rimuovere i tipi di nodo di durabilità Bronze, disabilitare i nodi prima di procedere alla rimozione del tipo di nodo precedente. Connettersi a un nodo del cluster usando ssh. Eseguire i comandi seguenti:

    # as root user:
    
    # install jq tool to automatically parse JSON responses
    apt-get install jq -fy
    
    # retrieve the thumbprint to be used for establishing a fabric client
    dataroot=$(cat /etc/servicefabric/FabricDataRoot)
    nodename=_nt1_0
    cat $dataroot/$nodename/Fabric/ClusterManifest.current.xml | grep ClientCertThumbprints
    # 0777FE1A43E306F332D96DA339EF6834D0E4A453
    
    # verify node count
    sfctl cluster select --endpoint https://Contoso01SFCluster.westus2.cloudapp.azure.com:19080 --pem /var/lib/waagent/0777FE1A43E306F332D96DA339EF6834D0E4A453.pem --no-verify
    
    # sample command to list all nodes
    sfctl node list
    
    # for each node part of the node type to be removed, disable the node:
    nodeTypeBeingDisabled=nt1
    nodes=$(sfctl node list | jq --arg nodeTypeBeingDisabled "$nodeTypeBeingDisabled" '.items[] | select(.type==$nodeTypeBeingDisabled) | .name' | sed s/\"//g)
    echo $nodes
    for n in $nodes; do echo "Disabling $n"; sfctl node disable --node-name $n --deactivation-intent RemoveNode --timeout 300; done
    
  5. Rimuovere il tipo di nodo precedente eliminando l'attributo del tipo di nodo della risorsa cluster di Service Fabric e disattivando il set di scalabilità delle macchine virtuali e le risorse di rete associate.

    $resourceGroup="Group1"
    $clusterName="Contoso01SFCluster"
    $oldNodeTypeName="nt1"
    
    # Remove the Service Fabric node type, associated virtual machine scale set resource, and any trailing networking resources that are no longer used. 
    Remove-AzServiceFabricNodeType -ResourceGroupName $resourceGroup -ClusterName $clusterName -NodeType $oldNodeTypeName
    

    Annotazioni

    In alcuni casi questo comando potrebbe riscontrare l'errore seguente:

    Remove-AzServiceFabricNodeType : Code: ClusterUpgradeFailed, Message: Long running operation failed with status 'Failed'
    

    È possibile trovare usando Service Fabric Explorer (SFX) InfrastructureService che il tipo di nodo rimosso si trova in uno stato di errore. Ripetere la rimozione.

Verificare che i carichi di lavoro siano stati migrati correttamente ai nuovi tipi di nodo e che i tipi di nodo precedenti siano stati eliminati. Il cluster può quindi procedere con gli aggiornamenti della versione del codice di runtime e della configurazione di Service Fabric.

Passaggi successivi