Delen via


Overzicht van VM-toepassingen

VM-toepassingen zijn een resourcetype in azure Compute Gallery dat een moderne, flexibele benadering biedt voor het beheren en implementeren van toepassingen op uw virtuele machines en schaalsets. Door de installatie van toepassingen los te koppelen van uw basis-VM-installatiekopieën, kunt u updates stroomlijnen, overhead voor installatiekopieën verminderen en implementatiecycli versnellen. Deze aanpak elimineert de noodzaak om VM-installatiekopieën opnieuw te bouwen en opnieuw te publiceren voor elke toepassingswijziging, waardoor snellere iteratie en meer operationele flexibiliteit mogelijk is. VM-toepassingen zijn het meest geschikt voor het implementeren van AI, hoge schaal, lage latentie, microservices, veilige en compatibele workloads op Virtuele Azure-machines.

Bron Beschrijving
Azure Compute-galerie Een galerie is een opslagplaats voor het beheren en delen van toepassingspakketten. Gebruikers kunnen de galerieresource delen en alle onderliggende resources worden automatisch gedeeld. De naam van de galerie moet uniek zijn per abonnement. U hebt bijvoorbeeld één galerie om al uw installatiekopieën van het besturingssysteem en een andere galerie op te slaan om al uw VM-toepassingen op te slaan.
VM-toepassing De definitie van uw VM-toepassing. Het is een logische resource waarin de algemene metagegevens voor alle onderliggende versies worden opgeslagen. U kunt bijvoorbeeld een toepassingsdefinitie voor Apache Tomcat hebben en er meerdere versies in hebben.
Vm-toepassingsversie De implementeerbare resource, die uw toepassingspakket en versiespecifieke configuraties bevat. U kunt uw VM-toepassingsversies globaal repliceren naar doelregio's dichter bij uw VM-infrastructuur. De versie van de VM-toepassing moet worden gerepliceerd naar een regio voordat deze kan worden geïmplementeerd op een VIRTUELE machine in die regio.
Opslagaccount Toepassingspakketten worden eerst geüpload naar uw opslagaccount. Azure Compute Gallery downloadt vervolgens het toepassingspakket uit dit opslagaccount met behulp van SAS-URL's en slaat het op in de versie van de VM-toepassing. Azure Compute Gallery repliceert dit pakket ook in regio's en regionale replica's volgens de definitie van de versie van de VM-toepassing. Het toepassingspakket in het opslagaccount kan worden verwijderd nadat de vm-toepassingsversie is gemaakt in de Azure Compute Gallery.

Diagram met stappen voor het maken van een VM-toepassing en het implementeren ervan in Azure

Belangrijkste voordelen:

  • Gecentraliseerd en flexibel toepassingsbeheer:
    • Alles eenmaal verpakken, Overal implementeren: Pakkettoepassingen (windows/linux), scripts of bestanden als VM-toepassingen. Implementeer deze vervolgens op azure-VM's of virtuele-machineschaalsets en beheer ze centraal in de Azure Compute-galerie. Toepassingen of bestanden kunnen zich in .zip, .msi, .exe, .tar.gz, .deb, .rpm, .sh of een andere indeling bevinden.
    • Versiebeheer: implementeer de nieuwste of een specifieke versie door meerdere versies van elke toepassing te onderhouden.
  • Naadloos delen en toegangsbeheer
    • Tenant-Wide Delen: Toepassingen delen binnen teams of binnen uw hele organisatie (tenant).
    • Geïntegreerde RBAC: publicatie- en implementatietoegang beheren met behulp van Azure Role-Based RBAC (Access Control).
  • Betrouwbare en aanpasbare implementaties
    • Afzonderlijke toepassingsbeheer: toepassingen onafhankelijk installeren, bijwerken of verwijderen. U hoeft geen VM-installatiekopieën opnieuw te bouwen.
    • Aanpasbare bewerkingen: installatie-, update- en verwijderbewerkingen aanpassen voor toepassingen, waaronder het afhandelen van opnieuw opstarten.
    • Built-In foutafhandeling: zorg voor tolerante implementaties door vm-toepassingsfouten te verbinden met VM-fouten.
  • Schaalbaarheid en Low-Latency Distributie
    • Wereldwijde en Intra-Region-replicatie: repliceer automatisch toepassingen in en binnen regio's om latentie te verminderen en tolerantie te verbeteren. U hoeft AzCopy of handmatige overdrachten niet te doen.
    • Geoptimaliseerd voor High-Scale scenario's: bereik lage creatielatentie, zelfs tijdens grootschalige uitrollen.
  • Veilig en compatibel volgens ontwerp
    • Beleidsgestuurde afdwinging: Gebruik Azure Policy om aanwezigheid en configuratie van toepassingen in uw vloot af te dwingen.
    • Veilige implementaties: vermijd downloads op internet en complexe private link-instellingen, die niet ideaal zijn voor vergrendelde of beveiligde omgevingen.
  • Brede platformondersteuning
    • VM's en schaalsets: Implementeren op afzonderlijke VM's, flexibele schaalsets of uniforme schaalsets met volledige ondersteuning.
    • Blok-blobondersteuning: efficiënt grote toepassingspakketten verwerken (maximaal 2 GB) met behulp van Azure Block Blobs voor gesegmenteerde uploads en achtergrondstreaming.

