Extensies en functies van virtuele machines voor Linux

Extensies van virtuele Azure-machines (VM's) zijn kleine toepassingen die configuratie na de implementatie en automatiseringstaken voor Azure-VM's bieden. Als voor een virtuele machine bijvoorbeeld software-installatie, antivirusbeveiliging of de mogelijkheid om een script erin uit te voeren is vereist, kunt u een VM-extensie gebruiken.

U kunt Azure VM-extensies uitvoeren met behulp van de Azure CLI, PowerShell, Azure Resource Manager-sjablonen (ARM-sjablonen) en Azure Portal. U kunt extensies bundelen met een nieuwe VM-implementatie of deze uitvoeren op elk bestaand systeem.

Dit artikel bevat een overzicht van Azure VM-extensies, vereisten voor het gebruik ervan en richtlijnen voor het detecteren, beheren en verwijderen ervan. Dit artikel bevat gegeneraliseerde informatie omdat er veel VM-extensies beschikbaar zijn. Elk heeft een mogelijk unieke configuratie en een eigen documentatie.

Use cases en voorbeelden

Elke Azure VM-extensie heeft een specifieke use-case. Voorbeelden zijn:

  • Configureer de bewaking van een VIRTUELE machine met behulp van de VM-extensie van Microsoft Monitoring Agent.
  • Configureer de bewaking van uw Azure-infrastructuur met behulp van de Chef- of Datadog-extensie.

Naast processpecifieke extensies is er een aangepaste scriptextensie beschikbaar voor virtuele Windows- en Linux-machines. Met de aangepaste scriptextensie voor Linux kan elk Bash-script worden uitgevoerd op een virtuele machine. Aangepaste scripts zijn handig voor het ontwerpen van Azure-implementaties waarvoor configuratie nodig is buiten wat systeemeigen Azure-hulpprogramma's kunnen bieden.

Vereisten

Azure Linux Agent

Als u de extensie op de VIRTUELE machine wilt afhandelen, moet de Azure Linux-agent zijn geïnstalleerd. Sommige afzonderlijke extensies hebben vereisten, zoals toegang tot resources of afhankelijkheden.

De Azure Linux-agent beheert interacties tussen een Azure-VM en de Azure-infrastructuurcontroller. De agent is verantwoordelijk voor veel functionele aspecten van het implementeren en beheren van Virtuele Azure-machines, waaronder het uitvoeren van VM-extensies.

De Azure Linux-agent is vooraf geïnstalleerd op Azure Marketplace-installatiekopieën. Het kan ook handmatig worden geïnstalleerd op ondersteunde besturingssystemen.

De agent wordt uitgevoerd op meerdere besturingssystemen. Het uitbreidingsframework heeft echter een limiet voor de besturingssystemen die extensies gebruiken. Sommige extensies worden niet ondersteund in alle besturingssystemen en kunnen foutcode 51 ("Niet-ondersteund besturingssysteem") verzenden. Raadpleeg de documentatie voor afzonderlijke extensies voor ondersteuning.

Netwerktoegang

Extensiepakketten worden gedownload uit de Opslagplaats van de Azure Storage-extensie. Uploads van extensiestatussen worden geplaatst in Azure Storage.

Als u een ondersteunde versie van de Azure Linux-agent gebruikt, hoeft u geen toegang tot Azure Storage in de VM-regio toe te staan. U kunt de agent gebruiken om de communicatie om te leiden naar de Azure-infrastructuurcontroller voor agentcommunicatie. Als u een niet-ondersteunde versie van de agent gebruikt, moet u uitgaande toegang tot Azure Storage in die regio vanaf de VIRTUELE machine toestaan.

Belangrijk

Als u de toegang tot het privé-IP-adres 168.63.129.16 hebt geblokkeerd met behulp van de gastfirewall, mislukken extensies, zelfs als u een ondersteunde versie van de agent gebruikt of als u uitgaande toegang hebt geconfigureerd.

Agents kunnen alleen worden gebruikt om extensiepakketten en de rapportagestatus te downloaden. Als een extensie-installatie bijvoorbeeld een script moet downloaden van GitHub (aangepaste scriptextensie) of toegang nodig heeft tot Azure Storage (Azure Backup), moet u extra firewall- of netwerkbeveiligingsgroeppoorten (NSG) openen. Verschillende extensies hebben verschillende vereisten, omdat ze zelf toepassingen zijn. Voor extensies waarvoor toegang tot Azure Storage is vereist, kunt u toegang toestaan met behulp van Azure NSG-servicetags.

Voor het omleiden van aanvragen voor agentverkeer heeft de Azure Linux-agent proxyserverondersteuning. Deze proxyserverondersteuning past echter geen extensies toe. U moet elke afzonderlijke extensie configureren voor gebruik met een proxy.

VM-extensies detecteren

Er zijn veel VM-extensies beschikbaar voor gebruik met Azure-VM's. Gebruik az vm extension image list om een volledige lijst weer te geven. In het volgende voorbeeld ziet u alle beschikbare extensies op de locatie westus :

az vm extension image list --location westus --output table

VM-extensies uitvoeren

Azure VM-extensies worden uitgevoerd op bestaande VM's. Dit is handig wanneer u configuratiewijzigingen moet aanbrengen of connectiviteit wilt herstellen op een reeds geïmplementeerde VM. VM-extensies kunnen ook worden gebundeld met ARM-sjabloonimplementaties. Met behulp van extensies met ARM-sjablonen kunt u Azure-VM's implementeren en configureren zonder tussenkomst na de implementatie.

U kunt de volgende methoden gebruiken om een extensie uit te voeren op een bestaande VM.

Azure-CLI

U kunt Azure VM-extensies uitvoeren op een bestaande VM met behulp van de opdracht az vm extension set . In het volgende voorbeeld wordt de aangepaste scriptextensie uitgevoerd op een virtuele machine met de naam myVM in een resourcegroep met de naam myResourceGroup. Vervang de naam van de voorbeeldresourcegroep, de NAAM van de VM en het script dat moet worden uitgevoerd (https://raw.githubusercontent.com/me/project/hello.sh) door uw eigen gegevens.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"fileUris": ["https://raw.githubusercontent.com/me/project/hello.sh"],"commandToExecute": "./hello.sh"}'

Wanneer de extensie correct wordt uitgevoerd, is de uitvoer vergelijkbaar met het volgende voorbeeld:

info:    Executing command vm extension set
+ Looking up the VM "myVM"
+ Installing extension "CustomScript", VM: "mvVM"
info:    vm extension set command OK

Azure PowerShell

U kunt Azure VM-extensies uitvoeren op een bestaande VM met behulp van de opdracht Set-AzVMExtension . In het volgende voorbeeld wordt de aangepaste scriptextensie uitgevoerd op een virtuele machine met de naam myVM in een resourcegroep met de naam myResourceGroup. Vervang de naam van de voorbeeldresourcegroep, de NAAM van de VM en het script dat moet worden uitgevoerd (https://raw.githubusercontent.com/me/project/hello.sh) door uw eigen gegevens.

$Params = @{
    ResourceGroupName  = 'myResourceGroup'
    VMName             = 'myVM'
    Name               = 'CustomScript'
    Publisher          = 'Microsoft.Azure.Extensions'
    ExtensionType      = 'CustomScript'
    TypeHandlerVersion = '2.1'
    Settings          = @{fileUris = @('https://raw.githubusercontent.com/me/project/hello.sh'); commandToExecute = './hello.sh'}
}
Set-AzVMExtension @Params

Wanneer de extensie correct wordt uitgevoerd, is de uitvoer vergelijkbaar met het volgende voorbeeld:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK

Azure Portal

U kunt VM-extensies toepassen op een bestaande VIRTUELE machine via Azure Portal. Selecteer de VIRTUELE machine in de portal, selecteer Extensies en selecteer vervolgens Toevoegen. Kies de gewenste extensie in de lijst met beschikbare extensies en volg de instructies in de wizard.

In de volgende afbeelding ziet u de installatie van de aangepaste scriptextensie voor Linux vanuit Azure Portal:

Screenshot of the dialog for installing the Custom Script extension for Linux.

Azure Resource Manager-sjablonen

U kunt VM-extensies toevoegen aan een ARM-sjabloon en deze uitvoeren met de implementatie van de sjabloon. Wanneer u een extensie met een sjabloon implementeert, kunt u volledig geconfigureerde Azure-implementaties maken.

De volgende JSON is bijvoorbeeld afkomstig van een volledige ARM-sjabloon waarmee een set vm's met gelijke taakverdeling en een Azure SQL-database wordt geïmplementeerd en vervolgens een .NET Core-toepassing op elke VIRTUELE machine wordt geïnstalleerd. De VM-extensie zorgt voor de software-installatie.

{
    "apiVersion": "2015-06-15",
    "type": "extensions",
    "name": "config-app",
    "location": "[resourceGroup().location]",
    "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
    ],
    "tags": {
    "displayName": "config-app"
    },
    "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
        ]
    },
    "protectedSettings": {
        "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
    }
}

