डाउनटाइम के बिना डॉकर कंटेनर अपडेट करें

मान लीजिए कि मेरे पास एक वेब सर्वर (जैसे अपाचे 2) के साथ एक डॉकर कंटेनर है । अब मैं इसके तहत ओएस को अपडेट करना चाहता हूं । यह एसएफ उत्तर कहते हैं कि सबसे अच्छा तरीका आधार छवि और मेरी अपाचे छवि का पुनर्निर्माण करना है । लेकिन छवि को तैनात करने का मतलब डाउनटाइम है क्योंकि मुझे नया बनाने से पहले पुराने कंटेनर को हटाना होगा, इसलिए केवल एक कंटेनर है जो पोर्ट 80/443 के लिए बाध्यकारी है ।

लेकिन मैं इस अपडेट को शून्य डाउनटाइम के साथ कैसे तैनात कर सकता हूं? क्या मुझे लोड बैलेंसर का उपयोग करना चाहिए और अंतर-कंटेनर संचार का उपयोग करना चाहिए? और मैं लोड बैलेंसर को कैसे अपडेट करूं?

आदर्श लक्ष्य परिदृश्य

हां, आपको लोड बैलेंसर का उपयोग करना चाहिए और एक बार में एक उदाहरण अपडेट करना चाहिए । मुझे यकीन नहीं है कि अंतर-कंटेनर संचार कहां आता है ।

एक उदाहरण के रूप में, कल्पना करें कि आपके पास एक लोड बैलेंसर है जो आपकी साइट ए की सेवा करता है उपयोगकर्ता केवल इसे एएस से कनेक्ट करते हैं और केवल इसे "ए"के रूप में जानते हैं । लोड बैलेंसर जानता है कि दो या अधिक बैकएंड हैं (बी, सी, आदि । ), और चाहे वे वीएम हों या कंटेनर कोई मायने नहीं रखते ।

फिर, आप बैकएंड को अपग्रेड करना चाहते हैं, जो इस मामले में अपाचे उदाहरण हैं ।

  1. लोड बैलेंसर के लिए पात्र बैकएंड से बी लें ताकि यह अब किसी भी ट्रैफ़िक को स्वीकार न करे ।
  2. वर्तमान में लाइव अनुरोधों की प्रतीक्षा करें और मौजूदा कनेक्शन बंद हो जाएं ।
  3. कंटेनर या अंतर्निहित वीएम को अपडेट करें जो बी परोसता है
  4. बी को पुनरारंभ करें, इसके लोड होने की प्रतीक्षा करें और काम करना शुरू करें
  5. टेस्ट बी यह सुनिश्चित करने के लिए कि यह नए अनुरोधों को ठीक से प्रस्तुत कर रहा है
  6. ट्रैफ़िक को फिर से सक्षम करने के लिए लोड बैलेंसर बैकएंड पूल में बी जोड़ें

फिर, सी, डी, आदि के लिए एक ही प्रक्रिया करें ।

ध्यान दें कि वहाँ एक डॉकर कंटेनरों के इन-प्लेस अपग्रेड के लिए खुला अनुरोध, नवंबर 2013 से, लेकिन इसमें बहुत प्रगति नहीं हुई है, इसलिए उपरोक्त समाधान यह है कि आपको इस बीच क्या करना चाहिए ।

मौजूदा लाइव साइट के लिए क्या करें

संभवतः, आप यह पूछ रहे हैं क्योंकि आप पहले से ही इस मॉडल में एक लाइव साइट चला रहे हैं और आप इसे डाउनटाइम के बिना अपग्रेड करना चाहेंगे । इसलिए, हमें ऊपर दिए गए आदर्श लक्ष्य राज्य तक पहुंचने की आवश्यकता है, लेकिन वृद्धिशील रूप से ।

आइए मान लें कि:

  • आपके पास अपने कंटेनर की ओर इशारा करते हुए एक डीएनएस नाम है
  • आपका कंटेनर कुछ आईपी पते पर चलता है
  • आपके उपयोगकर्ता कंटेनर के आईपी पते को नहीं जानते हैं और यह कहीं भी हार्ड-कोडेड नहीं है

अगर इन मान्यताओं में गलत कर रहे हैं, आप चाहिए पहले यह तय है कि इस तरह से यह सही है.