Versieresource voor VM-toepassingen en VM-toepassingen maken

De VM-toepassing wordt opgeslagen in de Azure Compute Gallery. De VM-toepassingsresource definieert het volgende over uw VM-toepassing:

Vastgoed Beschrijving Beperkingen
naam Naam van de toepassing Maximale lengte van 117 tekens. Toegestane tekens zijn hoofdletters of kleine letters, cijfers, afbreekstreepjes(-), punt (.), onderstrepingsteken (_). Namen mogen niet eindigen met punt(.).
supportedOSType Het ondersteunde type besturingssysteem definiëren "Linux" of "Windows"
endOfLifeDate Een toekomstige einddatum van de levensduur voor de toepassing. De datum is alleen ter referentie en wordt niet afgedwongen.
beschrijving Optional. Een beschrijving van de VM-toepassing
Overeenkomst Optional. Verwijzing naar gebruiksrechtovereenkomst (EULA)
privacyStatementUri Optional. Verwijzing naar de privacyverklaring voor de toepassing.
releaseNoteUri Optional. Verwijzing naar releaseopmerkingen voor de toepassing.

VM-toepassingsversies zijn de implementeerbare resources binnen de VM-toepassingsresource. Versies worden gedefinieerd met de volgende eigenschappen:

Vastgoed Beschrijving Beperkingen
location Bronlocatie voor de versie van de VM-toepassing. Geldige Azure-regio
source/mediaLink Koppelen aan het toepassingspakketbestand in een opslagaccount Geldige en bestaande opslag-URL
source/defaultConfigurationLink Optional. Een koppeling naar het configuratiebestand voor de VM-toepassing. Deze kan tijdens de implementatie worden overschreven. Geldige en bestaande opslag-URL
manageActions/install Script installeren als tekenreeks om de toepassing correct te installeren Geldige opdracht voor het opgegeven besturingssysteem in tekenreeksindeling.
manageActions/remove Script als tekenreeks verwijderen om de toepassing correct te verwijderen Geldige opdracht voor het opgegeven besturingssysteem in tekenreeksindeling
manageActions/update Optional. Werk script als tekenreeks bij om de VM-toepassing correct bij te werken naar een nieuwere versie. Geldige opdracht voor het opgegeven besturingssysteem in tekenreeksindeling
targetRegions/name Naam van doelregio's waarnaar moet worden gerepliceerd. Verbetert de tolerantie voor regiofouten en het maken van latentie. Geldige Azure-regio
targetRegions/regionalReplicaCount Optional. Het aantal replica's dat moet worden gemaakt in de regio. Verbetert de belastingafhandeling en creëer latentie. De standaardwaarde is 1. Geheel getal tussen 1 en 3 inclusief
replicaCount Optional. Hiermee definieert u het aantal replica's in elke regio. Wordt van kracht als regionalReplicaCount niet is gedefinieerd. Verbetert de tolerantie voor regio- of clusterfouten en maakt latentie tijdens hoge schaal. Geheel getal tussen 1 en 3 inclusief.
endOfLifeDate Optional. Een toekomstige einddatum voor de toepassingsversie. Deze eigenschap is alleen bedoeld voor klantreferenties en wordt niet afgedwongen. Geldige datum in de toekomst
excludeFromLatest Sluit de versie uit die wordt gebruikt als de nieuwste versie van de toepassing wanneer het trefwoord 'meest recent' wordt gebruikt in applicationProfile.
storageAccountType Optional. Type opslagaccount dat in elke regio moet worden gebruikt voor het opslaan van een toepassingspakket. Standaard ingesteld op Standard_LRS. Deze eigenschap kan niet worden bijgewerkt.
safetyProfile/allowDeletionOfReplicatedLocations Optional. Hiermee wordt aangegeven of het verwijderen van deze installatiekopieënversie van de galerie uit gerepliceerde regio's is toegestaan.
settings/packageFileName Pakketbestandsnaam die moet worden gebruikt wanneer het pakket naar de VIRTUELE machine wordt gedownload. Dit is beperkt tot 4096 tekens.
settings/configFileName De naam van het configuratiebestand dat moet worden gebruikt wanneer de configuratie naar de VIRTUELE machine wordt gedownload. Dit is beperkt tot 4096 tekens.
settings/scriptBehaviorAfterReboot Optional. De actie die moet worden uitgevoerd voor het installeren, bijwerken of verwijderen van galerietoepassingen nadat de VIRTUELE machine opnieuw is opgestart.