Zie Virtuele machines in een Azure Resource Manager-sjabloon voor meer informatie over het maken van ARM-sjablonen.

Hulp bij het beveiligen van VM-extensiegegevens

Wanneer u een VM-extensie uitvoert, kan het nodig zijn om gevoelige informatie op te nemen, zoals referenties, namen van opslagaccounts en toegangssleutels. Veel VM-extensies bevatten een beveiligde configuratie waarmee gegevens worden versleuteld en alleen worden ontsleuteld binnen de doel-VM. Elke extensie heeft een specifiek beveiligd configuratieschema en elk is gedetailleerd in extensiespecifieke documentatie.

In het volgende voorbeeld ziet u een exemplaar van de aangepaste scriptextensie voor Linux. De opdracht die moet worden uitgevoerd, bevat een set referenties. In dit voorbeeld is de opdracht die moet worden uitgevoerd, niet versleuteld.

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ],
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

Als u de commandToExecute eigenschap naar de protected configuratie verplaatst, kunt u de uitvoeringsreeks beveiligen, zoals wordt weergegeven in het volgende voorbeeld:

{
  "apiVersion": "2015-06-15",
  "type": "extensions",
  "name": "config-app",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
      ]
    },
    "protectedSettings": {
      "commandToExecute": "[concat('sudo sh config-music.sh ',variables('musicStoreSqlName'), ' ', parameters('adminUsername'), ' ', parameters('sqlAdminPassword'))]"
    }
  }
}

