GNU/Linux >> Znalost Linux >  >> Linux

Jak snížit zátěž registru kontejnerů pomocí Quay.io

V tomto příspěvku vám ukážu, jak používat Quay.io k hostování obrázků kontejnerů a jak se vyhnout nadměrnému zdanění registru kontejnerů omezením zbytečných požadavků na obrázky. Používám Buildah, Skopeo a Quay.io, ale tipy na omezení stahování obrázků budou fungovat s jakýmkoliv registrem kontejnerů, který můžete použít.

Na konci listopadu 2020 začal Docker Hub omezovat nebo omezovat počet obrázků kontejnerů, které můžete stahovat anonymně nebo jako Free Docker Hub uživatel. Pokud jste anonymní uživatel, můžete vytáhnout pouze 100 obrázků kontejneru za 6 hodin. Pokud jste uživatelem Free Docker Hub, můžete natáhnout 200 obrázků kontejneru za 6 hodin.

Když provádíme funkční testování kontejnerových nástrojů, na kterých pracujeme, jako jsou Buildah a Podman, tento limit obecně nepředstavuje problém. Když například vytváříte obrázek kontejneru pomocí souboru Containerfile a poté testujete výsledný kontejner, abyste viděli, jak se chová poté, co na něm spustíte konkrétní příkazy, obvykle vytáhnete obrázek hlavního kontejneru zadaný v FROM instrukce v Containerfile jednou. Pokud později znovu sestavíte kontejner od začátku, obvykle znovu použijete již stažený obrázek kontejneru, a proto nenarazíte na pult. V tomto scénáři škrcení nezpůsobuje žádnou bolest, ale vždy je v mé mysli.

Počáteční snížení interakcí Docker Hub

Našli jsme však místo, kde jsme narazili na škrcení na Docker Hub. Ed, můj kolega a jeden z vedoucích QE kontejnerového motoru, pro to vytvořil velmi pěkné řešení. Nejprve trochu pozadí. Před několika měsíci Ed snížil počet případů, kdy jsme načítali obrazy kontejnerů, které používají testy Buildah Continuous Integration (CI), opětovným použitím mezipaměti, kterou již vytvořil Podman. Předtím Buildah CI zneužíval chudé alpine obrázek kontejneru, který se nachází v Docker Hub na docker.io/library bez konce, spolu s fedora , busybox a několik dalších různých obrázků kontejnerů, které je mnohokrát táhnou. Toto schéma předběžného načítání, které Ed vypracoval, nejen urychlilo naše testy, ale také nám umožnilo snížit šířku pásma, kterou jsme používali na Docker Hub.

Navzdory těmto změnám začal Buildah CI v listopadu několikrát denně selhávat s touto chybou:Dosáhli jste limitu rychlosti stahování . Dosažení limitu rychlosti bylo způsobeno tím, kolikrát naše testy CI každý den proběhly. Přestože předběžné načítání snížilo počet, kolikrát Buildah CI potřebovalo k natažení obrázků, CI stále naráželo na omezení Docker Hub.

[ Mohlo by se vám také líbit: Jak implementovat jednoduchý osobní/soukromý registr bitových kopií kontejneru Linux pro interní použití ]

Řešení škrcení

Řešení, které Ed dodal, využívá flexibilitu Buildah a kontejnerové nástroje v repozitáři Containers na GitHubu. Nejprve si Ed vytvořil bezplatný účet na quay.io, zkopíroval tam obrázky a zveřejnil je. Ed si vybral quay.io, protože tam ukládáme spoustu obrázků kontejnerů a je to pro nás výhodné. Přesto to mohlo být místní úložiště obrázků kontejnerů nebo úložiště jiné společnosti.

Jako bonus, quay.io není omezeno jako Docker Hub.

Pomocí nástroje Skopeo zkopírujte počáteční obrázek

Řekněme, že váš projekt vyžaduje alpine a centos:8 snímky. Začali byste vytvořením bezplatného účtu na quay.io s názvem myquayaccountname . Na hostiteli s nainstalovaným Skopeo byste pak spustili:

skopeo login -u myquayaccountname quay.io
skopeo copy --all docker://docker.io/library/alpine:latest docker://quay.io/myquayaccountname/alpine:latest

Poté opakujte a nahraďte alpine:latest s centos:8 a tak dále pro všechny potřebné obrázky.

Nakonfigurujte quay.io

Obrázky jsou nyní na quay.io, ale ve výchozím nastavení jsou soukromé. Chcete-li je zveřejnit, přihlaste se zpět do webového uživatelského rozhraní quay.io a klikněte na název každého obrázku. Tím se dostanete na novou stránku s podrobnostmi o obrázku. Klikněte na ikonu ozubeného kola v dolní části levého navigačního panelu a vyhledejte možnost Zveřejnit tlačítko a stiskněte jej. Budete muset potvrdit OK a poté opakujte pro všechny obrázky s růžovou ikonou zámku.

