A Cron használata a Docker konténereivel – CloudSavvy IT

Avatar Gadam | 2021.01.18. 62 Views 0 Likes 0 Ratings

62 Views 0 Ratings Rate it

[ad_1]

Dokkmunkás

A háttérfeladatok ütemezett futtatása a háttérszolgáltatások alapkövetelménye. A telepítés megszokása egyszerű volt – a feladatokat a szerverén kell meghatároznia crontab és hívd naponta. Nézzük meg, hogyan lehet hasznosítani cron miközben a Dockert használta a telepítéshez.

A szolgáltatásainak tárolása növeli a fejlesztői termelékenységet. Ezzel párhuzamosan elgondolkodtathatja, hogy a hagyományos rendszergazda hogyan viszonyul a Docker-fogalmakhoz. Több lehetősége van a használat során cron Docker konténerekkel, és az alábbiakban az alkalmasság sorrendjében feltárjuk őket. A folytatás előtt győződjön meg arról, hogy elkészítette az alkalmazás Docker-képét.

A Host Crontab használata

A legalapvetőbb, mindig felhasználhatja a cron a Docker Engine-t futtató gazdagép telepítése. Győződjön meg róla cron telepítve van, majd szerkessze a rendszerét crontab mint általában.

Te tudod használni docker exec parancs futtatásához egy meglévő tárolón belül:

*/5 * * * * docker exec example_app_container /example-scheduled-task.sh

Ez csak akkor működik, ha idő előtt biztos lehet a tároló nevében. Általában jobb egy új tárolót létrehozni, amely kizárólag a feladat futtatásához létezik:

*/5 * * * * docker run --rm example_app_image:latest /example-scheduled-task.sh

Öt percenként a rendszere cron A telepítés új Docker-tárolót hoz létre az alkalmazás képe alapján. Docker végrehajtja a /example-scheduled-task.sh szkript a tárolóban. A konténert megsemmisítik (--rm), amint a szkript kilép.

A Cron használata a konténerein belül

A gazdagép használata crontab megtöri a Docker tárolását, mivel az ütemezett feladatok kézi beállításokat igényelnek a rendszeren. Biztosítania kell cron telepítve van minden gazdagépre, amelyre telepít. Bár hasznos lehet a fejlesztésben, meg kell vizsgálni az integrációt cron lehetőség szerint a Dockerised szolgáltatásaiba.

A legnépszerűbb Docker alapképek nem tartalmazzák a cron démon alapértelmezés szerint. Telepítheti a Dockerfile majd regisztrálja jelentkezését crontab.

Először hozzon létre egy újat crontab fájl a kódalapon belül:

*/5 * * * * /usr/bin/sh /example-scheduled-task.sh

Ezután módosítsa a Dockerfile üzembe helyezni cron és regisztrálja a crontab – a következőképpen teheti meg ezt egy Debian-alapú képpel:

RUN apt-get update && apt-get install -y cron
COPY example-crontab /etc/cron.d/example-crontab
RUN chmod 0644 /etc/cron.d/example-crontab &&
    crontab /etc/cron.d/example-crontab

Telepítjük cron és másolja a kódalapunkat crontab bele /etc/cron.d Könyvtár. Ezután módosítanunk kell az engedélyeket a crontab hogy biztosan hozzáférhető legyen cron. Végül használja a crontab parancs a fájl megismerésére a cron démon.

A beállítás befejezéséhez módosítania kell a kép parancsát vagy belépési pontját a fájl elindításához cron démon, amikor a konténerek futni kezdenek. Ezt nem lehet elérni a RUN színpad a Dockerfile mert ezek átmeneti lépések, amelyek nem maradnak fenn a kép felépítési szakaszán túl. A szolgáltatást a réteg felépítéséhez használt mulandó tárolón belül indítanák, nem pedig a kész képet futtató végső tárolókon.

Ha a tárolójának egyetlen feladata a futtatás cron – amelyet az alábbiakban bővebben megbeszélünk – hozzáadhatja ENTRYPOINT ["cron", "-f"] a te Dockerfile hogy előtérben indítsa el. Ha egy másik folyamatot kell tartania az előtérben, például egy webszervert, akkor létre kell hoznia egy dedikált belépési parancsfájlt (pl. ENTRYPOINT ["bash", "init.sh"]), és adjuk hozzá service cron start mint parancsot abban a fájlban.

A Cron elválasztása az alkalmazás szolgáltatásaitól

Az előző szakaszban leírt beállítások megvalósítása robusztusabb megoldást nyújt, mint a gazdagépre támaszkodni crontab. A cron Az alkalmazását kiszolgáló tárolók démonja biztosítja, hogy bárki, aki a Docker képet használja, automatikusan ütemezett feladatokat állítson be.

