प्रतिनिधि इंटरव्यू विषय

Kubernetes v1.36 Declarative Validation GA: आप API कंस्ट्रेंट्स को सुरक्षित रूप से कैसे विकसित करते हैं?

सामान्यकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

Kubernetes v1.36 ने Declarative Validation को GA में प्रमोट किया है। यह जिस समस्या का समाधान करता है उसे समझाएं और एक ऐसी API वैलिडेशन योजना डिज़ाइन करें जो सुरक्षित रूप से विकसित हो सके।

प्रॉम्प्ट और संदर्भ

Kubernetes v1.36 ने Declarative Validation को GA में प्रमोट किया और DeclarativeValidation फीचर गेट को डिफ़ॉल्ट रूप से सक्षम किया। नियमों को टाइप डेफिनिशन के बगल में +k8s: मार्कर्स के रूप में लिखा जाता है, और फिर validation-gen द्वारा उत्पन्न किया जाता है। यह प्रश्न परीक्षण करता है कि क्या आप API कॉन्ट्रैक्ट्स, जनरेटर्स, कम्पैटिबिलिटी और रिलीज़ ऑपरेशन्स को आपस में जोड़ सकते हैं।

इंटरव्यूअर क्या मूल्यांकन करता है

  • क्या आप हाथ से लिखे गए (handwritten) वैलिडेशन में रखरखाव और निरंतरता के जोखिमों को समझा सकते हैं।
  • क्या आप डिक्लेरेटिव नियमों, जनरेट किए गए कोड, OpenAPI एक्सपोज़र और रनटाइम रिजेक्शन के बीच अंतर करते हैं।
  • क्या आप सही ढंग से समझाते हैं कि ambient ratcheting पुराने ऑब्जेक्ट्स के अपडेट को कैसे प्रभावित करता है।
  • क्या आप परीक्षण, रोलबैक और क्रमिक माइग्रेशन डिज़ाइन करते हैं ताकि कड़े किए गए नियम संग्रहीत ऑब्जेक्ट्स को नुकसान न पहुँचाएँ।

पहले स्पष्ट करने योग्य प्रश्न

पुष्टि करें कि क्या API एक Kubernetes नेटिव टाइप है या CRD, क्या क्लाइंट्स OpenAPI पर निर्भर हैं, और क्या कंस्ट्रेंट नया है, शिथिल (relaxed) किया गया है, या कड़ा (tightened) किया गया है। यह भी पुष्टि करें कि क्या पुराने ऑब्जेक्ट्स में ऐसे मान हैं जो ऐतिहासिक रूप से स्वीकार किए गए थे और किन जनरेटर, लिंटर और सर्वर वर्ज़न को आपस में इंटरऑपरेट करना चाहिए।

30-सेकंड का उत्तर

डिक्लेरेटिव वैलिडेशन कंस्ट्रेंट्स को टाइप डेफिनिशन के बगल में रखता है, एक सिंगल जनरेटर को सुसंगत कोड उत्पन्न करने की अनुमति देता है, और नियमों को OpenAPI के लिए उपलब्ध कराता है। इस योजना में नियम डिज़ाइन, जनरेशन और स्टेटिक चेक्स, सर्वर रनटाइम वैलिडेशन, पुराने ऑब्जेक्ट्स की कम्पैटिबिलिटी और रोलबैक शामिल होना चाहिए। किसी नियम को कड़ा करते समय, ambient ratcheting एक अपरिवर्तित लीगेसी फ़ील्ड की सुरक्षा करता है, लेकिन नए मानों के लिए अभी भी कम्पैटिबिलिटी समीक्षा और चरणबद्ध वैलिडेशन की आवश्यकता होती है।

चरण-दर-चरण गहन विश्लेषण

1. नियम स्रोत को परिभाषित करें

+k8s:required, +k8s:minimum=0, या enum कंस्ट्रेंट्स जैसे मार्कर्स का उपयोग करें ताकि फ़ील्ड्स के बगल में नियमों को आसानी से खोजा जा सके। क्रॉस-फ़ील्ड इनवेरिएंट्स के लिए, जनरेटर के बाहर बिज़नेस लॉजिक को छिपाने के बजाय इनवेरिएंट, त्रुटि संदेश और समर्थित वर्ज़न्स को डॉक्यूमेंट करें।

2. जनरेट करें और सत्यापित करें

validation-gen मार्कर्स को पार्स करता है, Go वैलिडेशन फ़ंक्शंस जनरेट करता है, और उन्हें API स्कीम के साथ रजिस्टर करता है। CI जनरेटर, यूनिट टेस्ट्स, kube-api-linter, और OpenAPI डिफ चेक्स चलाता है ताकि मार्कर्स, जनरेट किए गए कोड और पब्लिक स्कीमा में कोई अंतर (drift) न आए। जनरेट की गई फाइलें रिप्रोड्यूसिबल होनी चाहिए और उन्हें कभी भी हाथ से संपादित नहीं किया जाना चाहिए।

3. वर्ज़न इवोल्यूशन को संभालें

कंस्ट्रेंट जोड़ने से पहले संग्रहीत ऑब्जेक्ट्स और क्लाइंट व्यवहार का मूल्यांकन करें। Ambient ratcheting पुराने और नए ऑब्जेक्ट्स की तुलना करता है: यदि कोई फ़ील्ड शब्दार्थ रूप से अपरिवर्तित है, तो नया नियम उसके पुराने मान के कारण अपडेट को ब्लॉक नहीं करता है; यदि फ़ील्ड बदलती है, तो नया नियम लागू होता है। नियमों को कड़ा करने के लिए अभी भी माइग्रेशन टूल्स, ऑडिट मेट्रिक्स और स्पष्ट त्रुटियों की आवश्यकता होती है।

