షెడ్యూల్‌లో నేపథ్య పనులను అమలు చేయడం బ్యాకెండ్ సేవల యొక్క ప్రామాణిక అవసరం. కాన్ఫిగరేషన్ చాలా సులభం: మీరు మీ కార్యకలాపాలను మీ సర్వర్‌లో నిర్వచించారు crontab మరియు ఒక రోజు కాల్. మీరు ఎలా ఉపయోగించవచ్చో చూద్దాం cron విస్తరణ కోసం డాకర్ ఉపయోగిస్తున్నప్పుడు.

సేవల కంటైనరైజేషన్ డెవలపర్ ఉత్పాదకతను పెంచుతుంది. అదే సమయంలో, డాకర్ కాన్సెప్ట్‌లకు మ్యాపింగ్ చేయడం గురించి సాంప్రదాయ సిసాడ్మిన్ ఎలా ఉంటుందో అని మీరు ఆశ్చర్యపోతారు. ఉపయోగిస్తున్నప్పుడు మీకు అనేక ఎంపికలు ఉన్నాయి cron డాకర్ కంటైనర్లతో మరియు సముచితత కోసం మేము వాటిని క్రింద అన్వేషిస్తాము. కొనసాగడానికి ముందు, మీరు మీ అప్లికేషన్ యొక్క డాకర్ చిత్రాన్ని సృష్టించారని నిర్ధారించుకోండి.

హోస్ట్ యొక్క క్రోంటాబ్ ఉపయోగించి

దాని సరళమైన రూపంలో, మీరు ఎల్లప్పుడూ ఉపయోగించవచ్చు cron డాకర్ ఇంజిన్ నడుస్తున్న హోస్ట్‌ను ఇన్‌స్టాల్ చేస్తోంది. నిర్ధారించుకోవడానికి cron వ్యవస్థాపించబడి, ఆపై సిస్టమ్ ఫైల్‌ను సవరించండి crontab సాధారణం.

మీరు ఉపయోగించవచ్చు docker exec ఇప్పటికే ఉన్న కంటైనర్ లోపల ఆదేశాన్ని అమలు చేయడానికి:

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

మీరు ముందే కంటైనర్ పేరు గురించి ఖచ్చితంగా చెప్పగలిగితే మాత్రమే ఇది పని చేస్తుంది. విధిని నిర్వహించడానికి మాత్రమే ఉన్న క్రొత్త కంటైనర్‌ను సృష్టించడం సాధారణంగా మంచిది:

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

ప్రతి ఐదు నిమిషాలకు, మీ సిస్టమ్ cron సంస్థాపన మీ అనువర్తన చిత్రాన్ని ఉపయోగించి క్రొత్త డాకర్ కంటైనర్‌ను సృష్టిస్తుంది. డాకర్ ఫైల్ను అమలు చేస్తుంది /example-scheduled-task.sh కంటైనర్ లోపల స్క్రిప్ట్. కంటైనర్ నాశనం అవుతుంది (--rm) స్క్రిప్ట్ పూర్తయిన తర్వాత.

మీ కంటైనర్లలో క్రాన్ ఉపయోగించడం

హోస్ట్ ఉపయోగించి crontab షెడ్యూల్ చేసిన పనులకు సిస్టమ్‌లో మాన్యువల్ సెటప్ అవసరం కాబట్టి డాకర్ కంటైనరైజేషన్‌ను ఆపుతుంది. మీరు నిర్ధారించుకోవాలి cron ఇది మీరు అమలు చేసే ప్రతి హోస్ట్‌లో ఇన్‌స్టాల్ చేయబడుతుంది. ఇది అభివృద్ధిలో ఉపయోగకరంగా ఉంటుంది, మీరు ఏకీకృతం చేయడానికి ప్రయత్నించాలి cron మీ డాకరైజ్డ్ సేవల్లో సాధ్యమైనప్పుడల్లా.

