Förstå automatiska IoT Edge-distributioner för enskilda enheter eller i stor skala

Gäller för:IoT Edge 1.4 checkmark IoT Edge 1.4

Viktigt!

IoT Edge 1.4 är den version som stöds. Om du har en tidigare version läser du Uppdatera IoT Edge.

Automatisk distribution och distribution i flera lager hjälper dig att hantera och konfigurera moduler på ett stort antal IoT Edge-enheter.

Azure IoT Edge tillhandahåller två sätt att konfigurera modulerna så att de körs på IoT Edge-enheter. Den första metoden är att distribuera moduler per enhet. Du skapar ett distributionsmanifest och tillämpar det sedan på en viss enhet efter namn. Den andra metoden är att distribuera moduler automatiskt till alla registrerade enheter som uppfyller en uppsättning definierade villkor. Du skapar ett distributionsmanifest och definierar sedan vilka enheter det gäller för baserat på taggar i enhetstvillingen.

Du kan inte kombinera distributioner per enhet och automatiskt. När du börjar rikta in dig på IoT Edge-enheter med automatiska distributioner (med eller utan lagerdistributioner) stöds inte längre distributioner per enhet.

Den här artikeln fokuserar på att konfigurera och övervaka enhetsflottor, som tillsammans kallas automatiska IoT Edge-distributioner.

De grundläggande distributionsstegen är följande:

  1. En operator definierar ett distributionsmanifest som beskriver en uppsättning moduler och målenheterna.
  2. Därför kommunicerar IoT Hub-tjänsten med alla målenheter för att konfigurera dem med de deklarerade modulerna.
  3. IoT Hub-tjänsten hämtar status från IoT Edge-enheterna och gör dem tillgängliga för operatören. En operatör kan till exempel se när en Edge-enhet inte har konfigurerats eller om en modul misslyckas under körningen.
  4. När som helst, när nyligen riktade IoT Edge-enheter är online och ansluter med IoT Hub, konfigureras de för distributionen.

I den här artikeln beskrivs varje komponent som ingår i konfigurationen och övervakningen av en distribution. En genomgång av hur du skapar och uppdaterar en distribution finns i Distribuera och övervaka IoT Edge-moduler i stor skala.

Distribution

En automatisk IoT Edge-distribution tilldelar IoT Edge-modulbilder som ska köras som instanser på en måluppsättning med IoT Edge-enheter. Den automatiserade distributionen konfigurerar ett IoT Edge-distributionsmanifest för att inkludera en lista över moduler med motsvarande initieringsparametrar. En distribution kan tilldelas till en enskild enhet (baserat på enhets-ID) eller till en grupp med enheter (baserat på taggar). När en IoT Edge-enhet tar emot ett distributionsmanifest laddar den ned och installerar containeravbildningarna från respektive containerlagringsplatser och konfigurerar dem därefter. När en distribution har skapats kan en operatör övervaka distributionsstatusen för att se om målenheter är korrekt konfigurerade.

Endast IoT Edge-enheter kan konfigureras med en distribution. Följande krav måste finnas på enheten innan den kan ta emot distributionen:

  • Basoperativsystemet
  • Ett containerhanteringssystem som Moby eller Docker
  • Etablering av IoT Edge-körningen

Distributionsmanifest

Ett distributionsmanifest är ett JSON-dokument som beskriver de moduler som ska konfigureras på de IoT Edge-målenheterna. Den innehåller konfigurationsmetadata för alla moduler, inklusive de systemmoduler som krävs (särskilt IoT Edge-agenten och IoT Edge-hubben).

Konfigurationsmetadata för varje modul innehåller:

  • Version
  • Type
  • Status (till exempel Körs eller stoppas)
  • Omstartsprincip
  • Avbildnings- och containerregister
  • Vägar för indata och utdata

Om modulavbildningen lagras i ett privat containerregister innehåller IoT Edge-agenten autentiseringsuppgifterna för registret.

Målvillkor

Målenhetens villkor utvärderas kontinuerligt under distributionens livslängd. Alla nya enheter som uppfyller kraven ingår och alla befintliga enheter som inte längre uppfyller kraven tas bort. Distributionen återaktiveras om tjänsten identifierar någon ändring av målvillkoret.

