డౌన్‌టైమ్ లేకుండా కుబెర్నెట్స్ క్లస్టర్‌ను అప్‌గ్రేడ్ చేస్తోంది

డౌన్‌టైమ్ లేకుండా కుబెర్నెట్స్ క్లస్టర్‌ను అప్‌గ్రేడ్ చేస్తోంది

మీ కుబెర్నెట్స్ క్లస్టర్ కోసం అప్‌గ్రేడ్ ప్రాసెస్

ఏదో ఒక సమయంలో, Kubernetes క్లస్టర్‌ని ఉపయోగిస్తున్నప్పుడు, నడుస్తున్న నోడ్‌లను అప్‌డేట్ చేయాల్సిన అవసరం ఉంది. ఇందులో ప్యాకేజీ నవీకరణలు, కెర్నల్ అప్‌డేట్‌లు లేదా కొత్త వర్చువల్ మెషీన్ ఇమేజ్‌ల విస్తరణ ఉండవచ్చు. కుబెర్నెటెస్ పరిభాషలో దీనిని అంటారు "స్వచ్ఛంద అంతరాయం".

ఈ పోస్ట్ 4-పోస్ట్ సిరీస్‌లో భాగం:

  1. ఈ పోస్ట్.
  2. కుబెర్నెటెస్ క్లస్టర్‌లో పాడ్‌ల సరైన షట్‌డౌన్
  3. పాడ్ తొలగించబడినప్పుడు దాన్ని పూర్తి చేయడం ఆలస్యమవుతుంది
  4. PodDisruptionBdgets ఉపయోగించి Kubernetes క్లస్టర్ డౌన్‌టైమ్‌ను ఎలా నివారించాలి

(సుమారుగా. సమీప భవిష్యత్తులో సిరీస్‌లోని మిగిలిన కథనాల అనువాదాలను ఆశించండి)

ఈ కథనంలో, మీ క్లస్టర్‌లో నడుస్తున్న నోడ్‌ల కోసం సున్నా పనికిరాని సమయాన్ని సాధించడానికి కుబెర్నెటెస్ అందించే అన్ని సాధనాలను మేము వివరిస్తాము.

సమస్య నిర్వచనం

మేము మొదట ఒక అమాయక విధానాన్ని తీసుకుంటాము, సమస్యలను గుర్తించి, ఈ విధానం యొక్క సంభావ్య ప్రమాదాలను అంచనా వేస్తాము మరియు చక్రంలో మనం ఎదుర్కొనే ప్రతి సమస్యను పరిష్కరించడానికి జ్ఞానాన్ని పెంపొందించుకుంటాము. ఫలితం మన జీరో డౌన్‌టైమ్ లక్ష్యాన్ని సాధించడానికి లైఫ్‌సైకిల్ హుక్స్, రెడినెస్ ప్రోబ్స్ మరియు పాడ్ డిస్ట్రప్షన్ బడ్జెట్‌లను ఉపయోగించే కాన్ఫిగరేషన్.

మన ప్రయాణాన్ని ప్రారంభించడానికి, ఒక నిర్దిష్ట ఉదాహరణ తీసుకుందాం. మన దగ్గర రెండు నోడ్‌ల కుబెర్నెటెస్ క్లస్టర్ ఉందని అనుకుందాం, దాని వెనుక రెండు పాడ్‌లతో అప్లికేషన్ నడుస్తోంది. Service:

డౌన్‌టైమ్ లేకుండా కుబెర్నెట్స్ క్లస్టర్‌ను అప్‌గ్రేడ్ చేస్తోంది

మా రెండు కుబెర్నెట్స్ క్లస్టర్ నోడ్‌లలో Nginx మరియు సర్వీస్ నడుస్తున్న రెండు పాడ్‌లతో ప్రారంభిద్దాం.

మేము మా క్లస్టర్‌లోని రెండు వర్కర్ నోడ్‌ల కెర్నల్ వెర్షన్‌ను అప్‌డేట్ చేయాలనుకుంటున్నాము. మేము దీన్ని ఎలా చేస్తాము? నవీకరించబడిన కాన్ఫిగరేషన్‌తో కొత్త నోడ్‌లను బూట్ చేయడం మరియు కొత్త వాటిని ప్రారంభించేటప్పుడు పాత నోడ్‌లను మూసివేయడం ఒక సాధారణ పరిష్కారం. ఇది పని చేస్తున్నప్పుడు, ఈ విధానంలో కొన్ని సమస్యలు ఉంటాయి:

  • మీరు పాత నోడ్‌లను ఆఫ్ చేసినప్పుడు, వాటిపై నడుస్తున్న పాడ్‌లు కూడా ఆఫ్ చేయబడతాయి. గ్రేస్‌ఫుల్ షట్‌డౌన్ కోసం పాడ్‌లను క్లియర్ చేయాల్సి వస్తే? మీరు ఉపయోగిస్తున్న వర్చువలైజేషన్ సిస్టమ్ క్లీనప్ ప్రక్రియ పూర్తయ్యే వరకు వేచి ఉండకపోవచ్చు.
  • మీరు ఒకే సమయంలో అన్ని నోడ్‌లను ఆపివేస్తే? పాడ్‌లు కొత్త నోడ్‌లకు మారినప్పుడు మీరు మంచి పనికిరాని సమయాన్ని పొందుతారు.

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

