በ Kubernetes ውስጥ የቀጥታ ህይወት ምርመራዎች አደገኛ ሊሆኑ ይችላሉ

ማስታወሻ. ትርጉምየዛላንዶ መሪ መሐንዲስ ሄኒንግ ጃኮብስ የኩበርኔትስ ተጠቃሚዎች የቀጥታነት (እና ዝግጁነት) መመርመሪያዎችን ዓላማ እና ትክክለኛ አጠቃቀማቸውን በመረዳት ላይ ችግሮችን በተደጋጋሚ አስተውለዋል። ስለዚህ፣ ሀሳቡን በዚህ አቅም ባለው ማስታወሻ ሰብስቧል፣ እሱም በመጨረሻ የK8s ሰነድ አካል ይሆናል።

በ Kubernetes ውስጥ የቀጥታ ህይወት ምርመራዎች አደገኛ ሊሆኑ ይችላሉ

በ Kubernetes ውስጥ የሚታወቀው የጤና ምርመራዎች የአኗኗር መመርመሪያዎች (ማለትም፣ በጥሬው፣ “የአዋጭነት ሙከራዎች” - በግምት ተርጓሚ።)፣ በጣም አደገኛ ሊሆን ይችላል። ከተቻለ እንዲያስወግዷቸው እመክራለሁ፡ ልዩ ሁኔታዎች በእውነት አስፈላጊ ሲሆኑ እና ስለ አጠቃቀማቸው ዝርዝር እና መዘዞች ሙሉ በሙሉ ሲያውቁ ብቻ ነው። ይህ ህትመት ስለ ህይወት መኖር እና ዝግጁነት ፍተሻዎች ይናገራል፣ እና በምን ጉዳዮች ላይም ይነግርዎታል ዋጋው ነው እና እነሱን መጠቀም የለብዎትም.

የሥራ ባልደረባዬ ሳንዶር በቅርቡ በትዊተር ላይ ያጋጠሙትን በጣም የተለመዱ ስህተቶች፣ ከዝግጁነት/የሕያውነት መመርመሪያዎች አጠቃቀም ጋር የተያያዙትን ጨምሮ አጋርቷል።

በ Kubernetes ውስጥ የቀጥታ ህይወት ምርመራዎች አደገኛ ሊሆኑ ይችላሉ

በትክክል አልተዋቀረም። livenessProbe ከፍተኛ ጭነት ሁኔታዎችን ሊያባብስ ይችላል (የበረዶ ኳስ መዘጋት + ረጅም የመያዣ / የመተግበሪያ ማስጀመሪያ ጊዜ) እና እንደ ጥገኛ ጠብታዎች ያሉ ሌሎች አሉታዊ መዘዞችን ያስከትላል። (ተመልከት የእኔ የቅርብ ጊዜ መጣጥፍ በK3s+ACME ጥምር ውስጥ የጥያቄዎችን ብዛት ስለመገደብ). የኅያውነት ምርመራው ከጤና ምርመራ ጋር ሲጣመር በጣም የከፋ ነው፣ ይህም የውጭ ዳታቤዝ ነው። አንድ ነጠላ ዲቢ አለመሳካት ሁሉንም መያዣዎችዎን እንደገና ያስጀምራል።!

አጠቃላይ መልእክት "የህይወት መመርመሪያዎችን አይጠቀሙ" በዚህ ጉዳይ ላይ ብዙም አይረዳም, ስለዚህ ዝግጁነት እና የአኗኗር ፍተሻዎች ምን እንደሆኑ እንይ.

ማስታወሻ፡ አብዛኛው ከዚህ በታች ያለው ሙከራ በመጀመሪያ በዛላንዶ የውስጥ ገንቢ ሰነድ ውስጥ ተካቷል።

ዝግጁነት እና የህይወት ፍተሻዎች

ኩበርኔትስ የሚባሉት ሁለት አስፈላጊ ዘዴዎችን ያቀርባል የቀጥታ መመርመሪያዎች እና ዝግጁነት ምርመራዎች. አፕሊኬሽኑ እንደተጠበቀው እየሰራ መሆኑን ለማረጋገጥ እንደ የኤችቲቲፒ ጥያቄ መላክ፣ የቲሲፒ ግንኙነት መክፈት ወይም በመያዣው ውስጥ ትዕዛዝ ማስፈጸምን የመሳሰሉ አንዳንድ እርምጃዎችን በየጊዜው ያከናውናሉ።

ኩበርኔትስ ይጠቀማል ዝግጁነት ምርመራዎችመያዣው ትራፊክ ለመቀበል መቼ ዝግጁ እንደሆነ ለመረዳት. ሁሉም መያዣዎቹ ዝግጁ ከሆኑ ፖድ ለአገልግሎት ዝግጁ እንደሆነ ይቆጠራል። የዚህ ዘዴ አንዱ አጠቃቀም የትኞቹ ፖዶች ለኩበርኔትስ አገልግሎቶች (እና በተለይም ኢንግሬስ) እንደ ደጋፊ ሆነው ጥቅም ላይ እንደሚውሉ መቆጣጠር ነው።