Du har till exempel en distribution med ett målvillkor tags.environment = 'prod'. När du initierar distributionen finns det 10 produktionsenheter. Modulerna har installerats på dessa 10 enheter. IoT Edge-agentstatusen visar totalt 10 enheter, 10 lyckade svar, 0 felsvar och 0 väntande svar. Nu lägger du till ytterligare fem enheter med tags.environment = 'prod'. Tjänsten identifierar ändringen och IoT Edge-agentstatusen visar nu totalt 15 enheter, 10 lyckade svar, 0 felsvar och 5 väntande svar medan den distribueras till de fem nya enheterna.

Om en distribution inte har något målvillkor tillämpas den på inga enheter.

Använd alla booleska villkor för enhetstvillingtaggar, rapporterade egenskaper för enhetstvillingar eller deviceId för att välja målenheterna. Om du vill använda ett villkor med taggar måste du lägga till ett "tags":{} avsnitt i enhetstvillingen under samma nivå som egenskaper. Mer information om taggar i en enhetstvilling finns i Förstå och använda enhetstvillingar i IoT Hub. Mer information om frågeåtgärder finns i IoT Hub-frågespråkoperatorer och IS_DEFINED funktion.

Exempel på målvillkor:

  • deviceId ='linuxprod1'
  • tags.environment ='prod'
  • tags.environment = 'prod' AND tags.location = 'westus'
  • tags.environment = 'prod' OR tags.location = 'westus'
  • tags.operator = 'John' AND tags.environment = 'prod' AND NOT deviceId = 'linuxprod1'
  • properties.reported.devicemodel = "4000x"
  • IS_DEFINED(tags.remote)
  • INTE IS_DEFINED(tags.location.building)
  • tags.environment != null
  • [ingen]

Tänk på dessa begränsningar när du skapar ett målvillkor:

  • I enhetstvillingen kan du bara skapa ett målvillkor med hjälp av taggar, rapporterade egenskaper eller deviceId.
  • Dubbla citattecken tillåts inte i någon del av målvillkoret. Använd enkla citattecken.
  • Enkla citattecken representerar värdena för målvillkoret. Därför måste du undvika det enkla citatet med ett annat citattecken om det är en del av enhetsnamnet. Om du till exempel vill rikta in dig på en enhet med namnet operator'sDeviceskriver deviceId='operator''sDevice'du .
  • Siffror, bokstäver och följande tecken tillåts i målvillkorsvärden: "()<>@,;:\\"/?={} \t\n\r.
  • Följande tecken tillåts inte i målvillkorsnycklar:/;.

Prioritet

En prioritet definierar om en distribution ska tillämpas på en målenhet i förhållande till andra distributioner. En distributionsprioritet är ett positivt heltal inom intervallet från 0 till 2 147 483 647. Större tal anger en högre prioritet. Om en IoT Edge-enhet är mål för mer än en distribution gäller distributionen med högsta prioritet. Distributioner med lägre prioritet tillämpas inte och de sammanfogas inte heller. Om en enhet är riktad mot två eller flera distributioner med samma prioritet gäller den senast skapade distributionen (bestäms av tidsstämpeln för skapande).

Etiketter

Etiketter är strängnyckel/värde-par som du kan använda för att filtrera och gruppera distributioner. En distribution kan ha flera etiketter. Etiketter är valfria och påverkar inte konfigurationen av IoT Edge-enheter.

Mått

Som standard rapporterar alla distributioner på fyra mått:

  • Mål visar de IoT Edge-enheter som matchar distributionsmålvillkoret.
  • Tillämpad visar mål-IoT Edge-enheter som inte är mål för en annan distribution med högre prioritet.
  • Rapportframgång visar de IoT Edge-enheter som rapporterar sina moduler som distribuerade.
  • Rapporteringsfel visar de IoT Edge-enheter som rapporterar en eller flera moduler som distribuerade utan framgång. Om du vill undersöka felet ytterligare ansluter du till dessa enheter och visar loggfilerna.