అత్యంత ప్రాచుర్యం పొందిన డాకర్ బేస్ చిత్రాలలో ఇవి లేవు cron అప్రమేయంగా డెమోన్. మీరు దీన్ని మీ ఫైల్ లోపల ఇన్‌స్టాల్ చేయవచ్చు Dockerfile ఆపై మీ దరఖాస్తును నమోదు చేయండి crontab.

మొదట, క్రొత్త ఫైల్‌ను సృష్టించండి crontab మీ కోడ్ బేస్ లో ఫైల్:

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

అప్పుడు, మీ ఫైల్‌ను సవరించండి Dockerfile ఇన్‌స్టాల్ చేయడానికి cron మరియు మీది నమోదు చేయండి crontab – డెబియన్ ఆధారిత చిత్రంతో మీరు దీన్ని ఎలా చేయవచ్చో ఇక్కడ ఉంది:

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

మేము ఇన్‌స్టాల్ చేసాము cron మరియు మా కోడ్‌బేస్‌ను కాపీ చేయండి crontab లో /etc/cron.d డైరెక్టరీ. తరువాత, మనపై అనుమతులను మార్చాలి crontab ఇది ప్రాప్యత అని నిర్ధారించుకోవడానికి cron. చివరగా, ఫైల్ను ఉపయోగించండి crontab ఫైల్‌ను తెలిసేలా ఆదేశించండి cron దెయ్యం.

ఈ సెటప్‌ను పూర్తి చేయడానికి, ఫైల్‌ను ప్రారంభించడానికి మీరు కమాండ్ లేదా ఇమేజ్ ఎంట్రీ పాయింట్‌ను మార్చాలి cron కంటైనర్లు పనిచేయడం ప్రారంభించినప్పుడు డెమోన్. మీరు దీన్ని ఫైల్‌తో సాధించలేరు RUN మీ దశ Dockerfile ఎందుకంటే ఇవి తాత్కాలిక దశలు, ఇవి చిత్ర సృష్టి దశకు మించి ఉండవు. పూర్తి చేసిన చిత్రాన్ని నడుపుతున్న తుది కంటైనర్లలో కాకుండా, పొరను సృష్టించడానికి ఉపయోగించే తాత్కాలిక కంటైనర్ లోపల ఈ సేవ ప్రారంభించబడుతుంది.

మీ కంటైనర్ యొక్క ఏకైక కార్యాచరణ ఉంటే cron – మేము తరువాత మాట్లాడతాము – మీరు జోడించవచ్చు ENTRYPOINT ["cron", "-f"] మీ Dockerfile దీన్ని ముందు ప్రక్రియగా ప్రారంభించడానికి. మీరు వెబ్ సర్వర్ వంటి మరొక ప్రక్రియను ముందు భాగంలో ఉంచాల్సిన అవసరం ఉంటే, మీరు ప్రత్యేకమైన ఎంట్రీ పాయింట్ స్క్రిప్ట్‌ను సృష్టించాలి (ఉదా. ENTRYPOINT ["bash", "init.sh"]) మరియు జోడించండి service cron start ఆ ఫైల్‌లోని ఆదేశంగా.

అప్లికేషన్ సేవల నుండి క్రాన్ వేరు

మునుపటి విభాగంలో వివరించిన ఆకృతీకరణను అమలు చేయడం హోస్ట్ కంటే బలమైన పరిష్కారాన్ని అందిస్తుంది crontab. ఫైల్ను జోడించడం ద్వారా cron మీ అనువర్తనానికి సేవలు అందించే కంటైనర్లకు డీమన్ మీ డాకర్ చిత్రాన్ని ఉపయోగించే ఎవరైనా స్వయంచాలకంగా షెడ్యూల్ చేసిన పనులను కలిగి ఉన్నారని నిర్ధారిస్తుంది.

అయినప్పటికీ, ఇది ఇప్పటికీ ఆందోళనల మిశ్రమానికి దారితీస్తుంది. మీ కంటైనర్లకు రెండు బాధ్యతలు ఉన్నాయి: మొదట, అప్లికేషన్ కార్యాచరణను అందించడం మరియు రెండవది, దానిని నిర్వహించడం cron వివో మరియు షెడ్యూల్ చేసిన పనులను చేయండి. ఆదర్శవంతంగా, ప్రతి కంటైనర్ కార్యాచరణ యొక్క నిర్దిష్ట యూనిట్‌ను అందించాలి.

