प्रिय दोस्त, तुमने Kubernetes बना लिया है
(macchaffee.com)-
दोस्त के नाम एक चिट्ठी
- यह समझाने वाला लेख कि Kubernetes से बचने की कोशिश करते-करते आखिरकार वैसा ही एक सिस्टम बना लिया गया।
- दोस्त ने साधारण container execution के लिए "boring technology" चुनना चाहा, लेकिन आखिर में जटिल scripts और configuration की वजह से समस्याएँ खड़ी हो गईं।
- Docker Compose पर जाने से भी सारी समस्याएँ हल नहीं होतीं, और deployment, rolling updates, rollback, scaling के लिए अलग solutions की ज़रूरत पड़ती है—यह बात समझ में आती है.
-
सर्वर विस्तार और नेटवर्क की जटिलता
- दूसरे server तक विस्तार करने की ज़रूरत महसूस होती है।
- service discovery की कोशिश के लिए Tailscale जैसे overlay network का उपयोग किया जाता है।
- network की जटिलता सुलझाने की कोशिश की जाती है, लेकिन अंत में और ज़्यादा समस्याओं का सामना करना पड़ता है।
-
maintenance और automation
- सवाल उठता है कि अगर scripts बनाने वाला व्यक्ति छुट्टी पर चला जाए या नौकरी छोड़ दे, तो जटिल setup और undocumented configuration changes को कौन संभालेगा।
- custom scripts की maintenance समस्या हल करने के लिए Ansible का उपयोग कर VM को immutable और version-controlled बनाया जाता है।
- यह सोचा जाता है कि Kubernetes का उपयोग न करने से maintenance अधिक आसान होगी।
-
container spawning और security समस्याएँ
- programmatically दूसरे containers बनाने की आवश्यकता सामने आती है।
- Docker socket को web app पर mount करना security के लिहाज़ से जोखिम भरा है, इसलिए इसे हल करने के लिए अलग service लिखी जाती है।
- Docker API के सिर्फ सुरक्षित हिस्से को expose करने वाली अलग service लिखकर समस्या हल की जाती है।
-
निष्कर्ष
- आखिरकार यह एहसास होता है कि Kubernetes जैसा ही एक सिस्टम बना लिया गया है।
- standard configuration format, deployment method, overlay network, service discovery, immutable nodes, API server सहित एक जटिल सिस्टम पूरा हो जाता है।
- आखिरकार यह एहसास होता है कि Kubernetes जैसा ही एक सिस्टम बना लिया गया है।
-
PS
- यह नहीं कहा जा रहा कि Kubernetes की जगह कोई बेहतर solution हो ही नहीं सकता।
- लेकिन Kubernetes को जटिल कहकर खारिज करने से पहले, यह समझने की सलाह दी जाती है कि वह किन समस्याओं को हल करने की कोशिश करता है।
8 टिप्पणियां
डिप्लॉयमेंट handover की समस्या हल करने के लिए Kubernetes अपनाने की बात मुझे ज़्यादा समझ में नहीं आती।
मेंटेनेंस और ऑटोमेशन code level पर आसानी से किए जा सकते हैं.
Infra as code भी संभव है.
EKS जैसी managed k8s service environments में load balancer भी होता है और Route 53 integration भी संभव है, लेकिन self-hosted k8s में न तो load balancer implementation होता है और न ही DNS integration बहुत लचीला होता है। जिन कंपनियों में k8s management team अलग से होती है, वहाँ आपके बताए हुए फ़ायदे सच हो सकते हैं.
सुनने में यह एक ठीक-ठाक solution लगता है, लेकिन असल में इस्तेमाल करने पर यह हर situation में काम नहीं करता।
k8s को मैनेज करने वाली टीम न हो तब भी इसे इस्तेमाल करना आसान है। EKS इस्तेमाल कर लें।
क्या यह उस दावे जैसा ही नहीं है कि सिर्फ source code दे देने से ही handover पूरा हो जाता है? मुझे लगता है कि work manual और काम के execution history की अब भी ज़रूरत होगी।
Infra as Code का मकसद खुद ही यही है कि सिर्फ source code देकर काम पूरा हो जाए.
हाँ, बेशक किसी भी code की तरह इसकी भी बुनियादी documentation तो होनी ही चाहिए.
अगर source code अच्छी तरह लिखा गया हो और documentation अच्छी हो, तो यह संभव है.
काम के manual और काम के execution history अलग से हों तो मदद मिलेगी, लेकिन वह इस लेख से अलग बात लगती है.
Hacker News राय
कई कंपनियों में shell scripts का उपयोग करके deployment सफलतापूर्वक करने का अनुभव है
Kubernetes में YAML files संभालने के लिए दो-तीन समर्पित कर्मचारियों की ज़रूरत पड़ती है
यह सोचना गलत है कि simple चीज़ें fragile होती हैं
ऐसे मामले भी होते हैं जहाँ Kubernetes की ज़रूरत नहीं होती
shell scripts से iptables rules और sysctl editing को आसानी से manage किया जा सकता है
Kubernetes की आलोचना करना unprofessional नहीं है
यह मान लेना गलत है कि homegrown systems की सारी limitations cost हैं, और general-purpose solutions की सारी flexibility benefits हैं
Kubernetes की समस्या यह है कि अनगिनत open source libraries सिस्टम को समझना कठिन बना देती हैं और bugs पैदा करती हैं
जो लोग Kubernetes की learning curve पार कर चुके हैं, वे कहते हैं कि complexity इतनी बुरी नहीं है