కుబెర్నెటెస్కు డిప్లయి చేయడంలో మొదటి దశ మీ అప్లికేషన్ను కంటైనర్లో ఉంచడం. ఈ సిరీస్లో, మీరు చిన్న, సురక్షితమైన కంటైనర్ చిత్రాన్ని ఎలా సృష్టించవచ్చో మేము పరిశీలిస్తాము.
డాకర్కి ధన్యవాదాలు, కంటైనర్ చిత్రాలను రూపొందించడం అంత సులభం కాదు. బేస్ ఇమేజ్ను పేర్కొనండి, మీ మార్పులను జోడించండి మరియు కంటైనర్ను సృష్టించండి.
ప్రారంభించడానికి ఈ టెక్నిక్ గొప్పది అయితే, డిఫాల్ట్ బేస్ ఇమేజ్లను ఉపయోగించడం వలన దుర్బలత్వాలతో నిండిన పెద్ద చిత్రాలతో అసురక్షిత పనికి దారి తీస్తుంది.
అదనంగా, డాకర్లోని చాలా చిత్రాలు బేస్ ఇమేజ్ కోసం డెబియన్ లేదా ఉబుంటుని ఉపయోగిస్తాయి మరియు ఇది అద్భుతమైన అనుకూలత మరియు సులభమైన అనుకూలీకరణను అందిస్తుంది (డాకర్ ఫైల్ రెండు లైన్ల కోడ్ మాత్రమే తీసుకుంటుంది), బేస్ ఇమేజ్లు మీ కంటైనర్కు వందల మెగాబైట్ల అదనపు లోడ్ను జోడించగలవు. ఉదాహరణకు, Go "hello-world" అప్లికేషన్ కోసం ఒక సాధారణ node.js ఫైల్ దాదాపు 700 మెగాబైట్లు ఉంటుంది, అయితే మీ అసలు అప్లికేషన్ పరిమాణం కొన్ని మెగాబైట్లు మాత్రమే.
కాబట్టి ఈ అదనపు పనిభారం అంతా డిజిటల్ స్పేస్ను వృధా చేస్తుంది మరియు భద్రతాపరమైన లోపాలు మరియు బగ్ల కోసం గొప్ప దాగి ఉంది. కాబట్టి కంటైనర్ ఇమేజ్ పరిమాణాన్ని తగ్గించడానికి రెండు మార్గాలను చూద్దాం.
మొదటిది చిన్న బేస్ చిత్రాలను ఉపయోగించడం, రెండవది బిల్డర్ నమూనాను ఉపయోగించడం. మీ కంటైనర్ పరిమాణాన్ని తగ్గించడానికి చిన్న బేస్ చిత్రాలను ఉపయోగించడం బహుశా సులభమైన మార్గం. చాలా మటుకు, మీరు ఉపయోగిస్తున్న భాష లేదా స్టాక్ డిఫాల్ట్ ఇమేజ్ కంటే చాలా చిన్నదైన అసలైన అప్లికేషన్ ఇమేజ్ని అందిస్తుంది. మన node.js కంటైనర్ను పరిశీలిద్దాం.
డాకర్లో డిఫాల్ట్గా, నోడ్:8 బేస్ ఇమేజ్ పరిమాణం 670 MB, మరియు నోడ్: 8-ఆల్పైన్ ఇమేజ్ పరిమాణం 65 MB మాత్రమే, అంటే 10 రెట్లు చిన్నది. చిన్న ఆల్పైన్ బేస్ చిత్రాన్ని ఉపయోగించడం ద్వారా, మీరు మీ కంటైనర్ పరిమాణాన్ని గణనీయంగా తగ్గిస్తారు. ఆల్పైన్ అనేది చిన్న మరియు తేలికైన Linux పంపిణీ, ఇది డాకర్ వినియోగదారులలో బాగా ప్రాచుర్యం పొందింది ఎందుకంటే ఇది కంటైనర్లను చిన్నగా ఉంచేటప్పుడు అనేక అప్లికేషన్లకు అనుకూలంగా ఉంటుంది. ప్రామాణిక డాకర్ "నోడ్" చిత్రం వలె కాకుండా, "node:alpine" చాలా సేవా ఫైల్లు మరియు ప్రోగ్రామ్లను తొలగిస్తుంది, మీ అప్లికేషన్ను అమలు చేయడానికి సరిపోయే వాటిని మాత్రమే వదిలివేస్తుంది.
చిన్న బేస్ ఇమేజ్కి తరలించడానికి, కొత్త బేస్ ఇమేజ్తో పని చేయడం ప్రారంభించడానికి డాకర్ఫైల్ను అప్డేట్ చేయండి:
ఇప్పుడు, పాత ఆన్బిల్డ్ ఇమేజ్లా కాకుండా, మీరు మీ కోడ్ను కంటైనర్లోకి కాపీ చేసి, ఏదైనా డిపెండెన్సీలను ఇన్స్టాల్ చేయాలి. కొత్త డాకర్ఫైల్లో, కంటైనర్ నోడ్:ఆల్పైన్ ఇమేజ్తో ప్రారంభమవుతుంది, ఆపై కోడ్ కోసం డైరెక్టరీని సృష్టిస్తుంది, NPM ప్యాకేజీ మేనేజర్ని ఉపయోగించి డిపెండెన్సీలను ఇన్స్టాల్ చేస్తుంది మరియు చివరకు server.jsని అమలు చేస్తుంది.
ఈ అప్గ్రేడ్ ఫలితంగా 10 రెట్లు చిన్న పరిమాణంలో ఉన్న కంటైనర్ వస్తుంది. మీ ప్రోగ్రామింగ్ లాంగ్వేజ్ లేదా స్టాక్లో బేస్ ఇమేజ్ రిడక్షన్ ఫంక్షనాలిటీ లేకపోతే, ఆల్పైన్ లైనక్స్ ఉపయోగించండి. ఇది కంటైనర్ యొక్క కంటెంట్లను పూర్తిగా నిర్వహించగల సామర్థ్యాన్ని కూడా అందిస్తుంది. చిన్న కంటైనర్లను త్వరగా సృష్టించడానికి చిన్న బేస్ చిత్రాలను ఉపయోగించడం గొప్ప మార్గం. అయితే బిల్డర్ ప్యాటర్న్ని ఉపయోగించి ఇంకా ఎక్కువ తగ్గింపును సాధించవచ్చు.
అన్వయించబడిన భాషలలో, సోర్స్ కోడ్ మొదట వ్యాఖ్యాతకు పంపబడుతుంది మరియు తర్వాత నేరుగా అమలు చేయబడుతుంది. కంపైల్ చేయబడిన భాషలలో, సోర్స్ కోడ్ మొదట కంపైల్డ్ కోడ్గా మార్చబడుతుంది. అయినప్పటికీ, సంకలనం తరచుగా కోడ్ను అమలు చేయడానికి అవసరం లేని సాధనాలను ఉపయోగిస్తుంది. మీరు తుది కంటైనర్ నుండి ఈ సాధనాలను పూర్తిగా తీసివేయవచ్చని దీని అర్థం. మీరు దీని కోసం బిల్డర్ నమూనాను ఉపయోగించవచ్చు.
కోడ్ మొదటి కంటైనర్లో సృష్టించబడింది మరియు సంకలనం చేయబడింది. కంపైల్ చేయబడిన కోడ్ ఆ కోడ్ను కంపైల్ చేయడానికి అవసరమైన కంపైలర్లు మరియు సాధనాలు లేకుండా తుది కంటైనర్లో ప్యాక్ చేయబడుతుంది. ఈ ప్రక్రియ ద్వారా గో అప్లికేషన్ను రన్ చేద్దాం. ముందుగా, మేము ఆన్బిల్డ్ ఇమేజ్ నుండి ఆల్పైన్ లైనక్స్కి తరలిస్తాము.
కొత్త డాకర్ఫైల్లో, కంటైనర్ గోలాంగ్:ఆల్పైన్ చిత్రంతో ప్రారంభమవుతుంది. ఇది కోడ్ కోసం డైరెక్టరీని సృష్టిస్తుంది, దానిని సోర్స్ కోడ్లోకి కాపీ చేస్తుంది, ఆ సోర్స్ కోడ్ను రూపొందించి, అప్లికేషన్ను రన్ చేస్తుంది. ఈ కంటైనర్ ఆన్బిల్డ్ కంటైనర్ కంటే చాలా చిన్నది, అయితే ఇది ఇప్పటికీ మనకు నిజంగా అవసరం లేని కంపైలర్ మరియు ఇతర Go టూల్స్ను కలిగి ఉంది. కాబట్టి కంపైల్ చేసిన ప్రోగ్రామ్ను సంగ్రహించి దాని స్వంత కంటైనర్లో ఉంచుదాం.
మీరు ఈ డాకర్ ఫైల్లో ఏదో వింతని గమనించవచ్చు: ఇందులో రెండు FROM లైన్లు ఉన్నాయి. ఈ దశకు పేరు పెట్టడానికి AS కీవర్డ్ని ఉపయోగిస్తుంది తప్ప మొదటి 4 లైన్ విభాగం మునుపటి డాకర్ఫైల్ వలె కనిపిస్తుంది. కొత్త ఇమేజ్ని ప్రారంభించడానికి తదుపరి విభాగంలో కొత్త FROM లైన్ ఉంది, ఇక్కడ గోలాంగ్:ఆల్పైన్ ఇమేజ్కి బదులుగా మేము రా ఆల్పైన్ని బేస్ ఇమేజ్గా ఉపయోగిస్తాము.
రా ఆల్పైన్ లైనక్స్లో ఏ SSL ప్రమాణపత్రాలు ఇన్స్టాల్ చేయబడలేదు, దీని వలన HTTPS ద్వారా చాలా API కాల్లు విఫలమవుతాయి, కాబట్టి కొన్ని రూట్ CA ప్రమాణపత్రాలను ఇన్స్టాల్ చేద్దాం.
ఇప్పుడు సరదా భాగం వస్తుంది: కంపైల్ చేసిన కోడ్ను మొదటి కంటైనర్ నుండి రెండవదానికి కాపీ చేయడానికి, మీరు రెండవ విభాగంలోని 5వ లైన్లో ఉన్న COPY ఆదేశాన్ని ఉపయోగించవచ్చు. ఇది ఒక అప్లికేషన్ ఫైల్ను మాత్రమే కాపీ చేస్తుంది మరియు గో యుటిలిటీ సాధనాలను ప్రభావితం చేయదు. కొత్త బహుళ-దశల డాకర్ ఫైల్ 12 మెగాబైట్లు ఉన్న అసలు కంటైనర్ ఇమేజ్తో పోలిస్తే, 700 మెగాబైట్ల పరిమాణంలో ఉన్న కంటైనర్ ఇమేజ్ను కలిగి ఉంటుంది, ఇది చాలా పెద్ద తేడా!
కాబట్టి చిన్న బేస్ ఇమేజ్లు మరియు బిల్డర్ ప్యాటర్న్లను ఉపయోగించడం అనేది ఎక్కువ పని లేకుండా చాలా చిన్న కంటైనర్లను సృష్టించడానికి గొప్ప మార్గాలు.
అప్లికేషన్ స్టాక్పై ఆధారపడి, ఇమేజ్ మరియు కంటైనర్ పరిమాణాన్ని తగ్గించడానికి అదనపు మార్గాలు ఉన్నాయి, అయితే చిన్న కంటైనర్లకు నిజంగా కొలవదగిన ప్రయోజనం ఉందా? చిన్న కంటైనర్లు అత్యంత ప్రభావవంతమైన రెండు ప్రాంతాలను చూద్దాం - పనితీరు మరియు భద్రత.
పనితీరు పెరుగుదలను అంచనా వేయడానికి, కంటైనర్ను సృష్టించే ప్రక్రియ యొక్క వ్యవధిని పరిగణించండి, దానిని రిజిస్ట్రీ (పుష్) లోకి చొప్పించి, ఆపై దానిని అక్కడ నుండి తిరిగి పొందండి (పుల్). పెద్ద కంటైనర్ కంటే చిన్న కంటైనర్కు ప్రత్యేక ప్రయోజనం ఉందని మీరు చూడవచ్చు.
డాకర్ లేయర్లను కాష్ చేస్తుంది కాబట్టి తదుపరి నిర్మాణాలు చాలా వేగంగా ఉంటాయి. అయినప్పటికీ, కంటైనర్లను నిర్మించడానికి మరియు పరీక్షించడానికి ఉపయోగించే అనేక CI సిస్టమ్లు లేయర్లను కాష్ చేయవు, కాబట్టి గణనీయమైన సమయం ఆదా అవుతుంది. మీరు చూడగలిగినట్లుగా, మీ యంత్రం యొక్క శక్తిని బట్టి పెద్ద కంటైనర్ను నిర్మించే సమయం 34 నుండి 54 సెకన్ల వరకు ఉంటుంది మరియు కంటైనర్ను ఉపయోగించినప్పుడు బిల్డర్ నమూనాను ఉపయోగించి తగ్గించబడుతుంది - 23 నుండి 28 సెకన్ల వరకు. ఈ రకమైన కార్యకలాపాల కోసం, ఉత్పాదకత పెరుగుదల 40-50% ఉంటుంది. కాబట్టి మీరు మీ కోడ్ని ఎన్నిసార్లు నిర్మించి పరీక్షించారో ఆలోచించండి.
కంటైనర్ను నిర్మించిన తర్వాత, మీరు దాని చిత్రాన్ని (పుష్ కంటైనర్ ఇమేజ్) కంటైనర్ రిజిస్ట్రీలోకి నెట్టాలి, తద్వారా మీరు దానిని మీ కుబెర్నెట్స్ క్లస్టర్లో ఉపయోగించవచ్చు. నేను Google కంటైనర్ రిజిస్ట్రీని ఉపయోగించమని సిఫార్సు చేస్తున్నాను.
Google కంటైనర్ రిజిస్ట్రీ (GCR)తో, మీరు ముడి నిల్వ మరియు నెట్వర్కింగ్ కోసం మాత్రమే చెల్లిస్తారు మరియు అదనపు కంటైనర్ నిర్వహణ రుసుములు లేవు. ఇది ప్రైవేట్, సురక్షితమైనది మరియు చాలా వేగవంతమైనది. పుల్ ఆపరేషన్ను వేగవంతం చేయడానికి GCR అనేక ఉపాయాలను ఉపయోగిస్తుంది. మీరు చూడగలిగినట్లుగా, go:onbuildని ఉపయోగించి డాకర్ కంటైనర్ ఇమేజ్ కంటైనర్ను చొప్పించడం కంప్యూటర్ పనితీరును బట్టి 15 నుండి 48 సెకన్ల వరకు పడుతుంది మరియు చిన్న కంటైనర్తో అదే ఆపరేషన్ 14 నుండి 16 సెకన్లు పడుతుంది మరియు తక్కువ ఉత్పాదక యంత్రాల కోసం ఆపరేషన్ వేగంలో ప్రయోజనం 3 రెట్లు పెరుగుతుంది. పెద్ద మెషీన్ల కోసం, సమయం దాదాపు ఒకే విధంగా ఉంటుంది, ఎందుకంటే GCR చిత్రాల భాగస్వామ్య డేటాబేస్ కోసం గ్లోబల్ కాష్ని ఉపయోగిస్తుంది, అంటే మీరు వాటిని అస్సలు లోడ్ చేయనవసరం లేదు. తక్కువ-పవర్ కంప్యూటర్లో, CPU అనేది అడ్డంకి, కాబట్టి చిన్న కంటైనర్లను ఉపయోగించడం వల్ల ఇక్కడ చాలా ఎక్కువ ప్రయోజనం ఉంటుంది.
మీరు GCRని ఉపయోగిస్తుంటే, మీ బిల్డ్ సిస్టమ్లో భాగంగా Google కంటైనర్ బిల్డర్ (GCB)ని ఉపయోగించమని నేను బాగా సిఫార్సు చేస్తున్నాను.
మీరు చూడగలిగినట్లుగా, ఉత్పాదక యంత్రం కంటే బిల్డ్ + పుష్ ఆపరేషన్ వ్యవధిని తగ్గించడంలో మెరుగైన ఫలితాలను సాధించడానికి దాని ఉపయోగం మిమ్మల్ని అనుమతిస్తుంది - ఈ సందర్భంలో, హోస్ట్కు కంటైనర్లను నిర్మించి పంపే ప్రక్రియ దాదాపు 2 రెట్లు వేగవంతం అవుతుంది. . అదనంగా, మీరు ప్రతిరోజూ 120 ఉచిత బిల్డ్ నిమిషాలను పొందుతారు, ఇది చాలా సందర్భాలలో మీ కంటైనర్ బిల్డింగ్ అవసరాలను కవర్ చేస్తుంది.
తర్వాత అత్యంత ముఖ్యమైన పనితీరు మెట్రిక్ వస్తుంది - కంటైనర్లను తిరిగి పొందడం లేదా డౌన్లోడ్ చేయడంలో వేగం. మరియు మీరు పుష్ ఆపరేషన్లో గడిపిన సమయం గురించి పెద్దగా పట్టించుకోనట్లయితే, పుల్ ప్రక్రియ యొక్క పొడవు మొత్తం సిస్టమ్ పనితీరుపై తీవ్రమైన ప్రభావాన్ని చూపుతుంది. మీకు మూడు నోడ్ల క్లస్టర్ ఉందని మరియు వాటిలో ఒకటి విఫలమైందని అనుకుందాం. మీరు Google Kubernetes ఇంజిన్ వంటి నిర్వహణ వ్యవస్థను ఉపయోగిస్తుంటే, అది స్వయంచాలకంగా చనిపోయిన నోడ్ని కొత్త దానితో భర్తీ చేస్తుంది. అయితే, ఈ కొత్త నోడ్ పూర్తిగా ఖాళీగా ఉంటుంది మరియు ఇది పని చేయడం ప్రారంభించడానికి మీరు మీ అన్ని కంటైనర్లను దానిలోకి లాగాలి. పుల్ ఆపరేషన్ తగినంత సమయం తీసుకుంటే, మీ క్లస్టర్ మొత్తం సమయం తక్కువ పనితీరుతో నడుస్తుంది.
ఇలా జరిగే అనేక సందర్భాలు ఉన్నాయి: క్లస్టర్కి కొత్త నోడ్ని జోడించడం, నోడ్లను అప్గ్రేడ్ చేయడం లేదా విస్తరణ కోసం కొత్త కంటైనర్కు మారడం కూడా. అందువల్ల, పుల్ ఎక్స్ట్రాక్షన్ సమయాన్ని తగ్గించడం కీలక అంశం అవుతుంది. పెద్ద కంటైనర్ కంటే చిన్న కంటైనర్ చాలా వేగంగా డౌన్లోడ్ అవుతుందనేది కాదనలేనిది. మీరు Kubernetes క్లస్టర్లో బహుళ కంటైనర్లను నడుపుతున్నట్లయితే, సమయం ఆదా గణనీయంగా ఉంటుంది.
ఈ పోలికను పరిశీలించండి: చిన్న కంటైనర్లపై పుల్ ఆపరేషన్కు, go:onbuildని ఉపయోగించే అదే ఆపరేషన్ కంటే, యంత్రం యొక్క శక్తిని బట్టి 4-9 రెట్లు తక్కువ సమయం పడుతుంది. భాగస్వామ్య, చిన్న కంటైనర్ బేస్ చిత్రాలను ఉపయోగించడం వలన కొత్త కుబెర్నెట్స్ నోడ్లను అమర్చి ఆన్లైన్లోకి వచ్చే సమయం మరియు వేగాన్ని గణనీయంగా వేగవంతం చేస్తుంది.
భద్రత సమస్యను పరిశీలిద్దాం. చిన్న కంటైనర్లు పెద్ద వాటి కంటే చాలా సురక్షితమైనవిగా పరిగణించబడతాయి, ఎందుకంటే అవి చిన్న దాడి ఉపరితలం కలిగి ఉంటాయి. ఇది నిజంగా ఉందా? Google కంటైనర్ రిజిస్ట్రీ యొక్క అత్యంత ఉపయోగకరమైన లక్షణాలలో ఒకటి మీ కంటైనర్లను హాని కోసం స్వయంచాలకంగా స్కాన్ చేయగల సామర్థ్యం. కొన్ని నెలల క్రితం నేను ఆన్బిల్డ్ మరియు మల్టీస్టేజ్ కంటైనర్లను సృష్టించాను, కాబట్టి అక్కడ ఏవైనా దుర్బలత్వాలు ఉన్నాయో లేదో చూద్దాం.
ఫలితం అద్భుతంగా ఉంది: ఒక చిన్న కంటైనర్లో కేవలం 3 మీడియం దుర్బలత్వాలు మాత్రమే కనుగొనబడ్డాయి మరియు పెద్ద కంటైనర్లో 16 క్లిష్టమైన మరియు 376 ఇతర దుర్బలత్వాలు కనుగొనబడ్డాయి. మేము పెద్ద కంటైనర్లోని కంటెంట్లను పరిశీలిస్తే, చాలా భద్రతా సమస్యలు మన అప్లికేషన్తో సంబంధం కలిగి ఉండవు, కానీ మనం ఉపయోగించని ప్రోగ్రామ్లకు సంబంధించినవి అని మనం చూడవచ్చు. కాబట్టి ప్రజలు పెద్ద దాడి ఉపరితలం గురించి మాట్లాడినప్పుడు, వారి అర్థం అదే.
టేకావే స్పష్టంగా ఉంది: చిన్న కంటైనర్లను నిర్మించండి ఎందుకంటే అవి మీ సిస్టమ్కు నిజమైన పనితీరు మరియు భద్రతా ప్రయోజనాలను అందిస్తాయి.
కొన్ని ప్రకటనలు 🙂
మాతో ఉన్నందుకు ధన్యవాదాలు. మీరు మా కథనాలను ఇష్టపడుతున్నారా? మరింత ఆసక్తికరమైన కంటెంట్ని చూడాలనుకుంటున్నారా? ఆర్డర్ చేయడం ద్వారా లేదా స్నేహితులకు సిఫార్సు చేయడం ద్వారా మాకు మద్దతు ఇవ్వండి,
ఆమ్స్టర్డామ్లోని ఈక్వినిక్స్ టైర్ IV డేటా సెంటర్లో Dell R730xd 2x చౌకగా ఉందా? ఇక్కడ మాత్రమే
మూలం: www.habr.com