फिर, इन चरणों का पालन करें:

  1. एक नए आईपी पर एक लोड बैलेंसर बनाएं और इसे मौजूदा कंटेनर में इसके एकमात्र बैकएंड के रूप में इंगित करें
  2. सीधे कंटेनर आईपी के बजाय लोड बैलेंसर को इंगित करने के लिए डीएनएस बदलें
  3. एक ही वीएम + कंटेनर सेटअप के साथ एक समान अपाचे बैकएंड जोड़ें
  4. अब आपके पास दो बैकएंड बी और सी के साथ एक लोड बैलेंसर है, इसलिए उन्हें एक बार में अपग्रेड करने के लिए "आदर्श लक्ष्य परिदृश्य" अनुभाग में निर्देशों का पालन करें

लोड बैलेंसर को कैसे अपडेट करें

आसान (होस्ट किया गया) तरीका

सबसे आसान विकल्प यह है कि आप अपना खुद का बैलेंसर न चलाएं । उदाहरण के लिए, यदि आप एक क्लाउड प्लेटफ़ॉर्म का उपयोग कर रहे हैं जो एक सेवा के रूप में लोड संतुलन प्रदान करता है, तो इसका उपयोग करने पर विचार करें और फिर लोड बैलेंसर का रखरखाव और अद्यतन कोई समस्या नहीं है ।

मैनुअल तरीका

यदि आप अपना खुद का लोड बैलेंसर चला रहे हैं, तो संकेत की एक और परत (यानी, डीएनएस) जोड़ने से मदद मिलेगी । आइए निम्नलिखित मान लें:

  • कि हमारे पास एक होस्ट नाम है जो हमारे लोड बैलेंसर के आईपी को हल करता है जिसे हम अपडेट करना चाहते हैं
  • हमारे लोड बैलेंसर में पी 1, पी 2, आदि का बैकएंड पूल है ।

हम निम्नानुसार आगे बढ़ते हैं:

  • नए सॉफ्टवेयर संस्करण के साथ एक नया लोड बैलेंसर बी बनाएं
  • सभी बैकएंड पूल इंस्टेंस पी 1, पी 2, आदि जोड़ें। बैकएंड के रूप में हमारे नए लोड बैलेंसर बी के लिए
  • ए के साथ डीएनएस रिज़ॉल्यूशन में बी का आईपी पता जोड़ें

    • अब हम प्रभावी रूप से डीएनएस को लोड बैलेंसर के रूप में उपयोग कर रहे हैं
    • यदि ए और बी के लिए प्रविष्टियां अप्रकाशित हैं, तो वे प्रभावी रूप से 50-50 हैं
    • अब यह देखने के लिए देखें कि बी कैसा प्रदर्शन करता है, क्या कोई त्रुटि है, आदि ।
    • यदि बी के साथ कुछ भी गलत है, तो निम्नानुसार पूर्ववत करें:

      1. डीएनएस कॉन्फ़िगरेशन से बी निकालें
      2. डीएनएस में बी प्रविष्टि के गायब होने की प्रतीक्षा करें (यानी, प्रतीक्षा करें टीटीएल समाप्त करने के लिए)
      3. नीचे बारी B
  • मान लें कि आपने बी के लिए "बर्न-इन" परीक्षण किया है और सब कुछ ठीक है
  • अद्यतन करें प्राथमिकता और वजन डीएनएस में बी के लिए धीरे-धीरे
  • डीएनएस से ए को पूरी तरह से हटा दें
  • डीएनएस टीटीएल के समाप्त होने की प्रतीक्षा करें; ए को अब कोई अनुरोध नहीं मिलना चाहिए
  • नीचे बारी एक

और तुम हो गए।

विवरण, आरेख और टूलींग

इन राइट-अप और टूल को देखें जो आपको प्रक्रिया को स्वचालित करने में मदद कर सकते हैं, लेकिन सामान्य विचार समान है:

नैतिक

"कंप्यूटर विज्ञान में सभी समस्याओं को एक और स्तर के संकेत द्वारा हल किया जा सकता है, निश्चित रूप से बहुत अधिक अप्रत्यक्ष की समस्या को छोड़कर । "डेविड व्हीलर