Ez mégis aggodalmak keveredését eredményezi. A tárolók két felelősséggel járnak: egyrészt az alkalmazás funkcionalitásának biztosítása, másrészt a megtartása cron életben és futtassa az ütemezett feladatokat. Ideális esetben minden tárolónak egy meghatározott funkcionalitási egységet kell biztosítania.

Ahol csak lehetséges, futtassa a cron feladatokat külön tárolóban az alkalmazásához. Ha webes háttérképet hoz létre, ez azt jelentené, hogy az egyik tároló biztosítja a webkiszolgálót, a másik pedig fut cron az előtérben.

E szétválasztás nélkül nem használhat olyan hangszerelőt, mint a Docker Swarm vagy a Kubernetes az alkalmazás többszörös másolatának futtatásához. Mindegyik konténer futna a maga cron démon, az ütemezett feladatok többszöri futtatását okozva. Ezt enyhíteni lehet egy megosztott Docker-kötetbe kötött zárfájlok használatával. Mindazonáltal fenntarthatóbb a gyökérprobléma kezelése és egy külön tároló bevezetése a cron démon.

Általában azt szeretné, ha mindkét tároló az alkalmazás Docker képén alapulna. Mindegyiknek kapcsolatra van szüksége a szolgáltatás Docker köteteihez és hálózataihoz. Ez biztosítja a cron a konténer azonos környezettel rendelkezik az alkalmazási konténerrel, az egyetlen különbség az előtér folyamata.

Ez nem egy gyors és gyors szabály – egyes projektekben az ütemezett feladatok triviális szkriptek lehetnek, amelyek a kódbázistól függetlenül működnek. Ebben az esetben a cron A tároló minimális alapképet használhat, és megszünteti a felesleges perifériás erőforrásokkal való kapcsolatokat.

A telepítés egyik módja külön cron konténer lenne használni docker-compose. Megadnád a cron konténer extra szolgáltatásként. Használhatja az alkalmazás alapképét, felülírva a belépési parancsot a cron démon. Használata docker-compose egyszerűsíti a tároló csatolását az összes szükséges kötethez és hálózathoz.

version: "3"
 
services:
  app:
    image: demo-image:latest
    volumes:
      - data:/app-data
  cron:
    image: demo-image:latest
    entrypoint: /bin/bash
    command: ["cron", "-f"]
    volumes:
      - data:/app-data
 
volumes:
  data:

A fenti példa alapján egy konténer szolgálja az alkalmazásunkat a kép alapértelmezett belépési pontjának felhasználásával. Győződjön meg róla, hogy ez megtörténik-e nem indítsa el a cron démon! A második tároló felülírja a futtatni kívánt kép belépési pontját cron. Amíg a kép még megvan cron telepítve és a crontab konfigurálva, használhatja docker-compose up hogy előhozza az alkalmazásodat.

A Kubernetes Cron Jobs használata

Végül nézzünk meg egy egyszerű példát az ütemezett feladatok futtatására a Kubernetesen belül. A Kubernetes sajátjaival érkezik CronJob erőforrás, amelyet felhasználhat a manifestjeiben.

Nem kell telepítenie cron a képen, vagy speciális tárolókat állíthat be, ha Kubernetes-t használ. Legyen tisztában ezzel CronJob egy béta erőforrás, amely a jövőbeni Kubernetes kiadásokban változhat.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: my-cron
  namespace: my-namespace
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: my-container
              image: my-image:latest
              command: ["/bin/bash", "/my-cron-script.sh"]
          restartPolicy: OnFailure

Új létrehozásához alkalmazza a fenti jegyzéket a fürtjére cron ami futni fog /my-cron-script.sh öt percenként. A gyakoriságot szabályként adják meg cron meghatározása a schedule írja be az erőforrást spec.

Testreszabhatja a ConcurrencyPolicy nak nek ellenőrzik, hogy Kubernetes lehetővé teszi a munkáinak átfedését. Alapértelmezés szerint Allow de megváltoztatható Forbid (megakadályozza, hogy új munkahelyek induljanak, amíg már létezik) vagy Replace (megszüntet egy meglévő munkát, amint egy új megkezdődik).

A Kubernetes beépített erőforrásának használata az ajánlott módszer az ütemezett feladatok kezelésére a fürtökön belül. Könnyen hozzáférhet a munkanaplókhoz, és nem kell aggódnia a tárolók használatra való előkészítésével kapcsolatban cron. Csak egy Docker-képet kell készítenie, amely mindent tartalmaz, amelyre a feladatok futtatásához szüksége van. A Kubernetes az Ön által megadott ütemezés szerint kezeli a konténerpéldányok létrehozását és megsemmisítését.

[ad_2]
Source link