Az Azure Container Instances gyakori hibáinak elhárítása

Ez a cikk bemutatja, hogyan háríthatja el a tárolók Azure Container Instances való kezelésével vagy üzembe helyezésével kapcsolatos gyakori problémákat. Lásd még a gyakori kérdéseket.

Ha további támogatásra van szüksége, tekintse meg a Azure Portal elérhető Súgó + támogatás lehetőségeket.

Tárolócsoport üzembe helyezése során felmerülő problémák

Elnevezési konvenciók

A tároló specifikációinak meghatározásakor bizonyos paramétereknek meg kell felelnie az elnevezési korlátozásoknak. Az alábbi táblázat a tárolócsoport tulajdonságaira vonatkozó konkrét követelményekkel rendelkezik. További információkért lásd az Azure Architecture Center elnevezési konvencióit , valamint az Azure-erőforrások elnevezési szabályait és korlátozásait.

Hatókör Hossz Kis- és nagybetűk Érvényes karakterek Javasolt minta Példa
1. tároló neve 1–63 Kisbetűs Alfanumerikus és kötőjel bárhol, az első vagy az utolsó karakter kivételével <name>-<role>-container<number> web-batch-container1
Tárolóportok 1 és 65535 között Egész szám 1 és 65535 közötti egész szám <port-number> 443
DNS-névcímke 5-63 Kis- és nagybetűk megkülönböztetése nélkül Alfanumerikus és kötőjel bárhol, az első vagy az utolsó karakter kivételével <name> frontend-site1
Környezeti változó 1–63 Kis- és nagybetűk megkülönböztetése nélkül Alfanumerikus és aláhúzásjel (_) az első vagy utolsó karakter kivételével bárhol <name> MY_VARIABLE
Kötet neve 5-63 Kisbetűs Alfanumerikus és kötőjelek az első vagy az utolsó karakter kivételével bárhol. Nem tartalmazhat két egymást követő kötőjelet. <name> batch-output-volume

1 A tárolócsoportok nevének korlátozása, ha nincs megadva a tárolópéldánytól függetlenül, például parancstelepítések esetén az container create .

A rendszerkép operációsrendszer-verziója nem támogatott

Ha olyan képet ad meg, amelyet Azure Container Instances nem támogat, a OsVersionNotSupported rendszer hibát ad vissza. A hiba a következőhöz hasonló, ahol {0} az üzembe helyezni kívánt rendszerkép neve látható:

{
  "error": {
    "code": "OsVersionNotSupported",
    "message": "The OS version of image '{0}' is not supported."
  }
}

Ez a hiba leggyakrabban akkor fordul elő, ha Windows Semi-Annual Channel 1709-es vagy 1803-es kiadásán alapuló rendszerképeket helyez üzembe, amelyek nem támogatottak. A Azure Container Instances támogatott Windows képeivel kapcsolatban tekintse meg a gyakori kérdéseket.

Nem sikerült lekérni a rendszerképet

Ha Azure Container Instances kezdetben nem tudja lekérni a rendszerképet, egy ideig újrapróbálkozás. Ha a rendszerkép-lekérési művelet továbbra is sikertelen, az ACI végül meghiúsul az üzembe helyezés során, és hibaüzenet jelenhet meg Failed to pull image .

A probléma megoldásához törölje a tárolópéldányt, és próbálkozzon újra az üzembe helyezéssel. Ellenőrizze, hogy a rendszerkép létezik-e a beállításjegyzékben, és hogy helyesen adta-e meg a rendszerkép nevét.

Ha a rendszerképet nem lehet lekéreni, az alábbihoz hasonló események jelennek meg az az container show kimenetében:

"events": [
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "Pulling",
    "type": "Normal"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "Failed to pull image \"mcr.microsoft.com/azuredocs/aci-hellowrld\": rpc error: code 2 desc Error: image t/aci-hellowrld:latest not found",
    "name": "Failed",
    "type": "Warning"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:20+00:00",
    "lastTimestamp": "2017-12-21T22:57:16+00:00",
    "message": "Back-off pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "BackOff",
    "type": "Normal"
  }
],

Az erőforrás nem érhető el hiba

Az Azure különböző regionális erőforrás-terhelése miatt a következő hibaüzenet jelenhet meg egy tárolópéldány üzembe helyezésekor:

The requested resource with 'x' CPU and 'y.z' GB memory is not available in the location 'example region' at this moment. Please retry with a different resource request or in another location.

Ez a hiba azt jelzi, hogy az üzembe helyezési régió nagy terhelése miatt a tárolóhoz megadott erőforrások jelenleg nem foglalhatók le. A probléma megoldásához kövesse az alábbi hibaelhárítási lépések közül egyet vagy többet.