Hoe agents en extensies worden bijgewerkt

Agents en extensies delen hetzelfde mechanisme voor automatische updates.

Wanneer een update beschikbaar is en automatische updates zijn ingeschakeld, wordt de update pas op de VM geïnstalleerd nadat er een wijziging is aangebracht in een extensie of nadat andere VM-modellen zijn gewijzigd, zoals:

  • Gegevensschijven
  • Uitbreidingen
  • Extensietags
  • Diagnostische opstartcontainer
  • Geheimen van gastbesturingssystemen
  • VM-grootte
  • Netwerkprofiel

Uitgevers maken updates beschikbaar voor regio's op verschillende momenten, zodat het mogelijk is dat u VM's in verschillende regio's in verschillende versies kunt hebben.

Notitie

Voor sommige updates zijn mogelijk aanvullende firewallregels vereist. Zie Netwerktoegang.

Agentupdates

De Linux VM-agent bevat inrichtingsagentcode en extensieafhandelingscode in één pakket. Ze kunnen niet worden gescheiden.

U kunt de inrichtingsagent uitschakelen wanneer u in Azure wilt inrichten met behulp van cloud-init.

Ondersteunde versies van de agents kunnen automatische updates gebruiken. De enige code die kan worden bijgewerkt, is de extensieverwerkingscode, niet de code van de inrichtingsagent. De inrichtingsagentcode wordt eenmaal uitgevoerd.

De extensieafhandelingscode is verantwoordelijk voor:

  • Communiceren met de Azure-infrastructuur.
  • Het verwerken van de VM-extensiebewerkingen, zoals installaties, rapportagestatus, het bijwerken van de afzonderlijke extensies en het verwijderen van extensies. Updates bevatten beveiligingsoplossingen, bugfixes en verbeteringen in de extensieafhandelingscode.

Wanneer de agent is geïnstalleerd, wordt er een bovenliggende daemon gemaakt. Dit bovenliggende item zorgt vervolgens voor een onderliggend proces dat wordt gebruikt voor het afhandelen van extensies. Als er een update beschikbaar is voor de agent, wordt deze gedownload. Het bovenliggende item stopt het onderliggende proces, werkt het bij en start het opnieuw. Als er een probleem is met de update, wordt het bovenliggende proces teruggedraaid naar de vorige onderliggende versie.

