उद्देश्य
- kubectl का उपयोग करके रोलिंग अपडेट करें।
एप्लिकेशन को अपडेट करना
उपयोगकर्ता उम्मीद करते हैं कि एप्लिकेशन हर समय उपलब्ध रहेंगे और डेवलपर्स से दिन में कई बार उनके नए संस्करणों को डिप्लॉय करने की अपेक्षा की जाती है। कुबेरनेट्स में यह रोलिंग अपडेट के साथ किया जाता है। रोलिंग अपडेट पॉड को नए इंस्टेंस के साथ अपडेट करके शून्य डाउनटाइम के साथ डिप्लॉयमेंट अपडेट को सक्षम करता है। नए पॉड्स उपलब्ध संसाधनों के साथ नोड्स पर शेड्यूल किए जाएंगे।
पिछले मॉड्यूल में हमने कई इंस्टेंस चलाने के लिए अपने एप्लिकेशन को स्केल किया था। एप्लिकेशन की उपलब्धता को प्रभावित किए बिना अपडेट करने के लिए यह आवश्यक है। डिफ़ॉल्ट रूप से, अपदटेस के दौरान अनुपलब्ध पॉड्स की अधिकतम संख्या और बनाए जा सकने वाले नए पॉड्स की अधिकतम संख्या एक है। दोनों विकल्पों को या तो संख्या या (पॉड्स के) प्रतिशत में कॉन्फ़िगर किया जा सकता है। कुबेरनेट्स में, अपदटेस को संस्करणबद्ध किया जाता है और किसी भी डिप्लॉयमेंट अपदटेस को पिछले (स्थिर) संस्करण में वापस लाया जा सकता है।
सारांश:
- ऐप अपडेट करना
रोलिंग अपडेट पॉड्स को नए इंस्टेंस के साथ अपडेट करके डिप्लॉयमेंट के अपडेट को शून्य डाउनटाइम के साथ होने देता है।
रोलिंग अपडेट अवलोकन
एप्लिकेशन स्केलिंग के समान, यदि कोई डिप्लॉयमेंट सार्वजनिक रूप से एक्सपोज़ होता है, तो सर्विस केवल अपडेट के दौरान उपलब्ध पॉड्स पर ट्रैफ़िक को लोड-बैलेंस करेगी। उपलब्ध पॉड एक इंस्टेंस है जो एप्लिकेशन के उपयोगकर्ताओं के लिए उपलब्ध है।
रोलिंग अपडेट निम्नलिखित क्रियाओं की अनुमति देते हैं:
- किसी एप्लिकेशन को एक एनवायरनमेंट से दूसरे एनवायरनमेंट में प्रचारित करें (कंटेनर इमेज अपडेट के माध्यम से)
- पिछले संस्करणों में रोलबैक करें
- शून्य डाउनटाइम के साथ एप्लीकेशन का निरंतर इंटीग्रेशन और निरंतर डिलीवरी
यदि कोई डिप्लॉयमेंट सार्वजनिक रूप से प्रकट होता है, तो सर्विस अपडेट के दौरान केवल उपलब्ध पॉड्स पर ट्रैफ़िक लोड-बैलेंस करेगी।
चलिए अगले भाग पर चलते हैं और अपने एप्लिकेशन को एक नए संस्करण में अपडेट और रोलबैक करते है।
ऐप का संस्करण अपडेट करें
अपनी तैनाती को सूचीबद्ध करने के लिए, get deployments
उपकमांड चलाएँ:
kubectl get deployments
चल रहे पॉड्स को सूचीबद्ध करने के लिए, get pods
उपकमांड चलाएँ:
kubectl get pods
ऐप का वर्तमान छवि संस्करण देखने के लिए, describe pod
उपकमांड चलाएँ
और image
फ़ील्ड देखें:
kubectl describe pods
एप्लिकेशन की छवि को संस्करण 2 में अद्यतन करने के लिए, set image
उपकमांड का उपयोग करें, इसके बाद परिनियोजन नाम और नया छवि संस्करण लिखें:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
कमांड ने आपके ऐप के लिए एक अलग छवि का उपयोग करने के लिए परिनियोजन को सूचित किया और एक रोलिंग अपडेट शुरू किया। नए पॉड्स की स्थिति जांचें, और पुराने पॉड्स को get pods
उपकमांड के साथ समाप्त होते हुए देखें:
kubectl get pods
अपडेट सत्यापित करें
सबसे पहले, जांचें कि ऐप चल रहा है या नहीं। उजागर आईपी पते और पोर्ट को खोजने के लिए, describe service
कमांड चलाएँ:
kubectl describe services/kubernetes-bootcamp
NODE_PORT नामक एक पर्यावरण चर बनाएं जिसमें निर्दिष्ट नोड पोर्ट का मान हो:
export NODE_PORT='$(kubectl getservices/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')'
echo "NODE_PORT=$NODE_PORT"
इसके बाद, उजागर आईपी और पोर्ट पर curl
करें:
curl http://'$(minikube ip):$NODE_PORT'
हर बार जब आप curl
कमांड चलाएंगे, तो आप एक अलग पॉड से टकराएंगे। ध्यान दें कि सभी पॉड्स अब नवीनतम संस्करण (v2) चला रहे हैं।
आप rollout status
उपकमांड चलाकर भी अपडेट की पुष्टि कर सकते हैं:
kubectl rollout status deployments/kubernetes-bootcamp
ऐप का वर्तमान छवि संस्करण देखने के लिए, describe pod
उपकमांड चलाएँ:
kubectl describe pods
आउटपुट के image
फ़ील्ड में, सत्यापित करें कि आप नवीनतम छवि संस्करण (v2) चला रहे हैं।
अपडेट वापस रोल करें
आइए एक और अपडेट करें, और v10
के साथ टैग की गई छवि को तैनात करने का प्रयास करें:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
डिप्लॉयमेंट की स्थिति देखने के लिए get deployments
का उपयोग करें:
kubectl get deployments
ध्यान दें कि आउटपुट उपलब्ध पॉड्स की वांछित संख्या सूचीबद्ध नहीं करता है। सभी पॉड्स को सूचीबद्ध करने के लिए get pods
उपकमांड चलाएँ:
kubectl get pods
ध्यान दें कि कुछ पॉड्स की स्थिति ImagePullBackOff है।
समस्या के बारे में अधिक जानकारी प्राप्त करने के लिए, describe pod
उपकमांड चलाएँ:
kubectl describe pods
प्रभावित पॉड्स के आउटपुट के event
अनुभाग में, ध्यान दें कि v10
छवि संस्करण रिपॉजिटरी में मौजूद नहीं था।
परिनियोजन को अपने अंतिम कार्यशील संस्करण में वापस लाने के लिए, rollout undo
उपकमांड का उपयोग करें:
kubectl rollout undo deployment/kubernetes-bootcamp
rollout undo
कमांड परिनियोजन को पिछली ज्ञात स्थिति (छवि का v2) में वापस कर देता है। अद्यतन संस्करणित हैं और आप परिनियोजन की किसी भी पूर्व ज्ञात स्थिति पर वापस लौट सकते हैं।
पॉड्स को फिर से सूचीबद्ध करने के लिए get pods
उपकमांड का उपयोग करें:
kubectl get pods
चार पॉड्स चल रहे हैं। इन पॉड्स पर तैनात छवि की जांच करने के लिए, <कोड>describe pods उपकमांड का उपयोग करें:
kubectl describe pods
परिनियोजन एक बार फिर ऐप के स्थिर संस्करण (v2) का उपयोग कर रहा है। रोलबैक सफल रहा.
अपने स्थानीय क्लस्टर को साफ़ करना याद रखें
kubectl delete deployments/kubernetes-bootcamp services/kubernetes-bootcamp