Tárolócsoport futtatókörnyezete során felmerülő problémák

A tároló elkülönített újraindítást kapott explicit felhasználói bevitel nélkül

Két átfogó kategória van arra vonatkozóan, hogy miért lehet újraindulni egy tárolócsoport explicit felhasználói bevitel nélkül. Először is előfordulhat, hogy a tárolók újraindulnak egy alkalmazásfolyamat összeomlása miatt. Az ACI szolgáltatás olyan megfigyelhetőségi megoldások használatát javasolja, mint az Application Elemzések SDK, a tárolócsoport metrikái és a tárolócsoport-naplók, hogy megállapítsa, miért tapasztaltak problémákat az alkalmazás. Másodszor, az ügyfelek a karbantartási események miatt az ACI-infrastruktúra által kezdeményezett újraindításokat tapasztalhatnak. Az alkalmazás rendelkezésre állásának növeléséhez futtasson több tárolócsoportot egy bemeneti összetevő mögött, például egy Application Gateway vagy Traffic Manager.

A tároló folyamatosan kilép és újraindul (nem hosszan futó folyamat)

A tárolócsoportok alapértelmezés szerint az Alwaysújraindítási szabályzatát követik, így a tárolócsoportban lévő tárolók mindig újraindulnak a futtatásuk után. Ha feladatalapú tárolókat szeretne futtatni, előfordulhat, hogy ezt onFailure vagy Never beállításra kell módosítania. Ha az OnFailure értéket adja meg, és továbbra is folyamatos újraindításokat lát, előfordulhat, hogy probléma van a tárolóban végrehajtott alkalmazással vagy szkripttel.

Ha tárolócsoportokat futtat hosszan futó folyamatok nélkül, ismétlődő kilépéseket és újraindításokat láthat olyan rendszerképekkel, mint az Ubuntu vagy az Alpine. Az EXEC-n keresztüli csatlakozás nem fog működni, mivel a tároló nem rendelkezik folyamattal, amely életben tartja azt. A probléma megoldásához a tárolócsoport üzemelő példányához mellékeljen egy, az alábbihoz hasonló indítási parancsot a tároló futásának fenntartása érdekében.

## Deploying a Linux container
az container create -g MyResourceGroup --name myapp --image ubuntu --command-line "tail -f /dev/null"
## Deploying a Windows container
az container create -g myResourceGroup --name mywindowsapp --os-type Windows --image mcr.microsoft.com/windows/servercore:ltsc2019
 --command-line "ping -t localhost"

Az Container Instances API és a Azure Portal tartalmaz egy tulajdonságotrestartCount. A tároló újraindításainak számának ellenőrzéséhez használhatja az az container show parancsot az Azure CLI-ben. A következő példakimenetben (amely rövidség kedvéért csonkolt) a kimenet végén láthatja a restartCount tulajdonságot.

...
 "events": [
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:06+00:00",
     "lastTimestamp": "2017-11-13T21:20:06+00:00",
     "message": "Pulling: pulling image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Pulled: Successfully pulled image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Created: Created container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Started: Started container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   }
 ],
 "previousState": null,
 "restartCount": 0
...
}

Megjegyzés

A Linux-disztribúciók legtöbb tárolólemezképe alapértelmezett parancsként beállít egy rendszerhéjat, például a basht. Mivel a rendszerhéj önmagában nem hosszú ideig futó szolgáltatás, ezek a tárolók azonnal kilépnek, és újraindítási hurokba kerülnek az alapértelmezett Always újraindítási szabályzattal konfigurálva.

A tároló indítása hosszú időt vesz igénybe

Az Azure Container Instances tároló indítási idejéhez hozzájáruló három elsődleges tényező a következő:

Windows képek további szempontokat is figyelembe veendők.

Képméret

Ha a tároló elindítása hosszú időt vesz igénybe, de végül sikerül, először vizsgálja meg a tárolólemezkép méretét. Mivel Azure Container Instances igény szerint lekéri a tárolólemezképet, a megjelenő indítási idő közvetlenül kapcsolódik a méretéhez.

A tárolólemezkép méretét a docker images Docker parancssori felületének parancsával tekintheti meg:

$ docker images
REPOSITORY                                    TAG       IMAGE ID        CREATED          SIZE
mcr.microsoft.com/azuredocs/aci-helloworld    latest    7367f3256b41    15 months ago    67.6MB

A képméretek kis méretűek tartásának kulcsa annak biztosítása, hogy a végső lemezkép ne tartalmazzon semmit, amire futásidőben nincs szükség. Ennek egyik módja a többszakaszos buildek. A többszakaszos buildek megkönnyítik annak biztosítását, hogy a végső lemezkép csak az alkalmazáshoz szükséges összetevőket tartalmazza, a buildeléskor szükséges további tartalmakat nem.