የቀጥታነት ምርመራዎች መያዣውን እንደገና ለመጀመር ጊዜው መቼ እንደሆነ Kubernetes እንዲረዳ ያግዙ። ለምሳሌ, እንዲህ ዓይነቱ ቼክ አፕሊኬሽኑ አንድ ቦታ ላይ ሲጣበፍ መቆለፊያን ለመጥለፍ ይፈቅድልዎታል. በዚህ ሁኔታ ውስጥ መያዣውን እንደገና ማስጀመር ስህተቶች ቢኖሩትም አፕሊኬሽኑን ከመሬት ላይ ለማስወገድ ይረዳል, ነገር ግን ወደ መጥፋት ውድቀት ሊያመራ ይችላል (ከዚህ በታች ይመልከቱ).

የመኖር/የዝግጁነት ፍተሻዎችን ያልተሳካ የመተግበሪያ ዝማኔን ለማሰማራት ከሞከሩ ኩበርኔትስ ሁኔታውን ሲጠብቅ ልቀቱ ይቆማል። Ready ከሁሉም እንክብሎች.

ለምሳሌ:

መንገዱን የሚፈትሽ የዝግጁነት ፍተሻ ምሳሌ እዚህ አለ። /health በ HTTP በኩል ከነባሪ ቅንጅቶች ጋር (የእረፍት ጊዜ: 10 ሰከንድ ጊዜው አልቋል: 1 ሰከንድ, የስኬት ደረጃ: 1, ውድቀት ገደብ: 3)::

# часть общего описания deployment'а/стека
podTemplate:
  spec:
    containers:
    - name: my-container
      # ...
      readinessProbe:
        httpGet:
          path: /health
          port: 8080

