एक फली और एक तैनाती के बीच अंतर क्या है?


241

मैं के साथ फली बना type:deploymentरहा हूँ, लेकिन मैं देखता हूँ कि कुछ प्रलेखन का उपयोग करता है type:pod, और अधिक विशेष रूप से बहु कंटेनर फली के लिए प्रलेखन :

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

लेकिन फली बनाने के लिए मैं सिर्फ एक परिनियोजन प्रकार का उपयोग कर सकता हूं :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

मैंने देखा कि फली के दस्तावेज कहते हैं:

Create कमांड का उपयोग सीधे पॉड बनाने के लिए किया जा सकता है, या यह परिनियोजन के माध्यम से पॉड या पॉड बना सकता है। यह अत्यधिक अनुशंसित है कि आप अपनी फली बनाने के लिए परिनियोजन का उपयोग करें। यह फली फली के लिए देखता है और निर्दिष्ट संख्या बनाए रखने के लिए आवश्यक रूप से नए फली शुरू करेगा। यदि आप अपनी फली की निगरानी करने के लिए परिनियोजन नहीं चाहते हैं (जैसे कि आपकी फली गैर-स्थिर डेटा लिख ​​रही है जो पुनः आरंभ नहीं होगी, या आपकी पॉड बहुत कम समय तक रहने का इरादा है), तो आप सीधे एक पॉड बना सकते हैं कमांड बनाएँ।

नोट: हम फली बनाने के लिए एक परिनियोजन का उपयोग करने की सलाह देते हैं। यदि आप परिनियोजन नहीं बनाना चाहते हैं, तो आपको नीचे दिए गए निर्देशों का उपयोग करना चाहिए।

लेकिन इससे यह सवाल उठता है कि kind:podइसके लिए क्या अच्छा है? क्या आप किसी तैनाती में फली का संदर्भ दे सकते हैं? मुझे कोई रास्ता नहीं दिख रहा था। ऐसा लगता है कि आपको पॉड्स के साथ जो मिलता है वह कुछ अतिरिक्त मेटाडेटा है, लेकिन कोई भी तैनाती विकल्प जैसे कि replicaया पुनरारंभ नीति नहीं है। क्या अच्छा है जो डेटा को जारी नहीं रखता है, एक पुनरारंभ होता है? मुझे लगता है कि मैं एक तैनाती के साथ एक मल्टी-कंटेनर पॉड बनाने में सक्षम हूं।

जवाबों:


190

पॉड और परिनियोजन, कुबेरनेट्स एपीआई में पूर्ण विकसित वस्तुएं हैं। तैनाती प्रतिकृति के माध्यम से पॉड्स बनाने का प्रबंधन करती है। यह क्या उबाल है कि तैनाती टेम्पलेट से लिया कल्पना के साथ फली पैदा करेगा। बल्कि यह संभावना नहीं है कि आपको कभी भी उत्पादन उपयोग के मामले में सीधे पॉड्स बनाने की आवश्यकता होगी।


7
धन्यवाद, लेकिन आप कभी सीधे पॉड्स कब बनाएंगे?
ब्योर्न

11
कस्टम नियंत्रक का होना एक ऐसा मामला है जहाँ आप संभवतः उच्च स्तर के अमूर्तों में से एक का उपयोग करने के बजाय सीधे पॉड बनाना और प्रबंधित करना चाहते हैं।
अनिरुद्ध रामनाथन

24
@BjornTipling जब मैं हटाए जाने पर पॉड बनाने के लिए कुबेरनेट की आवश्यकता नहीं होती तो मैं तैनाती के बिना पॉड्स बनाता हूं। एक उपयोग मामला पहले पॉड बनाकर चीजों का परीक्षण करना है।
user2526795

243

राडेक का जवाब बहुत अच्छा है, लेकिन मैं पिच चाहते में मेरे अनुभव से, आप एक का उपयोग लगभग कभी नहीं होगा होगा वस्तु के साथ तरह फली , क्योंकि वह व्यवहार में कोई मतलब नहीं है।