Het bovenliggende proces kan niet automatisch worden bijgewerkt. Het bovenliggende item kan alleen worden bijgewerkt door een distributiepakketupdate.

Als u wilt controleren welke versie u gebruikt, controleert u waagent als volgt:

waagent --version

De uitvoer lijkt op die in het volgende voorbeeld:

WALinuxAgent-2.2.45 running on <Linux Distro>
Python: 3.6.9
Goal state agent: 2.7.1.0

In de voorgaande voorbeelduitvoer is WALinuxAgent-2.2.45de bovenliggende (of pakket geïmplementeerde versie) . De Goal state agent waarde is de versie voor automatisch bijwerken.

U wordt ten zeerste aangeraden altijd automatische updates in te schakelen voor de agent: AutoUpdate.Enabled=y. Als u automatische updates niet inschakelt, moet u de agent handmatig bijwerken en krijgt u geen bug- en beveiligingscorrecties.

Extensie-updates

Wanneer een extensie-update beschikbaar is en automatische updates zijn ingeschakeld, wordt de extensie door de Azure Linux-agent gedownload en bijgewerkt nadat een wijziging in het VM-model is doorgevoerd.

Automatische extensie-updates zijn secundair of hotfix. U kunt zich aanmelden of afmelden voor secundaire updates wanneer u de extensie inricht. In het volgende voorbeeld ziet u hoe u secundaire versies in een ARM-sjabloon automatisch kunt upgraden met behulp van "autoUpgradeMinorVersion": true,:

    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
        "fileUris": [
        "https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"
        ]
    },

Om de meest recente oplossingen voor kleine releasefouten te krijgen, raden we u ten zeerste aan dat u altijd automatische updates in uw extensie-implementaties selecteert. U kunt zich niet afmelden voor hotfix-updates die oplossingen voor beveiligings- of sleutelfouten bevatten.

Als u automatische updates uitschakelt of een primaire versie moet upgraden, gebruikt u az vm extension set of Set-AzVMExtension en geeft u de doelversie op.

Extensie-updates identificeren

Bepalen of de extensie is ingesteld met autoUpgradeMinorVersion op een VIRTUELE machine

U kunt zien vanuit het VM-model of de extensie is ingericht met autoUpgradeMinorVersion. Als u dit wilt controleren, gebruikt u az vm show en geeft u de resourcegroep en vm-naam als volgt op:

az vm show --resource-group myResourceGroup --name myVM