4. रिलीज़ और रोलबैक

चरणबद्ध रोलआउट से पहले कम्पैटिबिलिटी सूट्स और शैडो वैलिडेशन में रिजेक्शन दरों को मापें। API त्रुटि कोड, रिसोर्स वर्ज़न्स और क्लाइंट पुनः प्रयासों (retries) की निगरानी करें। यदि त्रुटि दरें बढ़ती हैं, तो स्वीकार किए गए ऑब्जेक्ट्स को पठनीय रखते हुए जनरेटर या नियम वर्ज़न को रोलबैक करें। डिफ़ॉल्ट रूप से सक्षम एक GA फीचर गेट माइग्रेशन परीक्षण की आवश्यकता को समाप्त नहीं करता है।

एक मजबूत उत्तर का उदाहरण

मैं वैलिडेशन को एक वर्ज़न्ड API कॉन्ट्रैक्ट मानता हूँ। +k8s: जैसे मार्कर्स फ़ील्ड कंस्ट्रेंट्स को व्यक्त करते हैं, validation-gen रिप्रोड्यूसिबल Go कोड उत्पन्न करता है, और CI इन तीनों दृश्यों को संरेखित रखने के लिए यूनिट टेस्ट्स, एक लिंटर और OpenAPI डिफ्स का उपयोग करता है। क्रॉस-फ़ील्ड इनवेरिएंट्स के लिए समर्पित टेस्ट्स और स्थिर त्रुटियों की आवश्यकता होती है, और जनरेट की गई फाइलों को मैन्युअल रूप से संपादित नहीं किया जाना चाहिए।

किसी नियम को कड़ा करने से पहले, मैं संग्रहीत ऑब्जेक्ट्स को फिर से चलाता (replay) हूँ और क्लाइंट व्यवहार को मापता हूँ। Ambient ratcheting केवल एक अपरिवर्तित लीगेसी मान को छूट देता है; एक बार जब कोई उपयोगकर्ता उस फ़ील्ड को संपादित करता है, तो नया नियम लागू होता है, इसलिए माइग्रेशन टूलींग और चरणबद्ध रोलआउट आवश्यक बने रहते हैं। लॉन्च के बाद मैं रिजेक्शन दरों, वर्ज़न वितरण और पुनः प्रयासों पर नज़र रखता हूँ, और आवश्यकता पड़ने पर नियम वर्ज़न को रोलबैक करता हूँ। GA एक एकीकृत तंत्र प्रदान करता है, न कि कम्पैटिबिलिटी गवर्नेंस का विकल्प।

सामान्य गलतियाँ

  • जनरेटर को केवल एक फॉर्मेटिंग टूल मानना और सर्वर रनटाइम व्यवहार में इसकी भूमिका को अनदेखा करना।
  • जनरेट किए गए सर्वर कोड और वर्ज़न कम्पैटिबिलिटी की अनदेखी करते हुए OpenAPI को एकमात्र वैलिडेशन बिंदु मानना।
  • Ambient ratcheting को एक स्थायी छूट के रूप में गलत समझना, जबकि संपादित फ़ील्ड्स अभी भी नए वैलिडेशन से गुजरते हैं।
  • संग्रहीत ऑब्जेक्ट्स के लिए माइग्रेशन योजना, रोलआउट मेट्रिक्स, या रोलबैक पथ के बिना नियम जोड़ना।

फॉलो-अप प्रश्न और उत्तर

हाथ से वैलिडेशन फ़ंक्शन लिखना जारी क्यों न रखें?

हाथ से लिखा गया लॉजिक बिखरा हुआ होता है, इसे खोजना कठिन होता है, और संसाधनों में इसके असंगत व्यवहार की संभावना होती है। मार्कर्स, एक जनरेटर, और एक लिंटर नियमों को समीक्षा योग्य, रिप्रोड्यूसिबल और OpenAPI के माध्यम से प्रकाशित करना आसान बनाते हैं।

क्या न्यूनतम मान को कड़ा करने से पुराने ऑब्जेक्ट्स तुरंत टूट जाएंगे?

एक ऐसा अपडेट जो फ़ील्ड को अपरिवर्तित छोड़ता है, वह ambient ratcheting के माध्यम से अपने ऐतिहासिक मान को बनाए रख सकता है। कोई ऑब्जेक्ट बनाना या उस फ़ील्ड को संपादित करना नए नियम को पूरा करना चाहिए, इसलिए ऑब्जेक्ट्स को पढ़ने, कॉपी करने या दोबारा लिखने वाले क्लाइंट्स की अभी भी समीक्षा की आवश्यकता है।

आप कैसे साबित करते हैं कि जनरेट किया गया कोड ड्रिफ्ट नहीं हुआ है?

CI में जनरेटर को पिन करें, जेनरेशन चलाएं, और यदि वर्किंग ट्री बदलती है तो उसे फेल करें। OpenAPI, यूनिट टेस्ट्स, और एंड-टू-एंड रिजेक्शन व्यवहार की तुलना करें; जनरेटर अपग्रेड को रोल आउट करने से पहले जनरेट किए गए डिफ की समीक्षा करें।

सार्वजनिक स्रोत

संबंधित प्रश्न