సాధ్యమైన చోట, మీరు మీదే చేయాలి cron మీ అప్లికేషన్ కోసం ప్రత్యేక కంటైనర్‌లో కార్యకలాపాలు. మీరు వెబ్ బ్యాకెండ్‌ను నిర్మిస్తుంటే, మీ వెబ్ సర్వర్‌ను అందించడానికి ఒక కంటైనర్ మరియు మరొకటి నడుస్తుంది cron ముందుభాగంలో.

ఈ విభజన లేకుండా, మీ అప్లికేషన్ యొక్క బహుళ ప్రతిరూపాలను అమలు చేయడానికి మీరు డాకర్ స్వార్మ్ లేదా కుబెర్నెట్స్ వంటి ఆర్కెస్ట్రాటర్‌ను ఉపయోగించలేరు. ప్రతి కంటైనర్ స్వయంగా పనిచేస్తుంది cron డెమోన్, షెడ్యూల్ చేసిన పనులు చాలాసార్లు అమలు కావడానికి కారణమవుతాయి. భాగస్వామ్య డాకర్ వాల్యూమ్‌తో అనుబంధించబడిన లాక్ ఫైల్‌లను ఉపయోగించడం ద్వారా దీన్ని తగ్గించవచ్చు. ఏదేమైనా, సమస్యను దాని మూలంలో పరిష్కరించడానికి మరియు ప్రత్యేకమైన కంటైనర్‌ను ప్రవేశపెట్టడం మరింత నిర్వహించదగినది cron దెయ్యం.

సాధారణంగా, మీరు రెండు కంటైనర్లు మీ అప్లికేషన్ యొక్క డాకర్ ఇమేజ్ ఆధారంగా ఉండాలని కోరుకుంటారు. వాటిలో ప్రతిదానికి మీ సేవ యొక్క డాకర్ వాల్యూమ్‌లు మరియు నెట్‌వర్క్‌లకు కనెక్షన్లు అవసరం. ఇది నిర్ధారిస్తుంది cron కంటైనర్ అనువర్తన కంటైనర్‌తో సమానమైన వాతావరణాన్ని కలిగి ఉంది, ముందు తేడా మాత్రమే తేడా.

ఇది కఠినమైన మరియు వేగవంతమైన నియమం కాదు – కొన్ని ప్రాజెక్టులలో, షెడ్యూల్ చేసిన పనులు కోడ్ బేస్‌తో సంబంధం లేకుండా పని చేసే చిన్నవిషయమైన స్క్రిప్ట్‌లు కావచ్చు. ఆ సందర్భంలో, ది cron కంటైనర్ కనీస బేస్ ఇమేజ్‌ని ఉపయోగించవచ్చు మరియు పరిధీయ వనరులకు అనవసరమైన కనెక్షన్‌లను తొలగించగలదు.

ఫైల్‌ను కాన్ఫిగర్ చేయడానికి ఒక మార్గం cron కంటైనర్ ఉపయోగించబడుతుంది docker-compose. మీరు ఫైల్ను నిర్వచిస్తారు cron అదనపు సేవగా కంటైనర్. ఫైల్‌ను ప్రారంభించడానికి ఎంట్రీపాయింట్ ఆదేశాన్ని భర్తీ చేయడం ద్వారా మీరు అప్లికేషన్ బేస్ ఇమేజ్‌ని ఉపయోగించవచ్చు cron దెయ్యం. ఉపయోగించి docker-compose కంటైనర్‌ను మీకు అవసరమైన ఏదైనా షేర్డ్ వాల్యూమ్ మరియు నెట్‌వర్క్‌కు కనెక్ట్ చేయడం కూడా సులభం చేస్తుంది.

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:

మునుపటి ఉదాహరణను ఉపయోగించి, చిత్రంలోని డిఫాల్ట్ ఎంట్రీ పాయింట్‌ను ఉపయోగించి కంటైనర్ మా అనువర్తనానికి సేవలు అందిస్తుంది. అది ఉండేలా చూసుకోండి కాదు ప్రారంభించండి cron దెయ్యం! రెండవ కంటైనర్ అమలు చేయవలసిన చిత్రం యొక్క ఎంట్రీ పాయింట్‌ను భర్తీ చేస్తుంది cron. చిత్రం ఉన్నంత కాలం cron వ్యవస్థాపించబడింది మరియు మీదే crontab కాన్ఫిగర్ చేయబడింది, మీరు ఉపయోగించవచ్చు docker-compose up మీ అప్లికేషన్ చూడటానికి.

కుబెర్నెట్స్ క్రాన్ జాబ్స్ ఉపయోగించడం

చివరగా, కుబెర్నెట్స్‌లో షెడ్యూల్ చేసిన పనులను అమలు చేయడానికి ఒక సాధారణ ఉదాహరణను పరిశీలిద్దాం. కుబెర్నెటెస్ దాని స్వంతదానితో వస్తుంది CronJob మీ మానిఫెస్ట్ ఫైళ్ళలో మీరు ఉపయోగించగల వనరు.

ఇది వ్యవస్థాపించాల్సిన అవసరం లేదు cron మీరు కుబెర్నెట్‌లను ఉపయోగిస్తే మీ చిత్రంలో లేదా ప్రత్యేకమైన కంటైనర్‌లను సెటప్ చేయండి. దయచేసి గమనించండి CronJob కుబెర్నెట్ యొక్క భవిష్యత్తు సంస్కరణల్లో మారగల బీటా వనరు.

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

క్రొత్త ఫైల్‌ను సృష్టించడానికి పై మానిఫెస్ట్ ఫైల్‌ను మీ క్లస్టర్‌కు వర్తించండి cron ప్రదర్శించబడే పని /my-cron-script.sh ప్రతి ఐదు నిమిషాలకు మీ కంటైనర్ లోపల. ఫ్రీక్వెన్సీ రెగ్యులర్ గా ఇవ్వబడుతుంది cron యొక్క నిర్వచనం schedule వనరును టైప్ చేయండి spec.

మీరు ఫైల్‌ను అనుకూలీకరించవచ్చు ConcurrencyPolicy మీ ఉద్యోగాలను అతివ్యాప్తి చేయడానికి కుబెర్నెట్స్ అనుమతిస్తుందో లేదో తనిఖీ చేయడానికి. డిఫాల్ట్ Allow కానీ మార్చవచ్చు Forbid (ఇప్పటికే ఉన్నప్పుడే కొత్త ఉద్యోగాలు ప్రారంభించడాన్ని నిరోధిస్తుంది) లేదా Replace (క్రొత్తది ప్రారంభమైన వెంటనే ఉన్న ఉద్యోగాన్ని ముగుస్తుంది).

ఇంటిగ్రేటెడ్ కుబెర్నెట్ వనరులను ఉపయోగించడం అనేది సమూహాలలో షెడ్యూల్ చేసిన పనులను నిర్వహించడానికి సిఫార్సు చేయబడిన మార్గం. మీరు ఉద్యోగ లాగ్‌లను సులభంగా యాక్సెస్ చేయవచ్చు మరియు ఉపయోగం కోసం మీ కంటైనర్‌లను సిద్ధం చేయడం గురించి ఆందోళన చెందాల్సిన అవసరం లేదు cron. మీరు మీ పనులను అమలు చేయడానికి అవసరమైన ప్రతిదాన్ని కలిగి ఉన్న డాకర్ చిత్రాన్ని రూపొందించాలి. కుబెర్నెటీస్ పేర్కొన్న షెడ్యూల్ ప్రకారం కంటైనర్ ఉదంతాల సృష్టి మరియు నాశనాన్ని నిర్వహిస్తుంది.

Source link