क्योंकि आपको एक डिप्लॉयमेंट ऑब्जेक्ट - या अन्य कुबेरनेट्स एपीआई ऑब्जेक्ट्स जैसे एक प्रतिकृति नियंत्रक या प्रतिकृति की आवश्यकता होती है - जिसे प्रतिकृतियों (पॉड्स) को जीवित रखने की आवश्यकता होती है (यह कुबेरनेट्स का उपयोग करने के बिंदु की तरह है)।

आप एक विशिष्ट अनुप्रयोग के लिए व्यवहार में क्या उपयोग करेंगे:

  1. परिनियोजन ऑब्जेक्ट (जहां आप अपने एप्लिकेशन कंटेनर / कंटेनर निर्दिष्ट करेंगे) जो आपके ऐप के कंटेनर को कुछ अन्य विशिष्टताओं के साथ होस्ट करेगा।

  2. सेवा ऑब्जेक्ट (जो एक समूहीकरण ऑब्जेक्ट की तरह है और यह एक तथाकथित वर्चुअल आईपी (क्लस्टर आईपी) देता है, podsजिसके लिए एक निश्चित लेबल है - और वे podsमूल रूप से ऐप कंटेनर हैं जिन्हें आपने पूर्व परिनियोजन ऑब्जेक्ट के साथ तैनात किया था )।

आपको सेवा ऑब्जेक्ट रखने की आवश्यकता है क्योंकि podsपरिनियोजन ऑब्जेक्ट से मारा जा सकता है, ऊपर और नीचे स्केल किया जा सकता है, और आप उनके आईपी पते पर भरोसा नहीं कर सकते क्योंकि वे लगातार नहीं होंगे।

तो आपको एक सेवा की तरह एक ऑब्जेक्ट की आवश्यकता होती है , जो उन लोगों को podsएक स्थिर आईपी देता है ।

बस आपको कुछ संदर्भ देना चाहते थे pods, इसलिए आप जानते हैं कि चीजें एक साथ कैसे काम करती हैं।

आशा है कि आपके लिए कुछ चीजें साफ करता हूं, बहुत पहले मैं आपके जूते में नहीं था :)


1
अच्छा जवाब, क्या हमें एक प्रतिकृति की आवश्यकता है या एक प्रतिकृतिकंट्रोलर क्योंकि मैंने सोचा कि तैनाती वस्तु इन वस्तुओं को प्रतिकृतियों को नियंत्रित करती है?
user_mda

3
हाँ, परिनियोजन ऑब्जेक्ट प्रतिकृति को हैंडल करता है, लेकिन आप किसी ऑब्जेक्ट का उपयोग इस तरह से भी कर सकते हैं: ReplicationController या दयालु: ReplicaSet यह स्वयं पर है यदि आप वास्तव में चाहते थे, लेकिन मैंने अभ्यास में बहुत कुछ नहीं देखा है ...
Tomislav मिकुलिन

2
ऐसा क्यों है कि कई kubernetes दस्तावेज़ kind: Podउदाहरण के रूप में देते हैं ? जैसे, env var के
rm.rf.etc

1
मैं नहीं काफी यकीन है, हो सकता है, क्योंकि इसके आसान व्याख्या करने के लिए k8..without में अवधारणाओं वजन नियंत्रकों की, दे रहा हूँ की तैनाती आदि ...
Tomislav Mikulin

1
कुछ ऐसे मामले हैं जब आप पॉड बनाना चाहते हैं, उदाहरण के लिए यदि आप एक टेस्ट साइडकार (उदाहरण helm test) चला रहे हैं, जहां आपको हमेशा के लिए एप्लिकेशन चलाने की आवश्यकता नहीं है, और हमें कई प्रतिकृतियों की आवश्यकता नहीं है, तो उस स्थिति में पॉड उपयुक्त है।
बालकृष्ण

61

Kubernetes के तीन ऑब्जेक्ट प्रकार हैं जिनके बारे में आपको पता होना चाहिए:

  • फली - एक या एक से अधिक निकटता से संबंधित कंटेनर चलाता है
  • सेवाएँ - एक Kubernetes क्लस्टर में नेटवर्किंग सेट करती है
  • परिनियोजन - समान पॉड्स का एक सेट बनाए रखता है, यह सुनिश्चित करता है कि उनके पास सही कॉन्फ़िगरेशन है और उनमें से सही संख्या मौजूद है।