In de volgende voorbeelduitvoer ziet u dat autoUpgradeMinorVersion is ingesteld op true:

  "resources": [
    {
      "autoUpgradeMinorVersion": true,
      "forceUpdateTag": null,
      "id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/extensions/customScript",

Identificeren wanneer er een autoUpgradeMinorVersion-gebeurtenis is opgetreden

Als u wilt zien wanneer er een update van de extensie is opgetreden, bekijkt u de agentlogboeken op de VM op /var/log/waagent.log.

In het volgende voorbeeld is Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025 de VIRTUELE machine geïnstalleerd. Er was een hotfix beschikbaar voor Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027.

INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Expected handler state: enabled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Decide which version to use
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Use version: 2.3.9027
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Current handler state is: NotInstalled
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Download extension package
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Unpack extension package
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Download, message=Download succeeded
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Initialize extension directory
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update settings file: 0.settings
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Disable extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9025] Launch command:diagnostic.py -disable
...
INFO Event: name=Microsoft.OSTCExtensions.LinuxDiagnostic, op=Disable, message=Launch command succeeded: diagnostic.py -disable
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Update extension.
INFO [Microsoft.OSTCExtensions.LinuxDiagnostic-2.3.9027] Launch command:diagnostic.py -update
2017/08/14 20:21:57 LinuxAzureDiagnostic started to handle.

Agentmachtigingen

Om de taken uit te voeren, moet de agent als hoofdmap worden uitgevoerd.

Problemen met VM-extensies oplossen

Elke VM-extensie kan specifieke stappen voor probleemoplossing hebben. Wanneer u bijvoorbeeld de extensie Aangepast script gebruikt, kunt u de details van de uitvoering van scripts lokaal vinden op de VM waarop de extensie werd uitgevoerd.

De volgende probleemoplossingsacties zijn van toepassing op alle VM-extensies:

  • Als u het logboek van de Azure Linux-agent wilt controleren, bekijkt u de activiteit toen uw extensie werd ingericht in /var/log/waagent.log.

  • Raadpleeg de extensielogboeken voor meer informatie in /var/log/azure/<extensionName>.

  • Raadpleeg secties voor probleemoplossing in extensiespecifieke documentatie voor foutcodes, bekende problemen en andere extensiespecifieke informatie.

  • Bekijk de systeemlogboeken. Controleer op andere bewerkingen die mogelijk de extensie hebben beïnvloed, zoals een langdurige installatie van een andere toepassing waarvoor exclusieve toegang tot pakketbeheer is vereist.

Veelvoorkomende redenen voor uitbreidingsfouten

  • Extensies kunnen 20 minuten worden uitgevoerd. (Uitzonderingen zijn Aangepast script en Chef, die 90 minuten hebben.) Als uw implementatie deze keer wordt overschreden, wordt deze gemarkeerd als een time-out. De oorzaak hiervan kan vm's met weinig resources zijn, of andere VM-configuraties of opstarttaken verbruiken grote hoeveelheden resources terwijl de extensie probeert in te richten.

  • Er wordt niet voldaan aan minimale vereisten. Sommige extensies hebben afhankelijkheden van VM-SKU's, zoals HPC-installatiekopieën. Extensies hebben mogelijk bepaalde netwerktoegangsvereisten, zoals communicatie met Azure Storage of openbare services. Andere voorbeelden zijn mogelijk toegang tot pakketopslagplaatsen, onvoldoende schijfruimte of beveiligingsbeperkingen.

  • Package Manager-toegang is exclusief. In sommige gevallen kan een langlopende VM-configuratie en extensie-installatie conflicteren omdat ze allebei exclusieve toegang tot pakketbeheer nodig hebben.

Extensiestatus weergeven

Nadat een VM-extensie is uitgevoerd op een virtuele machine, gebruikt u az vm get-instance-view om de extensiestatus als volgt te retourneren:

az vm get-instance-view \
    --resource-group myResourceGroup \
    --name myVM \
    --query "instanceView.extensions"

De uitvoer lijkt op die in het volgende voorbeeld:

  {
    "name": "customScript",
    "statuses": [
      {
        "code": "ProvisioningState/failed/0",
        "displayStatus": "Provisioning failed",
        "level": "Error",
        "message": "Enable failed: failed to execute command: command terminated with exit status=127\n[stdout]\n\n[stderr]\n/bin/sh: 1: ech: not found\n",
        "time": null
      }
    ],
    "substatuses": null,
    "type": "Microsoft.Azure.Extensions.CustomScript",
    "typeHandlerVersion": "2.1.6"
  }

U kunt ook de uitvoeringsstatus van de extensie vinden in Azure Portal. Selecteer de VIRTUELE machine, selecteer Extensies en selecteer vervolgens de gewenste extensie.

Een VM-extensie opnieuw uitvoeren

Er kunnen gevallen zijn waarin een VM-extensie opnieuw moet worden uitgevoerd. U kunt een extensie opnieuw uitvoeren door deze te verwijderen en vervolgens de extensie opnieuw uit te voeren met een uitvoeringsmethode van uw keuze.

Als u een extensie wilt verwijderen, gebruikt u az vm extension delete als volgt:

az vm extension delete \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --name customScript

U kunt ook een extensie verwijderen in Azure Portal:

  1. Selecteer een virtuele machine.
  2. Selecteer Extensies.
  3. Selecteer de extensie.
  4. Selecteer Verwijderen.

Naslaginformatie over algemene VM-extensie

Extensienaam Beschrijving
Aangepaste scriptextensie voor Linux Voer scripts uit op een virtuele Azure-machine.
VMAccess-extensie Krijg weer toegang tot een virtuele Azure-machine. U kunt het ook gebruiken om gebruikers en referenties te beheren.
Azure Diagnostics-extensie Azure Diagnostics beheren.

Volgende stappen

Zie extensies en functies van virtuele Azure-machines voor meer informatie over VM-extensies.