ምክሮች

  1. ለማይክሮ ሰርቪስ በኤችቲቲፒ የመጨረሻ ነጥብ (REST፣ ወዘተ.) የዝግጁነት ምርመራን ሁልጊዜ ይግለጹአፕሊኬሽኑ (ፖድ) ትራፊክ ለመቀበል ዝግጁ መሆኑን የሚያረጋግጥ።
  2. ዝግጁነት ምርመራውን ያረጋግጡ ትክክለኛው የድር አገልጋይ ወደብ መኖሩን ይሸፍናል:
    • "አስተዳዳሪ" ወይም "ማኔጅመንት" (ለምሳሌ 9090) የሚባሉትን ለአስተዳደር ዓላማ ወደቦችን መጠቀም readinessProbeዋናው የኤችቲቲፒ ወደብ (እንደ 8080) ትራፊክ ለመቀበል ዝግጁ ከሆነ የመጨረሻ ነጥቡ እሺ መመለሱን ያረጋግጡ።

      *ይህ ያልተከሰተበት ቢያንስ አንድ ጉዳይ በዛላንዶ አውቃለሁ፣ ማለትም readinessProbe የ "ማኔጅመንት" ወደብ ፈትሻለሁ, ነገር ግን አገልጋዩ ራሱ መሸጎጫውን በመጫን ችግሮች ምክንያት መሥራት አልጀመረም.

    • የዝግጁነት ዳሰሳን ከተለየ ወደብ ጋር ማያያዝ በዋናው ወደብ ላይ ያለው ጭነት በጤና ቼክ ላይ እንዳይታይ ሊያደርግ ይችላል (ማለትም በአገልጋዩ ላይ ያለው ክር ገንዳ ሙሉ ነው ፣ ግን የጤና ምርመራው አሁንም ሁሉም ነገር ደህና መሆኑን ያሳያል) ).
  3. እርግጠኛ ሁን ዝግጁነት ዳታቤዝ ዳታቤዝ ማስጀመር/ፍልሰትን ያስችላል;
    • ይህንን ለማግኘት ቀላሉ መንገድ ጅምር ከተጠናቀቀ በኋላ የኤችቲቲፒ አገልጋይን ማነጋገር ነው (ለምሳሌ የውሂብ ጎታውን ከ ፍላይዌይ እናም ይቀጥላል.); ማለትም የጤና ፍተሻ ሁኔታን ከመቀየር ይልቅ የመረጃ ቋቱ ፍልሰት እስኪጠናቀቅ ድረስ በቀላሉ ዌብ ሰርቨርን አይጀምሩት።

      * እንዲሁም የውሂብ ጎታ ፍልሰትን ከ init ኮንቴይነሮች ከፖድ ውጭ ማሄድ ይችላሉ። እኔ አሁንም እራሴን የያዙ አፕሊኬሽኖች አድናቂ ነኝ፣ ማለትም፣ የመተግበሪያው ኮንቴይነር ያለ ውጫዊ ቅንጅት የውሂብ ጎታውን ወደ ተፈለገው ሁኔታ እንዴት ማምጣት እንደሚቻል የሚያውቅባቸው።

  4. ይጠቀሙ httpGet ለዝግጁነት ፍተሻዎች በተለመደው የጤና ፍተሻ የመጨረሻ ነጥቦች (ለምሳሌ፣ /health).
  5. ነባሪ የፍተሻ መለኪያዎችን ይረዱ (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • ነባሪ አማራጮች ማለት ፖድ ይሆናል ማለት ነው። ዝግጁ አይደለም ከ 30 ሰከንድ በኋላ (3 ያልተሳኩ የንጽሕና ፍተሻዎች).
  6. የጤና እና የመለኪያ አስተዳደርን ከመደበኛ ትራፊክ ለመለየት የቴክኖሎጂ ቁልል (ለምሳሌ ጃቫ/ስፕሪንግ) ከፈቀደ ለ"አስተዳዳሪ" ወይም "ማኔጅመንት" የተለየ ወደብ ይጠቀሙ፡-
    • ግን ስለ ነጥብ 2 አይርሱ።
  7. አስፈላጊ ከሆነ የዝግጁነት ፍተሻ መሸጎጫውን ለማሞቅ/ለመጫን እና መያዣው እስኪሞቅ ድረስ 503 የሁኔታ ኮድ ለመመለስ ሊያገለግል ይችላል፡
    • አዲሱን ቼክ እንዲያነቡ እመክራለሁ። startupProbe, በስሪት 1.16 ታየ (ስለእሱ በሩሲያኛ ጽፈናል እዚህ - በግምት. መተርጎም).

ማስጠንቀቂያዎች

  1. በውጫዊ ጥገኞች ላይ አትተማመኑ (እንደ የውሂብ መጋዘኖች ያሉ) የዝግጁነት/የኑሮ መኖር ሙከራዎችን ሲያካሂዱ - ይህ ወደ ውድቀት ውድቀቶች ሊያመራ ይችላል፡
    • ለአብነት ያህል በአንድ የፖስትግሬስ ዳታቤዝ ላይ በመመስረት 10 ፖዶች ያለው ትክክለኛ የ REST አገልግሎት እንውሰድ፡ ቼኩ ከዲቢ ጋር ባለው የስራ ግንኙነት ላይ ሲወሰን በኔትወርኩ/DB በኩል መዘግየት ካለ ሁሉም 10 ፖዶች ሊሳኩ ይችላሉ። ሁሉም ከሚችለው በላይ የከፋ ያበቃል;
    • እባክዎን የፀደይ ውሂብ የውሂብ ጎታውን ግንኙነት በነባሪነት እንደሚፈትሽ ልብ ይበሉ *;

      * ይህ የስፕሪንግ ዳታ ሬዲስ ነባሪ ባህሪ ነው (ቢያንስ ለመጨረሻ ጊዜ ሳጣራው ነበር) እሱም ወደ “አሰቃቂ” ውድቀት አስከትሏል፡ ሬዲስ ለአጭር ጊዜ በማይገኝበት ጊዜ ሁሉም ፖዶች “ተበላሹ”።

    • “ውጫዊ” ማለት ከዚህ አንፃር ሌሎች ተመሳሳይ ትግበራዎችን ሊያመለክት ይችላል ፣ ማለትም ፣ በሐሳብ ደረጃ ፣ ቼክ ብልሽቶችን ለመከላከል በሌሎች ተመሳሳይ ክላስተር ፍሬዎች ሁኔታ ላይ የተመሠረተ መሆን የለበትም።
      • የተከፋፈለ ሁኔታ ላላቸው መተግበሪያዎች ውጤቶች ሊለያዩ ይችላሉ (ለምሳሌ፣ የማህደረ ትውስታ መሸጎጫ በፖድ)።
  2. ሕያውነት ምርመራን አይጠቀሙ ለፖድ (ልዩ ሁኔታዎች በጣም አስፈላጊ ሲሆኑ እና የአጠቃቀማቸውን ዝርዝር እና መዘዞች ሙሉ በሙሉ የሚያውቁ ናቸው)
    • ሕያውነት ምርመራ የተንጠለጠሉ ኮንቴይነሮችን መልሶ ለማግኘት ይረዳል፣ ነገር ግን ማመልከቻዎን ሙሉ በሙሉ ስለሚቆጣጠሩ፣ እንደ የተንጠለጠሉ ሂደቶች እና መቆለፊያዎች ያሉ ነገሮች በትክክል መከሰት የለባቸውም፡ ምርጡ አማራጭ መተግበሪያውን ሆን ብሎ ማሰናከል እና ወደ ቀድሞው የተረጋጋ ሁኔታ መመለስ ነው።
    • ያልተሳካ የቀጥታ ስርጭት ምርመራ ኮንቴይነሩ እንደገና እንዲጀምር ያደርገዋል ፣በዚህም ከመጫን ጋር የተዛመዱ ስህተቶችን መዘዝ ሊያባብሰው ይችላል-መያዣውን እንደገና ማስጀመር የእረፍት ጊዜን ያስከትላል (ቢያንስ ለትግበራው ጅምር ጊዜ ፣ ​​ለ 30 ሰከንድ ያህል) ፣ አዲስ ስህተቶችን ያስከትላል። , በሌሎች ኮንቴይነሮች ላይ ያለውን ጭነት መጨመር እና የእነሱን ውድቀቶች መጨመር, ወዘተ.
    • የአኗኗር ፍተሻዎች ከውጫዊ ጥገኝነት ጋር ተጣምረው በጣም የከፋው ጥምረት ናቸው ፣ አስጊ ውድቀቶች፡ በመረጃ ቋቱ ላይ ትንሽ መዘግየት ሁሉንም ኮንቴይነሮችዎን እንደገና እንዲጀምሩ ያደርጋል!
  3. የአኗኗር እና ዝግጁነት መለኪያዎች የተለየ መሆን አለበት:
    • በተመሳሳዩ የጤና ፍተሻ፣ ነገር ግን ከፍ ያለ የምላሽ ገደብ (የህይወት ፍተሻን) መጠቀም ይችላሉ።failureThreshold), ለምሳሌ, ሁኔታውን ይመድቡ ዝግጁ አይደለም ከ 3 ሙከራዎች በኋላ እና ከ 10 ሙከራዎች በኋላ የቀጥታነት ምርመራው እንዳልተሳካ አስቡበት;
  4. የ exec ቼኮችን አይጠቀሙወደ ዞምቢ ሂደቶች መከሰት ከሚታወቁ ችግሮች ጋር የተቆራኙ ስለሆኑ፡-

