குபெர்னெட்ஸில் உள்ள லைவ்னெஸ் ஆய்வுகள் ஆபத்தானவை

குறிப்பு. மொழிபெயர்: ஜாலண்டோவைச் சேர்ந்த முன்னணி பொறியாளர் ஹென்னிங் ஜேக்கப்ஸ், குபெர்னெட்டஸ் பயனர்களிடையே உயிரோட்டம் (மற்றும் தயார்நிலை) ஆய்வுகளின் நோக்கம் மற்றும் அவற்றின் சரியான பயன்பாட்டைப் புரிந்துகொள்வதில் உள்ள சிக்கல்களை மீண்டும் மீண்டும் கவனித்துள்ளார். எனவே, அவர் தனது எண்ணங்களை இந்தத் திறனுள்ள குறிப்பில் சேகரித்தார், இது இறுதியில் K8s ஆவணத்தின் ஒரு பகுதியாக மாறும்.

குபெர்னெட்ஸில் உள்ள லைவ்னெஸ் ஆய்வுகள் ஆபத்தானவை

குபெர்னெட்டஸில் அறியப்படும் சுகாதார சோதனைகள் உயிருள்ள ஆய்வுகள் (அதாவது, "செயல்திறன் சோதனைகள்" - தோராயமாக. மொழிபெயர்ப்பு.), மிகவும் ஆபத்தானது. முடிந்தால் அவற்றைத் தவிர்க்குமாறு நான் பரிந்துரைக்கிறேன்: விதிவிலக்குகள் அவை உண்மையிலேயே தேவைப்படும்போது மட்டுமே, அவற்றின் பயன்பாட்டின் பிரத்தியேகங்கள் மற்றும் விளைவுகளை நீங்கள் முழுமையாக அறிந்திருக்கிறீர்கள். இந்த வெளியீடு உயிரோட்டம் மற்றும் தயார்நிலை சோதனைகள் பற்றி பேசும், மேலும் எந்தெந்த சந்தர்ப்பங்களில் உங்களுக்கு சொல்லும் மதிப்பு மற்றும் நீங்கள் அவற்றைப் பயன்படுத்தக்கூடாது.

எனது சக ஊழியர் சாண்டோர் சமீபத்தில் ட்விட்டரில் அவர் சந்திக்கும் பொதுவான பிழைகள், தயார்நிலை/உயிர்த்தன்மை ஆய்வுகளின் பயன்பாடு தொடர்பானவை உட்பட:

குபெர்னெட்ஸில் உள்ள லைவ்னெஸ் ஆய்வுகள் ஆபத்தானவை

தவறாக உள்ளமைக்கப்பட்டது livenessProbe அதிக சுமை சூழ்நிலைகளை மோசமாக்கலாம் (பனிப்பந்து பணிநிறுத்தம் + நீண்ட கொள்கலன்/பயன்பாட்டு தொடக்க நேரம்) மற்றும் சார்பு வீழ்ச்சி போன்ற பிற எதிர்மறை விளைவுகளுக்கு வழிவகுக்கும் (மேலும் பார்க்கவும் எனது சமீபத்திய கட்டுரை K3s+ACME கலவையில் கோரிக்கைகளின் எண்ணிக்கையைக் கட்டுப்படுத்துவது பற்றி). வெளிப்புற தரவுத்தளமான சுகாதார சோதனையுடன் லைவ்னெஸ் ஆய்வு இணைக்கப்பட்டால் இது இன்னும் மோசமானது: ஒரு DB தோல்வி உங்கள் எல்லா கொள்கலன்களையும் மறுதொடக்கம் செய்யும்!

பொதுவான செய்தி "வாழ்க்கை ஆய்வுகளை பயன்படுத்த வேண்டாம்" இந்த விஷயத்தில் இது அதிகம் உதவாது, எனவே தயார்நிலை மற்றும் உயிரோட்டம் காசோலைகள் எதற்காக என்பதைப் பார்ப்போம்.

குறிப்பு: கீழே உள்ள பெரும்பாலான சோதனைகள் முதலில் Zalando இன் உள் டெவலப்பர் ஆவணத்தில் சேர்க்கப்பட்டது.

தயார்நிலை மற்றும் உயிரோட்டத்தை சரிபார்க்கிறது

குபெர்னெட்டஸ் இரண்டு முக்கியமான வழிமுறைகளை வழங்குகிறது உயிருள்ள ஆய்வுகள் மற்றும் தயார்நிலை ஆய்வுகள். பயன்பாடு எதிர்பார்த்தபடி செயல்படுகிறதா என்பதை உறுதிப்படுத்த, HTTP கோரிக்கையை அனுப்புவது, TCP இணைப்பைத் திறப்பது அல்லது கொள்கலனில் கட்டளையை இயக்குவது போன்ற சில செயல்களை அவை அவ்வப்போது செய்கின்றன.