फली:

  • कंटेनरों का एक सेट चलाता है
  • एक बंद देव प्रयोजनों के लिए अच्छा है
  • शायद ही कभी उत्पादन में सीधे उपयोग किया जाता है

तैनाती:

  • समान फली का एक सेट चलाता है
  • आवश्यक रूप से अपडेट करते हुए, प्रत्येक पॉड की स्थिति को मॉनिटर करता है
  • देव के लिए अच्छा है
  • उत्पादन के लिए अच्छा है

और मैं अन्य उत्तरों से सहमत हूं, पॉड्स के बारे में भूल जाओ और बस तैनाती का उपयोग करें। क्यों? दूसरी गोली बिंदु को देखो, यह प्रत्येक पॉड की स्थिति की निगरानी करता है, आवश्यकतानुसार अपडेट करता है।

इसलिए, इस तरह के रूप में त्रुटि संदेशों के साथ संघर्ष करने के बजाय:

निषिद्ध: पॉड अपडेट के अलावा अन्य फ़ील्ड नहीं बदल सकते हैं spec.containers[*].image

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


9

फली कंटेनर उदाहरण है।

यहां छवि विवरण दर्ज करें

का आउटपुट है replicas: 3

एक के बारे में सोचो deploymentकई चल रहे उदाहरण (प्रतिकृति) हो सकते हैं।

//deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: tomcat-deployment222
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 3
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:9.0
        ports:
        - containerPort: 8080

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

तो क्या हम फली को तैनाती की प्रतिकृतियों में से एक नाम दे सकते हैं?
कियोरिया

@kioria, "परिनियोजन प्रतिकृतियां" से आपका क्या अभिप्राय है?
सेरकन

@serkan मेरा मतलब है कि यह प्रतिकृतियां: तैनाती की युक्ति से 3।
कियोरिया

@kioria, replicas: 3छवि के शीर्ष भाग का संदर्भ देता है, इसका मतलब है "हे, जब आप इस प्रक्रिया को चलाते हैं, तो 3 आभासी / वास्तविक कंप्यूटर बनाएं - उदाहरण।" इसकी तरह "तैनाती" एक घर है और "पॉड्स" व्यक्ति हैं। एक घर और उसके अंदर तीन व्यक्ति जो काम करते हैं। आप इसके लिए क्या करने की कोशिश कर रहे हैं?
सेरकन

6

फली कंटेनरों का संग्रह है और कुबेरनेट्स की मूल वस्तु है। फली के सभी कंटेनर एक ही नोड में झूठ बोलते हैं।

  • उत्पादन के लिए उपयुक्त नहीं है
  • कोई रोलिंग अद्यतन नहीं

कुबेरनेट्स में तैनाती एक प्रकार का नियंत्रक है।

Controllers use a Pod Template that you provide to create the Pods for which it is responsible.

परिनियोजन एक प्रतिकृति बनाता है जो बदले में यह सुनिश्चित करता है कि, CurrentReplicas हमेशा वांछितReplicas के समान है।

लाभ:

  • आप तैनाती का उपयोग करके अपने परिवर्तनों को रोलआउट और रोलबैक कर सकते हैं
  • प्रत्येक फली की स्थिति पर नज़र रखता है
  • उत्पादन के लिए सबसे उपयुक्त है
  • रोलिंग अपडेट का समर्थन करता है

4

मैं कुबेरनेट्स इन एक्शन बुक से कुछ informations जोड़ना चाहता हूं , ताकि आप पॉड, परिनियोजन और प्रतिकृतिकंट्रोलर (रेप्लिकासेट) जैसे कुबेरनेट संसाधनों के बीच सभी चित्र और संबंध जोड़ सकें।

फली

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

एक प्रतिकृति , जैसा कि नाम से पता चलता है, उनके पुनरीक्षण इतिहास के साथ बनाए गए प्रतिकृतियों ( पोड्स) का एक सेट है ।

(ReplicaSet एक पुराने वस्तु बुलाया फैली ReplicationController -। जो वास्तव में है ही लेकिन संशोधन इतिहास के बिना)

एक रेप्लिकासेट लगातार चलने वाली फली की सूची की निगरानी करता है और सुनिश्चित करता है कि एक निश्चित विनिर्देश से मेल खाते हुए फली की संख्या हमेशा वांछित संख्या से मेल खाती है।

यहां छवि विवरण दर्ज करें

Removing a pod from the scope of the ReplicationController comes in handy
when you want to perform actions on a specific pod. For example, you might 
have a bug that causes your pod to start behaving badly after a specific amount 
of time or a specific event.

एक परिनियोजन

एक उच्च-स्तरीय संसाधन है जो अनुप्रयोगों को तैनात करने और उन्हें घोषित रूप से अपडेट करने के लिए है।

जब आप परिनियोजन बनाते हैं , तो एक प्रतिकृति संसाधन नीचे (अंततः उनमें से अधिक) बनाया जाता है। ReplicaSets दोहराने और फली का प्रबंधन, साथ ही। एक तैनाती का उपयोग कर, वास्तविक फली बनाई गई हैं और द्वारा प्रबंधित तैनाती की ReplicaSets , नहीं द्वारा तैनाती सीधे यहां छवि विवरण दर्ज करें

आइए सोचते हैं कि क्या हुआ है। अपने परिनियोजन संसाधन में पॉड टेम्प्लेट को बदलकर, आपने एक एकल फ़ील्ड को बदलकर अपने ऐप को एक नए संस्करण में अपडेट किया है!

यहां छवि विवरण दर्ज करें

अंत में, परिनियोजन संसाधन के साथ पिछले पुनरीक्षण में या किसी भी पहले के संशोधन के लिए इतना आसान परिनियोजन वापस रोल करें।

ये चित्र कुबेरनेट्स इन एक्शन पुस्तक से भी हैं।


2

पॉड्स से बचने की कोशिश करें और कंटेनरों को प्रबंधित करने के बजाय तैनाती को लागू करें क्योंकि नोड फेल या पॉड समाप्ति की स्थिति में पॉड की वस्तुओं को पुनर्निर्धारित (या स्व चंगा) नहीं किया जाएगा।

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


1

कुबेरनेट्स में पॉड्स सबसे छोटी तैनाती करने वाली इकाइयाँ हैं। हर बार जब हम एक kubernetes ऑब्जेक्ट बनाते हैं जैसे कि Deployments, प्रतिकृति-सेट, स्टेटफुलसेट, डेमोंसेट्स यह पॉड बनाता है।

जैसा कि उपर्युक्त परिनियोजन आपकी तैनाती वस्तु में उल्लिखित वांछित राज्य के आधार पर पॉड बनाते हैं। इसलिए उदाहरण के लिए, आप एक आवेदन के 5 प्रतिकृतियां चाहते हैं, तो आपने replicas: 5अपनी तैनाती के रूप में उल्लेख किया है। अब तैनाती नियंत्रक सभी मेटाडेटा जैसे RBAC नीति, नेटवर्क नीति, लेबल, एनोटेशन, स्वास्थ्य जांच, संसाधन कोटा, टेंट / टॉलरेंस और अन्य और प्रत्येक पॉड्स के साथ दिए गए एप्लिकेशन के 5 समान प्रतिकृतियां (कोई कम, कोई अधिक नहीं) बनाने के लिए जिम्मेदार है। यह बनाता है।

ऐसे कुछ मामले हैं जब आप पॉड बनाना चाहते हैं, उदाहरण के लिए यदि आप एक टेस्ट साइडकार चला रहे हैं, जहां आपको हमेशा के लिए एप्लिकेशन चलाने की आवश्यकता नहीं है, तो आपको कई प्रतिकृतियों की आवश्यकता नहीं है, और जब आप उस पर अमल करना चाहते हैं तो आप आवेदन चलाते हैं। मामला फली उपयुक्त है। उदाहरण के लिए helm test, जो एक पॉड परिभाषा है जो एक कंटेनर को चलाने के लिए दिए गए कमांड के साथ निर्दिष्ट करता है।

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