Kép helye

A rendszerkép lekérésének a tároló indítási idejére gyakorolt hatásának csökkentésére az is lehetséges, ha a tárolólemezképet ugyanabban a régióban üzemelteti Azure Container Registry, ahol tárolópéldányokat kíván üzembe helyezni. Ez lerövidíti a tárolólemezkép által igényelt hálózati útvonalat, ami jelentősen lerövidíti a letöltési időt.

Gyorsítótárazott képek

Azure Container Instances gyorsítótárazási mechanizmussal felgyorsítja a tároló indítási idejét a közös Windows alaprendszerképekre épülő rendszerképek esetében, beleértve a nanoserver:1809, servercore:ltsc2019és servercore:1809a . Gyakran használt Linux-rendszerképek, például ubuntu:1604 gyorsítótárazva alpine:3.6 . Ne használja a latest címkét Windows és Linux rendszerképek esetében is. Tekintse át a Container Registry rendszerképcímkéinek ajánlott eljárásait útmutatásért. A gyorsítótárazott képek és címkék naprakész listájához használja a Gyorsítótárazott képek LISTázása API-t .

Megjegyzés

A Windows Server 2019-alapú rendszerképek Azure Container Instances előzetes verzióban használhatók.

Windows tárolók lassú hálózati készültsége

A kezdeti létrehozáskor előfordulhat, hogy Windows tárolók legfeljebb 30 másodpercig (ritka esetekben hosszabb ideig) nem rendelkeznek bejövő vagy kimenő kapcsolattal. Ha a tárolóalkalmazásnak internetkapcsolatra van szüksége, adjon hozzá késleltetési és újrapróbálkozási logikát, hogy 30 másodpercig engedélyezhesse az internetkapcsolatot. A kezdeti beállítás után a tárolóhálózatnak megfelelően kell folytatódnia.

Nem lehet csatlakozni a mögöttes Docker API-hoz, és nem futtathatók emelt szintű tárolók

Azure Container Instances nem teszi elérhetővé a tárolócsoportokat üzemeltető mögöttes infrastruktúrához való közvetlen hozzáférést. Ez magában foglalja a tároló gazdagépén futó Docker API-hoz való hozzáférést és a kiemelt tárolók futtatását. Ha Docker-interakcióra van szüksége, tekintse meg a REST referenciadokumentációját , hogy lássa, mit támogat az ACI API. Ha valami hiányzik, küldjön egy kérést az ACI visszajelzési fórumain.

Előfordulhat, hogy a tárolócsoport IP-címe nem érhető el az eltérő portok miatt

Azure Container Instances még nem támogatja a portleképezést, mint a szokásos Docker-konfiguráció. Ha úgy találja, hogy egy tárolócsoport IP-címe nem érhető el, amikor úgy gondolja, hogy az nem érhető el, győződjön meg arról, hogy konfigurálta a tárolórendszerképet, hogy a tulajdonsággal azonos portokat figyeljen a ports tárolócsoportban.

Ha meg szeretné erősíteni, hogy Azure Container Instances figyelheti a tárolólemezképben konfigurált portot, tesztelje a aci-helloworld portot elérhetővé tevő lemezkép üzembe helyezését. Futtassa az aci-helloworld alkalmazást úgy is, hogy a porton figyeljen. aci-helloworld A egy választható környezeti változót PORT fogad el a figyelt alapértelmezett 80-os port felülbírálásához. A 9000-s port teszteléséhez például állítsa be a környezeti változót a tárolócsoport létrehozásakor:

  1. Állítsa be a tárolócsoportot úgy, hogy elérhetővé tegye a 9000-es portot, és adja meg a portszámot a környezeti változó értékeként. A példa a Bash-rendszerhéjhoz van formázva. Ha egy másik rendszerhéjat, például a PowerShellt vagy a parancssort részesíti előnyben, ennek megfelelően módosítania kell a változó-hozzárendelést.

    az container create --resource-group myResourceGroup \
    --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --ip-address Public --ports 9000 \
    --environment-variables 'PORT'='9000'
    
  2. Keresse meg a tárolócsoport IP-címét a parancs kimenetében az container create. Keresse meg az ip értékét.

  3. A tároló sikeres kiépítése után keresse meg a tárolóalkalmazás IP-címét és portját a böngészőben, például: 192.0.2.0:9000.

    Ekkor megjelenik a webalkalmazás "Üdvözöljük Azure Container Instances!" üzenete.

  4. Ha végzett a tárolóval, távolítsa el a az container delete következő paranccsal:

    az container delete --resource-group myResourceGroup --name mycontainer
    

Következő lépések

Megtudhatja, hogyan kérdezheti le a tárolónaplókat és eseményeket a tárolók hibakereséséhez.