Dessutom kan du definiera dina egna anpassade mått för att övervaka och hantera distributionen.

Mått ger en sammanfattning av de olika tillstånd som enheter kan rapportera tillbaka till följd av att en distributionskonfiguration tillämpas. Mått kan fråga edgeHub-modultvillingens rapporterade egenskaper, till exempel lastDesiredStatus eller last Anslut Time.

Till exempel:

SELECT deviceId FROM devices
  WHERE properties.reported.lastDesiredStatus.code = 200

Det är valfritt att lägga till egna mått och påverkar inte den faktiska konfigurationen av IoT Edge-enheter.

Distribution i lager

Lagerdistributioner är automatiska distributioner som kan kombineras för att minska antalet unika distributioner som behöver skapas. Lagerdistributioner är användbara i scenarier där samma moduler återanvänds i olika kombinationer i många automatiska distributioner.

Distributioner i lager har samma grundläggande komponenter som alla automatiska distributioner. De riktar in sig på enheter baserat på taggar i enhetstvillingarna och ger samma funktioner kring etiketter, mått och statusrapportering. Distributioner i lager har också tilldelats prioriteter. I stället för att använda prioriteten för att avgöra vilken distribution som tillämpas på en enhet avgör prioriteten hur flera distributioner rangordnas på en enhet. Om två distributioner i flera lager till exempel har en modul eller en väg med samma namn tillämpas den skiktade distributionen med högre prioritet medan den lägre prioriteten skrivs över.

Systemkörningsmodulerna, som kallas edgeAgent och edgeHub, är inte konfigurerade som en del av en distribution på flera lager. Alla IoT Edge-enheter som är mål för en distribution i flera lager behöver först en standardbaserad automatisk distribution som tillämpas på den. Den automatiska distributionen ger den bas på vilken lagerdistributioner kan läggas till.

En IoT Edge-enhet kan tillämpa en och endast en standardbaserad automatisk distribution, men den kan använda flera lager för automatiska distributioner. Alla distributioner i lager som riktar sig till en enhet måste ha högre prioritet än den automatiska distributionen för den enheten.

Tänk till exempel på följande scenario för ett företag som hanterar byggnader. Företaget utvecklade IoT Edge-moduler för insamling av data från säkerhetskameror, rörelsesensorer och hissar. Alla byggnader kan dock inte använda alla tre modulerna. Med automatiska standarddistributioner måste företaget skapa enskilda distributioner för alla modulkombinationer som deras byggnader behöver.

Screenshot of showing that standard automatic deployments need to accommodate every module combination.

Men när företaget växlar till automatiska distributioner i lager kan de skapa samma modulkombinationer för sina byggnader med färre distributioner att hantera. Varje modul har en egen lagerdistribution och enhetstaggar identifierar vilka moduler som läggs till i varje byggnad.

Screenshot that shows how layered automatic deployments simplify scenarios where the same modules are combined in different ways.

Konfiguration av modultvilling

När du arbetar med distributioner i flera lager kan du avsiktligt eller på annat sätt ha två distributioner med samma modul riktad mot en enhet. I dessa fall kan du bestämma om distributionen med högre prioritet ska skriva över modultvillingen eller lägga till den. Du kan till exempel ha en distribution som tillämpar samma modul på 100 olika enheter. Men 10 av dessa enheter är i säkra anläggningar och behöver ytterligare konfiguration för att kommunicera via proxyservrar. Du kan använda en distribution i flera lager för att lägga till egenskaper för modultvillingar som gör att dessa 10 enheter kan kommunicera säkert utan att skriva över den befintliga modultvillinginformationen från basdistributionen.

Du kan lägga till önskade egenskaper för modultvillingar i distributionsmanifestet. I en standarddistribution lägger du till egenskaper i avsnittet properties.desired i modultvillingen. Men i en distribution i flera lager kan du deklarera en ny delmängd av önskade egenskaper.

I en standarddistribution kan du till exempel lägga till modulen för simulerad temperatursensor med följande önskade egenskaper som uppmanar den att skicka data i 5-sekundersintervall:

"SimulatedTemperatureSensor": {
  "properties.desired": {
    "SendData": true,
    "SendInterval": 5
  }
}