குபெர்னெட்ஸ் பயன்படுத்துகிறது தயார்நிலை ஆய்வுகள்போக்குவரத்தை ஏற்க கொள்கலன் எப்போது தயாராக உள்ளது என்பதைப் புரிந்து கொள்ள. ஒரு நெற்று அதன் அனைத்து கொள்கலன்களும் தயாராக இருந்தால் பயன்படுத்த தயாராக கருதப்படுகிறது. இந்த பொறிமுறையின் ஒரு பயன் என்னவென்றால், குபெர்னெட்டஸ் சேவைகளுக்கு (குறிப்பாக நுழைவு) பின்தளமாக எந்த காய்கள் பயன்படுத்தப்படுகின்றன என்பதைக் கட்டுப்படுத்துவது.

லைவ்னெஸ் ஆய்வுகள் கொள்கலனை மறுதொடக்கம் செய்ய வேண்டிய நேரம் எப்போது என்பதை குபெர்னெட்டஸுக்குப் புரிந்துகொள்ள உதவுங்கள். எடுத்துக்காட்டாக, ஒரு பயன்பாடு ஒரே இடத்தில் சிக்கிக் கொள்ளும்போது, ​​முட்டுக்கட்டையை இடைமறிக்க, அத்தகைய சரிபார்ப்பு உங்களை அனுமதிக்கிறது. இந்த நிலையில் கொள்கலனை மறுதொடக்கம் செய்வது பிழைகள் இருந்தபோதிலும் பயன்பாட்டை தரையில் இருந்து பெற உதவுகிறது, ஆனால் இது அடுக்கு தோல்விகளுக்கும் வழிவகுக்கும் (கீழே காண்க).

லைவ்னெஸ்/ஆயத்தநிலை சரிபார்ப்புகளில் தோல்வியுற்ற பயன்பாட்டு புதுப்பிப்பை நீங்கள் பயன்படுத்த முயற்சித்தால், குபெர்னெட்ஸ் நிலைக்காக காத்திருக்கும் போது அதன் வெளியீடு நிறுத்தப்படும். Ready அனைத்து காய்களிலிருந்தும்.

உதாரணமாக

ஒரு பாதையைச் சரிபார்க்கும் தயார்நிலை ஆய்வுக்கான எடுத்துக்காட்டு இங்கே /health இயல்புநிலை அமைப்புகளுடன் HTTP வழியாக (இடைவெளி: 10 வினாடிகள், நேரம் முடிந்தது: 1 வினாடி, வெற்றி வாசல்: 1, தோல்வி வாசல்: 3):

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