{
  "$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "galleryName": {
      "type": "string"
    },
    "applicationName": {
      "type": "string"
    },
    "versionName": {
      "type": "string",
      "metadata": {
        "description": "Must follow the format: major.minor.patch (Example: 1.0.0)"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "West US"
    },
    "supportedOSType": {
      "type": "string",
      "allowedValues": ["Windows", "Linux"]
    },
    "endOfLifeDate": {
      "type": "string",
      "metadata": {
        "description": "Optional. This property is for information only and doesn't block app deployment."
      }
    },
    "description": {
      "type": "string",
      "defaultValue": "Description of the application"
    },
    "eula": {
      "type": "string",
      "defaultValue": ""
    },
    "privacyStatementUri": {
      "type": "string",
      "defaultValue": ""
    },
    "releaseNoteUri": {
      "type": "string",
      "defaultValue": ""
    },
    "mediaLink": {
      "type": "string"
    },
    "configLink": {
      "type": "string"
    },
    "appConfigFileName": {
      "type": "string"
    },
    "appPackageFileName": {
      "type": "string"
    },
    "replicaRegion1": {
      "type": "string",
      "defaultValue": "East US"
    },
    "replicaRegion2": {
      "type": "string",
      "defaultValue": "South Central US"
    },
    "installScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to install the application. Example: echo 'Installing application...'"
      }
    },
    "updateScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
      }
    },
    "removeScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to delete the application. Example: echo 'Deleting application...'"
      }
    },
    "storageAccountType": {
      "type": "string",
      "allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
      "defaultValue": "Standard_LRS"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Compute/galleries",
      "apiVersion": "2024-03-03",
      "name": "[parameters('galleryName')]",
      "location": "[parameters('location')]",
      "properties": {
        "identifier": {}
      }
    },
    {
      "type": "Microsoft.Compute/galleries/applications",
      "apiVersion": "2024-03-03",
      "name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
      ],
      "properties": {
        "supportedOSType": "[parameters('supportedOSType')]",
        "endOfLifeDate": "[parameters('endOfLifeDate')]",
        "description": "[parameters('description')]",
        "eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
        "privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
        "releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
      }
    },
    {
      "type": "Microsoft.Compute/galleries/applications/versions",
      "apiVersion": "2024-03-03",
      "name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
      ],
      "properties": {
        "publishingProfile": {
          "source": {
            "mediaLink": "[parameters('mediaLink')]",
            "defaultConfigurationLink": "[parameters('configLink')]"
          },
          "manageActions": {
            "install": "[parameters('installScript')]",
            "remove": "[parameters('removeScript')]",
            "update": "[parameters('updateScript')]"
          },
          "settings": {
            "scriptBehaviorAfterReboot": "Rerun",
            "configFileName": "[parameters('appConfigFileName')]",
            "packageFileName": "[parameters('appPackageFileName')]"
          },
          "targetRegions": [
            {
              "name": "[parameters('location')]",
              "regionalReplicaCount": 3,
              "storageAccountType": "[parameters('storageAccountType')]"
            },
            {
              "name": "[parameters('replicaRegion1')]",
              "regionalReplicaCount": 1,
              "storageAccountType": "[parameters('storageAccountType')]"
            },
            {
              "name": "[parameters('replicaRegion2')]"
            },
          ],
          "excludeFromLatest": false,
          "replicaCount": 2,
          "storageAccountType": "[parameters('storageAccountType')]"
        },
        "safetyProfile": {
          "allowDeletionOfReplicatedLocations": true
        },
        "endOfLifeDate": "[parameters('endOfLifeDate')]"
      }
    }
  ]
}

Azure VM-toepassingen implementeren

Nadat de versie van de VM-toepassing is gepubliceerd naar Azure Compute Gallery, kunt u de versie implementeren in Azure Virtual Machines (VM) en Azure Virtual Machine Scale Sets.