I en lagerdistribution som riktar sig till vissa eller alla dessa enheter kan du lägga till en egenskap som instruerar den simulerade sensorn att skicka 1 000 meddelanden och sedan stoppa. Du vill inte skriva över de befintliga egenskaperna, så du skapar ett nytt avsnitt i de önskade egenskaperna med namnet layeredProperties, som innehåller den nya egenskapen:

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties": {
    "StopAfterCount": 1000
  }
}

En enhet som har båda distributionerna tillämpade återspeglar följande egenskaper i modultvillingen för den simulerade temperatursensorn:

"properties": {
  "desired": {
    "SendData": true,
    "SendInterval": 5,
    "layeredProperties": {
      "StopAfterCount": 1000
    }
  }
}

Om du anger properties.desired fältet för modultvillingen i en lagerdistribution properties.desired skriver du över de önskade egenskaperna för modulen i eventuella distributioner med lägre prioritet.

Stegvis distribution

En stegvis distribution är en övergripande process där en operatör distribuerar ändringar till en bredare uppsättning IoT Edge-enheter. Målet är att göra ändringar gradvis för att minska risken för att göra storskaliga icke-bakåtkompatibla ändringar. Automatiska distributioner hjälper dig att hantera stegvisa distributioner över en flotta av IoT Edge-enheter.

En stegvis distribution körs i följande faser och steg:

  1. Upprätta en testmiljö för IoT Edge-enheter genom att etablera dem och ange en tagg för enhetstvillingar som tag.environment='test'. Testmiljön bör spegla den produktionsmiljö som distributionen så småningom kommer att riktas mot.
  2. Skapa en distribution, inklusive önskade moduler och konfigurationer. Målvillkoret bör riktas mot testmiljön för IoT Edge-enheter.
  3. Verifiera den nya modulkonfigurationen i testmiljön.
  4. Uppdatera distributionen så att den innehåller en delmängd av produktions-IoT Edge-enheter genom att lägga till en ny tagg i målvillkoret. Se också till att prioriteten för distributionen är högre än andra distributioner som för närvarande är riktade till dessa enheter.
  5. Kontrollera att distributionen lyckades på IoT Edge-målenheterna genom att visa distributionsstatusen.
  6. Uppdatera distributionen så att den riktar in sig på alla återstående IoT Edge-enheter för produktion.

Återställning

Distributioner kan återställas om du får fel eller felkonfigurationer. Eftersom en distribution definierar den absoluta modulkonfigurationen för en IoT Edge-enhet måste en ytterligare distribution även riktas mot samma enhet med lägre prioritet även om målet är att ta bort alla moduler.

Om du tar bort en distribution tas inte modulerna bort från målenheter. Det måste finnas en annan distribution som definierar en ny konfiguration för enheterna, även om det är en tom distribution.

Om du tar bort en distribution kan du dock ta bort moduler från målenheten om det var en distribution i flera lager. En distribution i flera lager uppdaterar den underliggande distributionen och kan eventuellt lägga till moduler. Om du tar bort en distribution i flera lager tas uppdateringen bort till den underliggande distributionen, vilket kan ta bort moduler.

En enhet har till exempel basdistributionen A och lagerdistributionerna O och M tillämpade på den (så att A-, O- och M-distributionerna distribueras till enheten). Om lagerdistribution M sedan tas bort tillämpas A och O på enheten och modulerna som är unika för distribution M tas bort.

Utför återställningar i följande sekvens:

  1. Bekräfta att en andra distribution också är riktad mot samma enhetsuppsättning. Om målet med återställningen är att ta bort alla moduler bör den andra distributionen inte innehålla några moduler.
  2. Ändra eller ta bort målvillkorsuttrycket för den distribution som du vill återställa så att enheterna inte längre uppfyller målvillkoret.
  3. Kontrollera att återställningen lyckades genom att visa distributionsstatusen.
    • Den återställda distributionen bör inte längre visa status för de enheter som har återställts.
    • Den andra distributionen bör nu innehålla distributionsstatus för de enheter som återställdes.

Nästa steg