నోడ్ నుండి అన్ని పాడ్‌లను పునఃపంపిణీ చేయడం

కాలువ ఆపరేషన్ ఒక నోడ్ నుండి అన్ని పాడ్లను పునఃపంపిణీ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. డ్రెయిన్ ఎగ్జిక్యూషన్ సమయంలో, నోడ్ షెడ్యూల్ చేయనిదిగా గుర్తించబడింది (ఫ్లాగ్ NoSchedule) ఇది కొత్త పాడ్‌లు దానిపై కనిపించకుండా నిరోధిస్తుంది. అప్పుడు కాలువ నోడ్ నుండి పాడ్‌లను తొలగించడం ప్రారంభిస్తుంది, సిగ్నల్ పంపడం ద్వారా నోడ్‌పై ప్రస్తుతం నడుస్తున్న కంటైనర్‌లను మూసివేస్తుంది TERM పాడ్ లో కంటైనర్లు.

అయితే kubectl drain పాడ్‌లను తొలగించడంలో గొప్ప పని చేస్తుంది, కాలువ ఆపరేషన్ విఫలం కావడానికి మరో రెండు కారకాలు ఉన్నాయి:

  • సమర్పించిన తర్వాత మీ దరఖాస్తును సునాయాసంగా ముగించగలగాలి TERM సిగ్నల్. పాడ్‌లు తొలగించబడినప్పుడు, కుబెర్నెటెస్ ఒక సంకేతాన్ని పంపుతుంది TERM కంటైనర్లు మరియు నిర్దిష్ట సమయం వరకు అవి ఆగిపోయే వరకు వేచి ఉన్నాయి, ఆ తర్వాత, వారు ఆపకపోతే, అది వారిని బలవంతంగా రద్దు చేస్తుంది. ఏదైనా సందర్భంలో, మీ కంటైనర్ సిగ్నల్‌ని సరిగ్గా గ్రహించకపోతే, మీరు ఇప్పటికీ పాడ్‌లను తప్పుగా ఆపివేయవచ్చు, అవి ప్రస్తుతం నడుస్తున్నట్లయితే (ఉదాహరణకు, డేటాబేస్ లావాదేవీ ప్రోగ్రెస్‌లో ఉంది).
  • మీరు మీ అప్లికేషన్‌ను కలిగి ఉన్న అన్ని పాడ్‌లను కోల్పోతారు. కొత్త నోడ్‌లలో కొత్త కంటైనర్‌లను ప్రారంభించినప్పుడు లేదా మీ పాడ్‌లు కంట్రోలర్‌లు లేకుండా అమర్చబడి ఉంటే, అవి అస్సలు రీస్టార్ట్ కాకపోవచ్చు.

పనికిరాని సమయాన్ని నివారించడం

నోడ్‌లో డ్రెయిన్ ఆపరేషన్ వంటి స్వచ్ఛంద అంతరాయం నుండి పనికిరాని సమయాన్ని తగ్గించడానికి, కుబెర్నెటెస్ క్రింది వైఫల్య నిర్వహణ ఎంపికలను అందిస్తుంది:

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

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
   app: nginx
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.15
       ports:
       - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   targetPort: 80
   port: 80

ఈ కాన్ఫిగరేషన్ ఒక చిన్న ఉదాహరణ Deployment, ఇది క్లస్టర్‌లో nginx పాడ్‌లను నిర్వహిస్తుంది. అదనంగా, కాన్ఫిగరేషన్ వనరును వివరిస్తుంది Service, ఇది క్లస్టర్‌లో nginx పాడ్‌లను యాక్సెస్ చేయడానికి ఉపయోగించవచ్చు.

చక్రం అంతటా, మేము ఈ కాన్ఫిగరేషన్‌ను పునరుక్తిగా విస్తరిస్తాము, తద్వారా ఇది డౌన్‌టైమ్‌ను తగ్గించడానికి కుబెర్నెట్స్ అందించే అన్ని సామర్థ్యాలను కలిగి ఉంటుంది.

AWS మరియు అంతకు మించి సున్నా డౌన్‌టైమ్ కోసం Kubernetes క్లస్టర్ అప్‌డేట్‌ల యొక్క పూర్తిగా అమలు చేయబడిన మరియు పరీక్షించబడిన సంస్కరణ కోసం, సందర్శించండి Gruntwork.io.

మా బ్లాగ్‌లోని ఇతర కథనాలను కూడా చదవండి:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి