kubectl बनाम kubectl लागू करें?


266

प्रलेखन द्वारा मुझे जो समझा गया है, वह है:

  • kubectl create = क्लस्टर में एक नया k8s संसाधन बनाता है
  • kubectl प्रतिस्थापित = लाइव क्लस्टर में एक संसाधन को अद्यतन करता है
  • kubectl लागू होना = यदि मैं बनाना चाहता हूँ + प्रतिस्थापन ( संदर्भ) )

मेरे सवाल हैं

  1. एक क्लस्टर में एक ही कार्य करने के लिए तीन ऑपरेशन क्यों हैं?
  2. इन ऑपरेशनों के लिए उपयोग के मामले क्या हैं?
  3. वे हुड के नीचे एक दूसरे से कैसे भिन्न होते हैं?

जवाबों:


315

वे दो अलग-अलग दृष्टिकोण हैं:

इंपीरियल मैनेजमेंट

kubectl createजिसे हम इंपीरियल मैनेजमेंट कहते हैं । इस दृष्टिकोण पर आप Kubernetes API को बताते हैं कि आप क्या बनाना, बदलना या हटाना चाहते हैं, न कि कैसे आप चाहते हैं कि आपका K8s क्लस्टर दुनिया जैसा दिखे।

घोषणा प्रबंधन

kubectl applyDeclarative Management दृष्टिकोण का एक हिस्सा है , जहाँ आपके द्वारा किसी लाइव ऑब्जेक्ट (यानी के माध्यम से scale) पर लागू किए गए परिवर्तनों को " बनाए रखा जाता है " भले ही आप applyऑब्जेक्ट में अन्य परिवर्तन करें।

आप कुबेरनेट्स ऑब्जेक्ट मैनेजमेंट प्रलेखन में अनिवार्य और घोषणात्मक प्रबंधन के बारे में अधिक पढ़ सकते हैं ।


24
फिर उत्पादन में किसका उपयोग किया जाए?
योगेश जिलहवार

11
@YogeshJilhawar दोनों ही उत्पादन में काम करने के वैध तरीके हैं।
गिवेल

2
तो संक्षेप में, यह एक आंशिक पैच बनाम पूरे ऑब्जेक्ट संशोधन की तरह है?
रयाल

12
इस उत्तर ने पुष्टि नहीं की कि ये दोनों ऑपरेशन हैं kubectl createऔर kubectl applyसमान प्रभाव हैं या नहीं।
नवाज

61
@ नवाज़ - वे अलग-अलग काम करते हैं। kubectl createयदि संसाधन पहले से मौजूद है, तो एक त्रुटि होगी। kubectl applyनहीं होगा। अंतर यह है कि kubectl createविशेष रूप से "इस चीज़ को बनाएं" kubectl applyकहते हैं, जबकि कहते हैं "जो कुछ भी आवश्यक है (बनाएं, अपडेट, आदि) उसे ऐसा दिखने के लिए बनाएं"।
श्री लामा

44

जब एक CI स्क्रिप्ट चलती है, तो आपको क्रिएट कमांड के साथ परेशानी होगी यदि कोई संसाधन पहले से मौजूद है, तो कोई त्रुटि करता है।

आप क्या कर सकते है लागू करने (कथात्मक पैटर्न) अपने जरूरी आदेश के उत्पादन, उपयोग करके --dry-run=trueऔर -o yamlविकल्प:

kubectl create whatever --dry-run=true -o yaml | kubectl apply -f -

यदि संसाधन पहले से मौजूद है (और जरूरत पड़ने पर संसाधन को अपडेट कर देगा) तो ऊपर दिए गए कमांड में कोई त्रुटि नहीं होगी।

यह कुछ मामलों में बहुत उपयोगी है, जहां आप घोषणात्मक पैटर्न का उपयोग नहीं कर सकते हैं (उदाहरण के लिए डॉक-रजिस्ट्री रहस्य बनाते समय)।


वैकल्पिक रूप से, इसे बनाने से पहले संसाधन को हटा दें - --ignore-not-found ध्वज के साथ। इस से आगे नहीं बढ़ेगी AlreadyExists त्रुटि। उदाहरण के लिए:kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
नोम मानस

33

बस मेरी समझ से अधिक सीधे उत्तर देने के लिए:

apply- किसी मौजूदा वस्तु में वृद्धिशील परिवर्तन
createकरता है - एक पूरी नई वस्तु बनाता है (पहले गैर-मौजूदा / हटाए गए)


इसे DigitalOcean लेख से लेना जो कुबेरनेट वेबसाइट द्वारा जोड़ा गया था:

हम यहां बनाने के बजाय लागू का उपयोग करते हैं ताकि भविष्य में हम पूरी तरह से अधिलेखित करने के बजाय इनग्रेड कंट्रोलर ऑब्जेक्ट में परिवर्तन लागू कर सकें।


क्या यह? जैसे कि जब हम docker-compose का उपयोग करते हैं: + applylike like docker-compose up -d+ use का उपयोग करते createहैं docker-compose up -d --build?
व्हिस्कीप

8

ये अनिवार्य आदेश हैं :

kubectl run = kubectl create deployment

लाभ:

  • सरल, सीखने में आसान और याद रखने में आसान।
  • क्लस्टर में परिवर्तन करने के लिए केवल एक ही चरण की आवश्यकता है।

नुकसान:

  • परिवर्तन समीक्षा प्रक्रियाओं के साथ एकीकृत न करें।
  • परिवर्तनों के साथ संबद्ध ऑडिट ट्रेल प्रदान न करें।
  • लाइव क्या है इसके अलावा रिकॉर्ड का एक स्रोत प्रदान न करें।
  • नई ऑब्जेक्ट बनाने के लिए कोई टेम्प्लेट प्रदान न करें।

ये अनिवार्य वस्तु विन्यास हैं :

kubectl create -f your-object-config.yaml

kubectl delete -f your-object-config.yaml

kubectl replace -f your-object-config.yaml

अनिवार्य आदेशों की तुलना में लाभ:

  • Git जैसे स्रोत नियंत्रण प्रणाली में संग्रहीत किया जा सकता है।
  • पुश और ऑडिट ट्रेल्स से पहले परिवर्तन की समीक्षा करने जैसी प्रक्रियाओं के साथ एकीकृत कर सकते हैं।
  • नई वस्तुओं को बनाने के लिए एक टेम्पलेट प्रदान करता है।

अनिवार्य आदेशों की तुलना में नुकसान:

  • ऑब्जेक्ट स्कीमा की बुनियादी समझ की आवश्यकता है।
  • एक YAML फ़ाइल लिखने के अतिरिक्त चरण की आवश्यकता है।

घोषणात्मक वस्तु विन्यास की तुलना में लाभ:

  • सरल और समझने में आसान।
  • कुबेरनेट्स संस्करण 1.5 के बाद अधिक परिपक्व।

घोषणात्मक वस्तु विन्यास की तुलना में नुकसान:

  • फाइलों पर सबसे अच्छा काम करता है, निर्देशिका नहीं।
  • लाइव ऑब्जेक्ट्स के अपडेट कॉन्फ़िगरेशन फ़ाइलों में प्रतिबिंबित होने चाहिए, या वे अगले प्रतिस्थापन के दौरान खो जाएंगे।

ये घोषणात्मक वस्तु विन्यास हैं

kubectl diff -f configs/

kubectl apply -f configs/

अनिवार्य वस्तु विन्यास की तुलना में लाभ:

  • लाइव ऑब्जेक्ट में सीधे किए गए परिवर्तन को बनाए रखा जाता है, भले ही वे कॉन्फ़िगरेशन फ़ाइलों में वापस मर्ज न किए गए हों।
  • निर्देशिकाओं पर काम करने के लिए बेहतर समर्थन और स्वचालित रूप से ऑपरेशन प्रकार (बनाने, पैच, हटाएं) प्रति वस्तु का पता लगाने के लिए।

अनिवार्य वस्तु विन्यास की तुलना में नुकसान:

  • जब वे अनपेक्षित होते हैं, तो डीबग करना और परिणाम समझना कठिन होता है।
  • भिन्न का उपयोग करके आंशिक अद्यतन जटिल मर्ज और पैच ऑपरेशन बनाते हैं।

3

आधिकारिक दस्तावेज से नीचे दिए गए स्पष्टीकरण ने मुझे समझने में मदद की kubectl apply

यह आदेश उस कॉन्फ़िगरेशन के संस्करण की तुलना करेगा जिसे आप पिछले संस्करण के साथ धक्का दे रहे हैं और आपके द्वारा किए गए परिवर्तनों को लागू करते हुए, आपके द्वारा निर्दिष्ट गुणों के बिना किसी भी स्वचालित परिवर्तन को अधिलेखित किए बिना।

kubectl create दूसरी ओर (गैर-मौजूदा होना चाहिए) संसाधन बनाएंगे।


1

kubectl create एक समय में एक ऑब्जेक्ट कॉन्फ़िगरेशन फ़ाइल के साथ काम कर सकता है। इसे अनिवार्य प्रबंधन के रूप में भी जाना जाता है

kubectl create -f filename | url |

kubectl निर्देशिकाओं और इसके उप निर्देशिकाओं के साथ काम करता है जिसमें ऑब्जेक्ट कॉन्फ़िगरेशन यम फाइलें होती हैं। इसे घोषणात्मक प्रबंधन के रूप में भी जाना जाता है। निर्देशिकाओं से एकाधिक ऑब्जेक्ट कॉन्फ़िगरेशन फ़ाइलों को उठाया जा सकता है। kubectl लागू -f निर्देशिका /

विवरण:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/


0

हम कुबेरनेट्स से प्यार करते हैं क्योंकि एक बार जब हम उन्हें दे देते हैं तो हम चाहते हैं कि यह पता चले कि हमारी भागीदारी के बिना इसे कैसे प्राप्त किया जाए।

"सृजन" चीजों को अपने हाथों में लेकर जीओडी की तरह है। यह स्थानीय डिबगिंग के लिए अच्छा है जब आप केवल POD के साथ काम करना चाहते हैं और न कि abt परिनियोजन / प्रतिकृति नियंत्रक की देखभाल करना चाहते हैं।

"लागू" नियमों द्वारा खेल रहा है। "लागू करें" एक मास्टर टूल की तरह है जो पॉड्स को प्रबंधित करने के लिए आपको बनाने और संशोधित करने और कुछ भी नहीं करने में मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.