பரிந்துரைகளை

  1. HTTP எண்ட்பாயிண்ட் (REST, முதலியன) கொண்ட மைக்ரோ சர்வீஸுக்கு எப்போதும் தயார்நிலை ஆய்வை வரையறுக்கவும், பயன்பாடு (பாட்) போக்குவரத்தை ஏற்கத் தயாராக உள்ளதா என்பதைச் சரிபார்க்கிறது.
  2. தயார்நிலை ஆய்வை உறுதிப்படுத்தவும் உண்மையான இணைய சேவையக போர்ட்டின் கிடைக்கும் தன்மையை உள்ளடக்கியது:
    • நிர்வாக நோக்கங்களுக்காக துறைமுகங்களைப் பயன்படுத்துதல், "நிர்வாகம்" அல்லது "நிர்வாகம்" (எடுத்துக்காட்டாக, 9090) readinessProbe, முதன்மை HTTP போர்ட் (8080 போன்றது) போக்குவரத்தை ஏற்கத் தயாராக இருந்தால் மட்டுமே எண்ட்பாயிண்ட் சரி என்பதை உறுதிசெய்யவும்*;

      *சலாண்டோவில் இது நடக்காத ஒரு வழக்கையாவது நான் அறிவேன், அதாவது. readinessProbe நான் “மேலாண்மை” போர்ட்டைச் சரிபார்த்தேன், ஆனால் தற்காலிக சேமிப்பை ஏற்றுவதில் உள்ள சிக்கல்கள் காரணமாக சேவையகம் வேலை செய்யத் தொடங்கவில்லை.

    • ஒரு தனி போர்ட்டில் தயார்நிலை ஆய்வை இணைப்பது, முக்கிய போர்ட்டில் அதிக சுமை சுகாதார சோதனையில் பிரதிபலிக்காது என்பதற்கு வழிவகுக்கும் (அதாவது, சர்வரில் உள்ள நூல் குளம் நிரம்பியுள்ளது, ஆனால் சுகாதார சோதனை இன்னும் எல்லாம் சரியாக உள்ளது என்பதைக் காட்டுகிறது. )
  3. என்பதை உறுதி செய்து கொள்ளுங்கள் தயார்நிலை ஆய்வு தரவுத்தள துவக்கம்/இடமாற்றத்தை செயல்படுத்துகிறது;
    • இதை அடைவதற்கான எளிதான வழி, துவக்கம் முடிந்ததும் மட்டுமே HTTP சேவையகத்தைத் தொடர்புகொள்வதாகும் (உதாரணமாக, இதிலிருந்து தரவுத்தளத்தை நகர்த்துதல் பறக்கும் பாதை மற்றும் பல.); அதாவது, சுகாதார சோதனை நிலையை மாற்றுவதற்குப் பதிலாக, தரவுத்தள இடம்பெயர்வு முடியும் வரை இணைய சேவையகத்தைத் தொடங்க வேண்டாம்*.

      * நீங்கள் பாட் வெளியே 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 சேவையை எடுத்துக் கொள்வோம்: டிபியுடன் வேலை செய்யும் இணைப்பைச் சரிபார்க்கும்போது, ​​நெட்வொர்க்/டிபி பக்கத்தில் தாமதம் ஏற்பட்டால் அனைத்து 10 காய்களும் தோல்வியடையும் - பொதுவாக இது எல்லாவற்றையும் விட மோசமாக முடிவடைகிறது;
    • ஸ்பிரிங் டேட்டா இயல்புநிலையாக தரவுத்தள இணைப்பைச் சரிபார்க்கிறது என்பதை நினைவில் கொள்ளவும்*;

      * இது ஸ்பிரிங் டேட்டா ரெடிஸின் இயல்புநிலை நடத்தை (குறைந்தபட்சம் நான் கடைசியாகச் சரிபார்த்தேன்), இது ஒரு "பேரழிவு" தோல்விக்கு வழிவகுத்தது: ரெடிஸ் சிறிது நேரம் கிடைக்காதபோது, ​​அனைத்து காய்களும் "செயலிழந்தது".

    • இந்த அர்த்தத்தில் "வெளிப்புறம்" என்பது அதே பயன்பாட்டின் பிற காய்களையும் குறிக்கலாம், அதாவது, கேஸ்கேடிங் செயலிழப்பைத் தடுக்க அதே கிளஸ்டரின் மற்ற காய்களின் நிலையைச் சார்ந்து இருக்கக்கூடாது:
      • விநியோகிக்கப்பட்ட நிலையில் உள்ள பயன்பாடுகளுக்கு முடிவுகள் மாறுபடலாம் (உதாரணமாக, காய்களில் உள்ள நினைவக கேச்சிங்).
  2. லைவ்னெஸ் ப்ரோப் பயன்படுத்த வேண்டாம் காய்களுக்கு (விதிவிலக்குகள் அவை மிகவும் அவசியமானவை மற்றும் அவற்றின் பயன்பாட்டின் பிரத்தியேகங்கள் மற்றும் விளைவுகளைப் பற்றி நீங்கள் முழுமையாக அறிந்திருக்கிறீர்கள்):
    • ஒரு லைவ்னஸ் ஆய்வு தொங்கிய கொள்கலன்களை மீட்டெடுக்க உதவும், ஆனால் உங்கள் பயன்பாட்டின் மீது உங்களுக்கு முழுக் கட்டுப்பாடு இருப்பதால், தொங்கவிடப்பட்ட செயல்முறைகள் மற்றும் முட்டுக்கட்டைகள் போன்றவை நடக்கக்கூடாது: சிறந்த மாற்றாக பயன்பாட்டை வேண்டுமென்றே செயலிழக்கச் செய்து, முந்தைய நிலையான நிலைக்கு கொண்டு வர வேண்டும்;
    • ஒரு தோல்வியுற்ற லைவ்நெஸ் ஆய்வு கண்டெய்னரை மறுதொடக்கம் செய்யும், அதன் மூலம் துவக்க-தொடர்பான பிழைகளின் விளைவுகளை அதிகரிக்கச் செய்யும்: கொள்கலனை மறுதொடக்கம் செய்வது செயலிழப்பை ஏற்படுத்தும் (குறைந்தது பயன்பாடு தொடங்கும் காலத்திற்கு, 30+ வினாடிகள்) புதிய பிழைகளை ஏற்படுத்தும், மற்ற கொள்கலன்களில் சுமையை அதிகரிப்பது மற்றும் அவற்றின் தோல்வியின் சாத்தியக்கூறுகளை அதிகரிப்பது போன்றவை;
    • வெளிப்புறச் சார்புநிலையுடன் இணைந்த உயிர்வாழ்வுச் சோதனைகள் மிக மோசமான சாத்தியக்கூறுகள் ஆகும், இது கேஸ்கேடிங் தோல்விகளை அச்சுறுத்துகிறது: தரவுத்தளத்தில் சிறிது தாமதம் ஏற்பட்டால் உங்கள் எல்லா கொள்கலன்களும் மறுதொடக்கம் செய்யப்படும்!
  3. உயிரோட்டம் மற்றும் தயார்நிலை சோதனைகளின் அளவுருக்கள் வித்தியாசமாக இருக்க வேண்டும்:
    • அதே ஆரோக்கிய சோதனையுடன் நீங்கள் ஒரு உயிரோட்ட ஆய்வைப் பயன்படுத்தலாம், ஆனால் அதிக பதில் வரம்பு (failureThreshold), எடுத்துக்காட்டாக, நிலையை ஒதுக்கவும் தயாராக இல்லை 3 முயற்சிகளுக்குப் பிறகு மற்றும் 10 முயற்சிகளுக்குப் பிறகு லைவ்னெஸ் ஆய்வு தோல்வியடைந்ததாகக் கருதுங்கள்;
  4. Exec காசோலைகளைப் பயன்படுத்த வேண்டாம், அவை ஜாம்பி செயல்முறைகளின் தோற்றத்திற்கு வழிவகுக்கும் அறியப்பட்ட சிக்கல்களுடன் தொடர்புடையவை என்பதால்:

சுருக்கம்

  • ஒரு பாட் எப்போது டிராஃபிக்கைப் பெறத் தயாராக உள்ளது என்பதைத் தீர்மானிக்க, தயார்நிலை ஆய்வுகளைப் பயன்படுத்தவும்.
  • லைவ்னெஸ் ஆய்வுகள் உண்மையில் தேவைப்படும்போது மட்டுமே பயன்படுத்தவும்.
  • தயார்நிலை/உயிர்த்தன்மை ஆய்வுகளின் முறையற்ற பயன்பாடு, கிடைப்பது குறைவதற்கும், அடுக்கு தோல்விகளுக்கும் வழிவகுக்கும்.

குபெர்னெட்ஸில் உள்ள லைவ்னெஸ் ஆய்வுகள் ஆபத்தானவை

தலைப்பில் கூடுதல் பொருட்கள்

1-2019-09 முதல் புதுப்பிப்பு எண். 29

தரவுத்தள இடம்பெயர்வுக்கான init கொள்கலன்கள் பற்றி: அடிக்குறிப்பு சேர்க்கப்பட்டது.

EJ எனக்கு நினைவூட்டியது PDB பற்றி: உயிரோட்டம் சரிபார்ப்பதில் உள்ள சிக்கல்களில் ஒன்று காய்களுக்கு இடையே ஒருங்கிணைப்பு இல்லாதது. குபெர்னெட்டஸுக்கு உண்டு Pod Disruption Budgets (PDB) ஒரு பயன்பாடு அனுபவிக்கும் ஒரே நேரத்தில் தோல்விகளின் எண்ணிக்கையைக் கட்டுப்படுத்த, காசோலைகள் PDBயை கணக்கில் எடுத்துக்கொள்ளாது. வெறுமனே, K8s க்கு "ஒரு பாட் சோதனை தோல்வியுற்றால் அதை மறுதொடக்கம் செய்யுங்கள், ஆனால் விஷயங்களை மோசமாக்குவதைத் தவிர்க்க அனைத்தையும் மறுதொடக்கம் செய்ய வேண்டாம்" என்று சொல்லலாம்.

பிரையன் அதை மிகச்சரியாகப் போட்டார்: “உங்களுக்கு சரியாகத் தெரிந்தால் லைவ்னஸ் ப்ரோபிங்கைப் பயன்படுத்தவும் பயன்பாட்டை அழிப்பதே சிறந்த விஷயம்"(மீண்டும், எடுத்துச் செல்ல வேண்டாம்).

குபெர்னெட்ஸில் உள்ள லைவ்னெஸ் ஆய்வுகள் ஆபத்தானவை

2-2019-09 முதல் புதுப்பிப்பு எண். 29

பயன்பாட்டிற்கு முன் ஆவணங்களைப் படிப்பது பற்றி: நான் தொடர்புடைய கோரிக்கையை உருவாக்கினேன் (சிறப்பு விண்ணப்பம்) உயிருள்ள ஆய்வுகள் பற்றிய ஆவணங்களைச் சேர்க்க.

மொழிபெயர்ப்பாளரிடமிருந்து பி.எஸ்

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்