De applicationProfile schaalsets in Azure-VM en virtuele-machineschaalsets definiëren het volgende:

Vastgoed Beschrijving Beperkingen
galleryApplications Galerietoepassingen die moeten worden geïmplementeerd
pakketReferentieId Verwijzing naar de toepassingsversie die moet worden geïmplementeerd Geldige referentie voor toepassingsversie
configuratiereferentie Optional. De volledige URL van een opslagblob die de configuratie voor deze implementatie bevat. Hiermee wordt elke waarde die eerder is opgegeven voor defaultConfiguration overschreven. Geldige naslaginformatie voor opslagblob
order Optional. Volgorde waarin toepassingen moeten worden geïmplementeerd Geldig geheel getal
behandelFalenAlsInzetFalen Optional. Toepassingsfout markeren als VM-implementatiefout voor foutafhandeling Waar of onwaar

Het orderveld kan worden gebruikt om afhankelijkheden tussen toepassingen op te geven. De regels voor volgorde zijn als volgt:

Case Betekenis van installatie Fout betekenis
Er is geen order opgegeven Niet-geordende toepassingen worden geïnstalleerd na geordende toepassingen. Er is geen garantie voor de installatievolgorde van de niet-geordende toepassingen. Installatiefouten van andere toepassingen, of het nu geordende of ongeordend is, heeft geen invloed op de installatie van niet-geordende toepassingen.
Dubbele volgordewaarden De toepassing wordt in elke volgorde geïnstalleerd in vergelijking met andere toepassingen met dezelfde volgorde. Alle toepassingen van dezelfde order worden geïnstalleerd na de toepassingen met lagere orders en vóór de toepassingen met hogere orders. Als een eerdere toepassing met een lagere volgorde niet kan worden geïnstalleerd, worden er geen toepassingen met deze bestelling geïnstalleerd. Als een toepassing met deze bestelling niet kan worden geïnstalleerd, worden er geen toepassingen met een hogere volgorde geïnstalleerd.
Toenemende orders De toepassing wordt geïnstalleerd na de toepassingen met lagere orders en vóór de orders met hogere orders. Als een vorige toepassing met een lagere volgorde niet kan worden geïnstalleerd, wordt deze toepassing niet geïnstalleerd. Als deze toepassing niet kan worden geïnstalleerd, wordt er geen toepassing met een hogere volgorde geïnstalleerd.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vmssName": {
      "type": "string"
    },
    "location": {
      "type": "string"
    },
    "subscriptionId": {
      "type": "string"
    },
    "resourceGroupName": {
      "type": "string"
    },
    "galleryName": {
      "type": "string"
    },
    "applicationName1": {
      "type": "string"
    },
    "applicationVersion1": {
      "type": "string",
      "defaultValue": "latest"
    },
    "configurationReference1": {
      "type": "string",
      "metadata": {
        "description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
      }
    },
    "applicationName2": {
      "type": "string"
    },
    "applicationVersion2": {
      "type": "string",
      "defaultValue": "latest"
    }
  },
  "variables": {
    "packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
    "packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachineScaleSets",
      "apiVersion": "2024-03-03",
      "name": "[parameters('vmssName')]",
      "location": "[parameters('location')]",
      "properties": {
        "virtualMachineProfile": {
          "applicationProfile": {
            "galleryApplications": [
              {
                "order": 1,
                "packageReferenceId": "[variables('packageReferenceId1')]",
                "configurationReference": "[parameters('configurationReference1')]",
                "treatFailureAsDeploymentFailure": true
              },
              {
                "order": 2,
                "packageReferenceId": "[variables('packageReferenceId2')]",
                "treatFailureAsDeploymentFailure": false
              }
            ]
          }
        }
      }
    }
  ]
}

Kosten

Er worden geen extra kosten in rekening gebracht voor het gebruik van VM-toepassingspakketten, maar er worden kosten in rekening gebracht voor de volgende resources:

  • Opslagkosten voor het opslaan van elk pakket en alle replica's.
  • Kosten van uitgaand netwerkverkeer voor replicatie van de eerste versie van de installatiekopie van de bronregio naar de gerepliceerde regio's. Volgende replica's worden verwerkt binnen de regio, dus er zijn geen extra kosten.

Raadpleeg de prijsinformatie voor bandbreedte voor meer informatie over uitgaand netwerkverkeer.

Technische details