V našem případě Ed první věc, kterou udělal, bylo stáhnout obrázky kontejnerů, které používáme, z Docker Hub a umístit je do úložiště obrázků kontejneru libpod na quay.io, které vytvořil.

Nakonfigurujte registry.conf pro zrcadlení

Problém omezení jsme vyřešili přesunem těchto obrázků. Nyní jsme však měli problém se změnou stovek, ne-li tisíců odkazů testů na tyto obrázky, aby CI stáhla z quay.io/libpod spíše než docker.io/library . Tato potřebná změna byla dokonalou ukázkou flexibility, kterou kontejnerové nástroje poskytují. Ed to řešil relativně malou změnou v konfiguraci, místo aby globálně měnil všechny testy.

Zde je to, co Ed vymyslel. Když Buildah hledá obrázek kontejneru, není napevno zakódován tak, aby se dal stáhnout z docker.io. Místo toho čte /etc/containers/registries.conf a určuje, ze kterého úložiště bitových kopií kontejneru má Buildah stahovat.

Ed jednoduše změnil tento soubor tak, že quay.io/libpod je kontaktován vždy, když testy hledaly docker.io/library . Pomocí našeho příkladu výše byste přidali následující řádky do /etc/containers/registries.conf na všech systémech, kde chcete používat mezipaměť:

toml
[[registry]]
prefix=" docker.io/library"
location=" quay.io/myquayaccountname"

Všechny následující podman pull alpine příkazy se načítají z vašeho zrcadla. Změnu, kterou Ed pro Podmana provedl, můžete vidět zde v této žádosti o stažení.

Chcete-li dále zvýraznit schopnosti zrcadlení v projektu kontejnerů/obrázků, který Buildah používá, můžete nastavit zrcadlení pro obrázky kontejnerů, které vám umožní stáhnout starý název z jiného registru. Zrcadlení bylo původně přidáno pro podporu odpojených prostředí. Prostředí bez připojení k internetu se softwarem, jako je OpenShift, často nemohou stahovat obrázky z nelokálních registrů, takže uživatelům umožňujeme zrcadlit obrázky v interních registrech, aniž by museli měnit software.

Zde je úryvek s dalšími informacemi z containers-registries.conf soubor, který je součástí container/image projekt:

$ man containers-registries.conf

   Remapping and mirroring registries
       The user-specified image reference is, primarily, a "logical" image  name,  always
       used for naming the image.  By default, the image reference also directly specifies
       the registry and repository to use, but the following options can be used to  redi‐
       rect  the  underlying  accesses to different registry servers or locations (e.g., to
       support configurations with no access to the  internet  without  having  to  change
       Dockerfiles, or to add redundancy).

Upozornění :Tento postup vytvoří jednorázovou kopii obrázků kontejneru. Váš obrázek v mezipaměti magicky nevyzvedne bezpečnostní opravy zaslané na docker.io. (Ani nezachytí náhodný vandalismus, jako jsou odstraněné binární soubory nebo jiné převratné změny – nenechte mě začít.)

Další práce

S ohledem na upozornění je nyní údržba obrazu na vás a můžete zvážit přidání příkazů Skopeo ke zkopírování obrazu na začátek vaší testovací procedury. Dalším možným řešením je povolení veřejného zrcadla, jako je Google Cloud Registry (GCR), nebo možná další úprava registries.conf soubor pro nastavení více zrcadel. A co je ještě lepší, toto se pravděpodobně skvěle hodí pro příkaz skopeo-sync, protože má pěkné CLI a lze jej použít se souborem YAML, který nabízí širokou škálu konfiguračních možností.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]

Sbalit

Existují různé způsoby, jak vyřešit zavedený škrtící Docker Hub, ale metoda, kterou Ed použil, byla rychlá, bezbolestná a rychle vrátila naše CI zpět online. Nyní, když máme prostor pro dýchání, můžeme pracovat na úplnějším řešení.

S touto změnou již testy Buildah nepřekračují limit a nezasahují do omezení z Docker Hub, takže problém s omezením je vyřešen.


Linux
  1. Jak zálohovat svůj web pomocí osobního úložiště FTP

  2. Jak zálohovat a obnovit svůj web pomocí nástroje pro zálohování LCN

  3. Jak otestovat svůj web pomocí hostitelského souboru

  1. Jak změnit barvu vašeho terminálu Linux

  2. Jak analyzovat a porovnávat obrázky kontejnerů pomocí Container-diff

  3. Jak změnit verzi PHP ve vaší doméně pomocí cPanel?

  1. Jak vyčistit data v příkazovém řádku

  2. Jak spravovat registry kontejnerů Linux

  3. Jak ukládat grafy kormidla v Azure Container Registry