ማጠቃለያ

  • ፖድ ትራፊክ ለመቀበል መቼ ዝግጁ እንደሆነ ለመወሰን ዝግጁነት መመርመሪያዎችን ይጠቀሙ።
  • የአኗኗር መመርመሪያዎችን በትክክል በሚፈልጉበት ጊዜ ብቻ ይጠቀሙ።
  • የዝግጁነት/የህያውነት መመርመሪያዎችን አላግባብ መጠቀም ተደራሽነትን መቀነስ እና ወደ ውድቀት ሊያመራ ይችላል።

በ Kubernetes ውስጥ የቀጥታ ህይወት ምርመራዎች አደገኛ ሊሆኑ ይችላሉ

በርዕሱ ላይ ተጨማሪ ቁሳቁሶች

ከ1-2019-09 ቁጥር 29 ያዘምኑ

ስለ init ኮንቴይነሮች ለዳታቤዝ ፍልሰትየግርጌ ማስታወሻ ታክሏል።

ኢጄ አስታወሰኝ። ስለ ፒዲቢ፡ የአኗኗር ፍተሻዎች አንዱ ችግር በፖድ መካከል ቅንጅት አለመኖሩ ነው። ኩበርኔትስ አለው። የፖድ ረብሻ በጀቶች (PDB) አፕሊኬሽኑ ሊያጋጥመው የሚችለውን ተከታታይ ውድቀቶች ቁጥር ለመገደብ፣ ነገር ግን ቼኮች ፒዲቢን ከግምት ውስጥ አያስገባም። በሐሳብ ደረጃ፣ K8s "ሙከራው ካልተሳካ አንድ ፖድ እንደገና ያስጀምሩት፣ ነገር ግን ነገሮችን እንዳያባብሱ ሁሉንም ዳግም አያስጀምሩ" ልንላቸው እንችላለን።

ብራያን በትክክል አስቀምጧልበትክክል ምን እንደሆነ ስታውቅ የቀጥታ ህይወት መመርመሪያን ተጠቀም በጣም ጥሩው ነገር ማመልከቻውን መግደል ነው"(እንደገና አትወሰዱ)

በ Kubernetes ውስጥ የቀጥታ ህይወት ምርመራዎች አደገኛ ሊሆኑ ይችላሉ

ከ2-2019-09 ቁጥር 29 ያዘምኑ

ከመጠቀምዎ በፊት ሰነዶቹን ማንበብን በተመለከተ: ተዛማጅ ጥያቄውን ፈጠርኩየባህሪ ጥያቄ) ስለ ሕያውነት ምርመራዎች ሰነዶችን ለመጨመር.

PS ከተርጓሚ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