Overwegingen en huidige limieten

  • Maximaal 10 replica's per regio: wanneer u een versie van een VM-toepassing maakt, is het maximum aantal replica's per regio 10 voor zowel pagina-blob als blok-blob.

  • Maximaal 300 versies per regio: bij het maken van een VM-toepassingsversie kunt u maximaal 300 toepassingsversies per regio hebben.

  • Opslag met openbare toegang en SAS-URI met leesbevoegdheden: Het opslagaccount moet openbare toegang hebben en een SAS-URI met leesbevoegdheden gebruiken, omdat andere beperkingsniveaus implementaties mislukken. SAS-tokens kunnen worden overgeslagen door het artefact in het opslagaccount te publiceren door anonieme toegang toe te staan.

  • Handmatig opnieuw proberen voor mislukte installaties: Op dit moment is de enige manier om een mislukte installatie opnieuw uit te voeren, de toepassing uit het profiel te verwijderen en vervolgens weer toe te voegen.

  • Maximaal 25 toepassingen per VM: maximaal 25 toepassingen kunnen worden geïmplementeerd op één virtuele machine.

  • 2 GB toepassingsgrootte: de maximale bestandsgrootte van een toepassingsversie mediaLink is 2 GB. De maximale bestandsgrootte voor defaultConfigurationLink is 1 GB.

  • Vereist een VM-agent: de VM-agent moet aanwezig zijn op de virtuele machine en kan doelstatussen ontvangen.

  • Eén versie van de toepassing per VM: er kan slechts één versie van een bepaalde toepassing worden geïmplementeerd op een virtuele machine.

  • Verplaatsingsbewerkingen worden momenteel niet ondersteund: het verplaatsen van VM's met gekoppelde VM-toepassingen in resourcegroepen wordt momenteel niet ondersteund.

Notitie

Voor Azure Compute Gallery en VM-toepassingen kan Opslag-SAS worden verwijderd na replicatie. Voor elke volgende updatebewerking is echter een geldige SAS vereist.

Directory downloaden binnen de virtuele machine

De downloadlocatie van het toepassingspakket en de configuratiebestanden zijn:

  • Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>
  • Ramen: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>

De opdrachten voor installeren/bijwerken/verwijderen moeten worden geschreven, ervan uitgaande dat het toepassingspakket en het configuratiebestand zich in de huidige map bevinden.

Bestandsnaamgeving

Wanneer het toepassingsbestand naar de virtuele machine wordt gedownload, wordt de naam van het bestand gewijzigd in 'MyVmApp' en heeft het geen bestandsextensie (bijvoorbeeld .exe, .msi). De VIRTUELE machine is niet op de hoogte van de oorspronkelijke naam en extensie van het bestand.

Hier volgen enkele alternatieven voor het navigeren door dit probleem:

U kunt het script wijzigen zodat deze een opdracht bevat voor het wijzigen van de naam van het bestand voordat u het uitvoert:

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

U kunt ook de packageFileName eigenschap (en de bijbehorende configFileName) gebruiken om ons te laten instrueren wat u de naam van uw bestand wilt wijzigen. Als u deze bijvoorbeeld instelt op 'MyApp.exe', wordt het installatiescript als volgt gemaakt.

MyAppe.exe /S

Aanbeveling

Als uw blob oorspronkelijk de naam 'myApp.exe' heeft in plaats van 'myapp', werkt het script zonder de eigenschap in te packageFileName stellen.

Opdracht-interpreter

De standaardopdracht-interpreters zijn:

  • Linux: /bin/bash
  • Ramen: cmd.exe

Het is mogelijk om een andere interpreter te gebruiken, zoals Chocolatey of PowerShell, zolang deze op de computer is geïnstalleerd, door het uitvoerbare bestand aan te roepen en de opdracht door te geven. Als u bijvoorbeeld wilt dat uw opdracht wordt uitgevoerd in PowerShell in Windows in plaats van cmd, kunt u doorgeven powershell.exe -Command '<powershell commmand>'

Hoe updates worden verwerkt

Wanneer u een toepassingsversie bijwerkt op een virtuele machine of virtuele-machineschaalsets, wordt de updateopdracht die u tijdens de implementatie hebt opgegeven, gebruikt. Als de bijgewerkte versie geen updateopdracht heeft, wordt de huidige versie verwijderd en wordt de nieuwe versie geïnstalleerd.

Updateopdrachten moeten worden geschreven met de verwachting dat deze kan worden bijgewerkt vanuit een oudere versie van de VM-toepassing.

Fout behandelen als implementatiefout

De VM-toepassingsextensie retourneert altijd een succes , ongeacht of een VM-app is mislukt tijdens het installeren/bijwerken/verwijderen. De VM-toepassingsextensie rapporteert alleen de extensiestatus als een fout wanneer er een probleem is met de extensie of de onderliggende infrastructuur. Dit gedrag wordt geactiveerd door de vlag 'Fout behandelen als implementatiefout', die standaard is ingesteld $false op en kan worden gewijzigd in $true. De foutvlag kan worden geconfigureerd in PowerShell of CLI.

VM-toepassingen verpakken en installeren in Linux

Als u een VM-toepassing wilt maken, hebt u toepassingspakket en scripts nodig om de toepassing correct te installeren, bij te werken en te verwijderen.
Toepassingen van derden voor Linux kunnen op een aantal manieren worden verpakt. Laten we eens kijken hoe u de installatieopdrachten voor een aantal van de meest voorkomende installatieopdrachten kunt afhandelen.

bestanden .tar en .gz

Deze bestanden zijn gecomprimeerde archieven en kunnen worden geëxtraheerd naar een gewenste locatie. Controleer de installatie-instructies voor het oorspronkelijke pakket voor het geval ze moeten worden geëxtraheerd naar een specifieke locatie. Als .tar.gz bestand broncode bevat, raadpleegt u de instructies voor het pakket voor het installeren vanaf de bron.

Voorbeeld van het installeren van een opdracht voor installatie golang op een Linux-computer:

sudo tar -C /usr/local -xzf go_linux

Voorbeeld van opdracht verwijderen:

sudo rm -rf /usr/local/go

Toepassingspakketten maken met behulp van .deb, .rpmen andere platformspecifieke pakketten voor VM's met beperkte internettoegang

U kunt afzonderlijke pakketten downloaden voor platformspecifieke pakketbeheerders, maar ze bevatten meestal niet alle afhankelijkheden. Voor deze bestanden moet u ook alle afhankelijkheden in het toepassingspakket opnemen of de systeempakketbeheerder de afhankelijkheden laten downloaden via de opslagplaatsen die beschikbaar zijn voor de VIRTUELE machine. Als u met een virtuele machine met beperkte internettoegang werkt, moet u alle afhankelijkheden zelf verpakken.

Het kan lastig zijn om de afhankelijkheden te achterhalen. Er zijn hulpprogramma's van derden die u de volledige afhankelijkheidsstructuur kunnen laten zien.

In Ubuntu kunt u uitvoeren sudo apt show <package_name> | grep Depends om alle pakketten weer te geven die zijn geïnstalleerd bij het uitvoeren van de sudo apt-get install <packge_name> opdracht. Vervolgens kunt u deze uitvoer gebruiken om alle .deb bestanden te downloaden om een archief te maken dat kan worden gebruikt als het toepassingspakket.

Voer de volgende stappen uit om een VM-toepassingspakket te maken voor het installeren van PowerShell op Ubuntu:

  1. Voer de volgende opdrachten uit om de opslagplaats in staat te stellen PowerShell te downloaden en pakketafhankelijkheden op een nieuwe Ubuntu-VM te identificeren
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. Controleer de uitvoer van de regel Is afhankelijk van de volgende pakketten:
Depends: libc6, lib32gcc-s1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. Download elk van deze bestanden met behulp sudo apt-get download <package_name> van en maak een gecomprimeerd tar-archief met alle bestanden.
  • Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. Dit tar-archief is het toepassingspakketbestand.
  • De installatieopdracht in dit geval is:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • En de opdracht remove is:
sudo apt remove powershell

Gebruik sudo apt autoremove in plaats van expliciet alle afhankelijkheden te verwijderen. Mogelijk hebt u andere toepassingen met overlappende afhankelijkheden geïnstalleerd. In dat geval mislukt een expliciete verwijderopdracht.

Als u de afhankelijkheden niet zelf wilt oplossen en apt verbinding kunt maken met de opslagplaatsen, kunt u een toepassing met slechts één .deb bestand installeren en de afhankelijkheden laten apt verwerken.

Voorbeeld van installatieopdracht:

dpkg -i <package_name> || apt --fix-broken install -y

VM-toepassingen maken in Windows

De meeste toepassingen van derden in Windows zijn beschikbaar als .exe- of .msi-installatieprogramma's. Sommige zijn ook beschikbaar als zip-bestanden extraheren en uitvoeren. Laten we eens kijken naar de aanbevolen procedures voor elk van deze procedures.

installatieprogramma voor .exe

Uitvoerbare installatieprogramma's starten doorgaans een gebruikersinterface (UI) en vereisen dat iemand deze selecteert via de gebruikersinterface. Als het installatieprogramma een parameter voor de stille modus ondersteunt, moet deze worden opgenomen in de installatietekenreeks.

Cmd.exe verwacht ook dat uitvoerbare bestanden de extensie .exehebben, dus u moet de naam van het bestand wijzigen om de .exe extensie te hebben.

Als ik een VM-toepassingspakket wil maken voor myApp.exe, dat als een uitvoerbaar bestand wordt geleverd, heet mijn VM-toepassing 'myApp', dus schrijf ik de opdracht ervan uitgaande dat het toepassingspakket zich in de huidige map bevindt.

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

Als het uitvoerbare bestand van het installatieprogramma geen ondersteuning biedt voor een verwijderparameter, kunt u soms het register opzoeken op een testcomputer om te weten waar het installatieprogramma zich bevindt.

In het register wordt de tekenreeks voor verwijderen opgeslagen Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString , zodat ik de inhoud zou gebruiken als mijn verwijderopdracht:

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

installatieprogramma voor .msi

Voor het uitvoeren van opdrachtregelprogramma's moeten de opdrachten voor het installeren of verwijderen van .msi een toepassing worden gebruikt msiexec. msiexec Normaal gesproken wordt het uitgevoerd als een eigen afzonderlijk proces en cmd wacht niet totdat het proces is voltooid, wat kan leiden tot problemen bij het installeren van meer dan één VM-toepassing. De start opdracht kan worden gebruikt om msiexec ervoor te zorgen dat de installatie wordt voltooid voordat de opdracht wordt geretourneerd. Voorbeeld:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

Voorbeeld van opdracht verwijderen:

start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log

Normaal gesproken wordt de start opdracht aangeroepen in een batchscript. Als het wordt gebruikt met de /wait parameter, wordt het aanroepende script onderbroken totdat het aangeroepen proces wordt beëindigd. Zodra dit is voltooid, controleert het batchscript op de errorlevel variabele die is ingesteld door de start opdracht en sluit het als volgt af:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...

Gezipte bestanden

Voor .zip of andere zip-bestanden wijzigt u de inhoud van het toepassingspakket en pakt u deze uit naar de gewenste bestemming.

Voorbeeld van installatieopdracht:

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

Voorbeeld van opdracht verwijderen:

rmdir /S /Q C:\\myapp

Problemen met VM-toepassingen oplossen

Als u wilt weten of een bepaalde VM-toepassing is toegevoegd aan het VM-exemplaar, controleert u het bericht van de VM-toepassingsextensie.

Voor meer informatie over het ophalen van de status van VM-extensies raadpleegt u Extensies en functies van virtuele machines voor Linux en virtuele machines en functies voor Windows.

Gebruik Get-AzVM om de status van VM-extensies op te halen:

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

Gebruik Get-AzVMSS om de status van schaalsetextensies op te halen:

$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary  = New-Object System.Collections.ArrayList
$result | ForEach-Object {
    $res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
    $resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5

Foutberichten

Bericht Beschrijving
De huidige versie van de VM-toepassing {name} is afgeschaft op {date}. U hebt geprobeerd een vm-toepassingsversie te implementeren die al is afgeschaft. latest Gebruik in plaats van een specifieke versie op te geven.
De huidige VM-toepassingsversie {name} ondersteunt het besturingssysteem {OS}, terwijl het besturingssysteem van de huidige OSDisk {OS} is. U hebt geprobeerd een Linux-toepassing te implementeren in een Windows-exemplaar of omgekeerd.
Het maximum aantal VM-toepassingen (max=5, current={count}) is overschreden. Gebruik minder toepassingen en voer de aanvraag opnieuw uit. Momenteel ondersteunen we slechts vijf VM-toepassingen per VM of schaalset.
Er is meer dan één VM-toepassing opgegeven met dezelfde packageReferenceId. Dezelfde toepassing is meerdere keren opgegeven.
Abonnement is niet gemachtigd voor toegang tot deze installatiekopieën. Het abonnement heeft geen toegang tot deze toepassingsversie.
Het opslagaccount in de argumenten bestaat niet. Er zijn geen toepassingen voor dit abonnement.
De platformafbeelding {image} is niet beschikbaar. Controleer of alle velden in het opslagprofiel juist zijn. Zie voor meer informatie over opslagprofiel https://aka.ms/storageprofile. De toepassing bestaat niet.
De galerieafbeelding {image} is niet beschikbaar in de regio {region}. Neem contact op met de eigenaar van de installatiekopieën om naar deze regio te repliceren of wijzig uw aangevraagde regio. De versie van de galerietoepassing bestaat, maar is niet gerepliceerd naar deze regio.
De SAS is niet geldig voor bron-URI {uri}. Er is een Forbidden fout ontvangen van de opslag bij het ophalen van informatie over de URL (mediaLink of defaultConfigurationLink).
De blob waarnaar wordt verwezen door bron-URI {uri} bestaat niet. De opgegeven blob voor de eigenschappen mediaLink of defaultConfigurationLink bestaat niet.
De URL van de versie van de galerietoepassing {URL} kan niet worden geopend vanwege de volgende fout: externe naam is niet gevonden. Zorg ervoor dat de blob bestaat en of deze openbaar toegankelijk is of een SAS-URL is met leesbevoegdheden. Het meest waarschijnlijk is dat er geen SAS-URI met leesbevoegdheden is opgegeven.
De URL van de versie van de galerietoepassing {URL} kan niet worden geopend vanwege de volgende fout: {error description}. Zorg ervoor dat de blob bestaat en of deze openbaar toegankelijk is of een SAS-URL is met leesbevoegdheden. Er is een probleem opgetreden met de opgegeven opslagblob. De beschrijving van de fout bevat meer informatie.
Bewerking {operationName} is niet toegestaan voor {application} omdat deze is gemarkeerd voor verwijdering. U kunt de verwijderbewerking alleen opnieuw uitvoeren (of wachten tot een lopende bewerking is voltooid). Probeer een toepassing bij te werken die momenteel wordt verwijderd.
De waarde {value} van de parameter galleryApplicationVersion.properties.publishingProfile.replicaCount valt buiten het bereik. De waarde moet tussen één en drie liggen, inclusief. Er zijn slechts één en drie replica's toegestaan voor VM-toepassingsversies.
Het wijzigen van de eigenschap galleryApplicationVersion.properties.publishingProfile.manageActions.install is niet toegestaan. (Of bijwerken, verwijderen) Het is niet mogelijk om een van de beheeracties op een bestaande VmApplication te wijzigen. Er moet een nieuwe VmApplication-versie worden gemaakt.
Het wijzigen van de eigenschap galleryApplicationVersion.properties.publishingProfile.settings.packageFileName is niet toegestaan. (of configFileName) Het is niet mogelijk om een van de instellingen te wijzigen, zoals de naam van het pakketbestand of de configuratiebestandsnaam. Er moet een nieuwe VmApplication-versie worden gemaakt.
De blob waarnaar wordt verwezen door bron-URI {uri} is te groot: grootte = {size}. De toegestane maximale blobgrootte is 1 GB. De maximale grootte voor een blob waarnaar wordt verwezen door mediaLink of defaultConfigurationLink is momenteel 1 GB.
De blob waarnaar wordt verwezen door bron-URI {uri} is leeg. Er is verwezen naar een lege blob.
{type} blobtype wordt niet ondersteund voor de bewerking {operation}. Alleen pagina-blobs en blok-blobs worden ondersteund. VmApplications ondersteunt alleen pagina-blobs en blok-blobs.
De SAS is niet geldig voor bron-URI {uri}. De SAS-URI die is opgegeven voor mediaLink of defaultConfigurationLink is geen geldige SAS-URI.
Kan {region} niet opgeven in doelregio's omdat de vereiste functie {featureName} ontbreekt voor het abonnement. Registreer uw abonnement bij de vereiste functie of verwijder de regio uit de lijst met doelregio's. Als u VmApplications in bepaalde beperkte regio's wilt gebruiken, moet de functievlag zijn geregistreerd voor dat abonnement.
Publicatieprofielregio's voor galerieafbeeldingsversies {regions} moeten de locatie van de installatiekopieënversie {location} bevatten. De lijst met regio's voor replicatie moet de locatie bevatten waar de toepassingsversie zich bevindt.
Dubbele regio's zijn niet toegestaan in doelpublicatieregio's. De publicatieregio's hebben mogelijk geen duplicaten.
Bronnen van de galerietoepassingsversie bieden momenteel geen ondersteuning voor versleuteling. De versleutelingseigenschap voor doelregio's wordt niet ondersteund voor VM-toepassingen
De naam van de entiteit komt niet overeen met de naam in de aanvraag-URL. De versie van de galerietoepassing die is opgegeven in de aanvraag-URL komt niet overeen met de versie die is opgegeven in de aanvraagbody.
De naam van de versie van de galerietoepassing is ongeldig. De naam van de toepassingsversie moet major (int32) volgen. Kleinere(int32). Patch(int32)-indeling, tussen int 0 en 2.147.483.647 (inclusief). Bijvoorbeeld 1.0.0, 2018.12.1 enzovoort. De versie van de galerietoepassing moet de opgegeven indeling volgen.

Volgende stappen