2017-04-04 21 views
8

मैं के 8 एस परिनियोजन ऑब्जेक्ट के माध्यम से अपने परिनियोजन को प्रबंधित करके एक एप्लिकेशन क्लस्टर को तैनात करना चाहता हूं। दस्तावेज मुझे बेहद उलझन में है।कुबर्नेट्स मल्टी-पॉड परिनियोजन

  1. API सर्वर
  2. यूआई सर्वर
  3. Redis कैश
  4. टाइमर/अनुसूचित कार्य सर्वर

तकनीकी तौर पर, सभी 4 ऊपर में हैं: मेरा मूल लेआउट निम्नलिखित घटक है कि स्वतंत्र रूप से बड़े पैमाने है अलग-अलग फली जो स्वतंत्र रूप से स्केल किए जाते हैं।

मेरे प्रश्न हैं:

  1. मैं pod.yml फ़ाइलें बनाने की ज़रूरत है और फिर उन्हें किसी भी तरह deployment.yml फ़ाइल में संदर्भ या एक तैनाती फ़ाइल भी फली परिभाषाओं एम्बेड कर सकते हैं करते हैं?
  2. K8s प्रलेखन का अर्थ यह है कि specDeployment का हिस्सा एक पॉड को परिभाषित करने के बराबर है। क्या वो सही है? क्या होगा यदि मैं मल्टी-पॉड तैनाती का घोषणात्मक रूप से वर्णन करना चाहता हूं? क्या मुझे एकाधिक परिनियोजन.आईएमएल फाइलों की आवश्यकता है?

उत्तर

12

पेजिड्स उत्तर में अधिकांश मूल बातें हैं। आपको अपने परिदृश्य के लिए 4 Deployments बनाना चाहिए। प्रत्येक परिनियोजन ReplicaSet बनाएगा जो Deployment के लिए PODs के संग्रह को शेड्यूल और पर्यवेक्षण करता है।

प्रत्येक Deployment की संभावना के लिए इसके सामने Service की भी आवश्यकता होगी। मैं आमतौर पर एक एकल yaml फ़ाइल बनाता हूं जिसमें Deployment और संबंधित Service है।

apiVersion: v1 
kind: Service 
metadata: 
    annotations: 
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" 
    name: nginx 
    labels: 
    app: nginx 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
    name: nginx 
    targetPort: 80 
    nodePort: 32756 
    selector: 
    app: nginx 
--- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: nginxdeployment 
spec: 
    replicas: 3 
    template: 
    metadata: 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginxcontainer 
     image: nginx:latest 
     imagePullPolicy: Always 
     ports: 
     - containerPort: 80 
स्पष्टीकरण के लिए

यहां कुछ अतिरिक्त जानकारी:

  • एक POD एक स्केलेबल इकाई नहीं है यहाँ एक nginx.yaml है कि मैं का उपयोग के लिए एक उदाहरण है। एक Deployment जो पीओडी शेड्यूल करता है।
  • Deployment एक ही उद्देश्य को पूरा करने वाले पीओडी के एक समूह का प्रतिनिधित्व करने के लिए है।
  • आपके पास क्लस्टर के वर्चुअल नेटवर्क में कई Deployments एक साथ काम कर सकते हैं।
  • Deployment तक पहुंचने के लिए जिसमें PODs कई नोड्स पर चल रहे हैं, आपको एक सेवा बनाना है।
  • तैनाती सेवाओं के लिए तैनाती का मतलब है। यदि आपको किसी राज्य को स्टोर करने की आवश्यकता है तो आपको इसके बजाय StatefulSet बनाना होगा (उदा। डेटाबेस सेवा के लिए)।
+0

धन्यवाद ओस्विन। आपका वाक्यविन्यास उदाहरण 'परिनियोजन' और 'सेवा' को एक में जोड़ना बेहद सहायक है! – Raj

+1

मैं उसी सेवा में 'पोर्ट: 80' और' नोडपोर्ट: 32756' के उपयोग के बारे में उलझन में हूं। क्या आप कृपया बता सकते हैं कि उन्हें दोनों की आवश्यकता क्यों है? – AIon

+4

'पोर्ट: 80' कहता है कि यदि आप सेवा को एक इकाई के रूप में संबोधित करते हैं, उदा। अपने नाम या सेवा आईपी के लिए DNS प्रविष्टि के माध्यम से, पोर्ट 80 वास्तविक सेवा की आपूर्ति करने वाले पीओडीएस को आगे बढ़ाएगा। 'नोडपोर्ट: 32xxx' कहता है कि यदि आप क्लस्टर नोड्स को संबोधित करते हैं, उदा। लोडबैंसर या नोड आईपी के माध्यम से बाहर से, पोर्ट 32xxx वास्तविक सेवा की आपूर्ति करने वाले पीओडीएस को आगे बढ़ाएगा। –

6

आप Deployment के लिए Kubernetes API reference उपयोग कर सकते हैं और आप पाएंगे कि spec ->template क्षेत्र संबंधित टिप्पणी के साथ प्रकार PodTemplateSpec की है (। खाका फली कि बनाया जाएगा का वर्णन करता है) यह आपको सवालों का जवाब देता है। Deployment user guide में एक लंबा विवरण निश्चित रूप से पाया जा सकता है।

आपके प्रश्नों ...

1) PodsDeployment द्वारा प्रबंधित कर रहे हैं और उन्हें अलग से परिभाषित करने मतलब नहीं है के रूप में वे तैनाती से मांग पर बनाई गई हैं जवाब देने के लिए। ध्यान रखें कि एक ही पॉड प्रकार की अधिक प्रतिकृतियां हो सकती हैं।

2) आपकी सूची में प्रत्येक एप्लिकेशन के लिए, आपको एक Deployment परिभाषित करना होगा - जो कि प्रतिकृति गणना और एप्लिकेशन रोलआउट में अंतर होने पर भी समझ में आता है।

3) आपको लगता है कि नहीं पूछा है, लेकिन यह संबंधित है - अलग Deployments के साथ अपने एप्लिकेशन में से प्रत्येक भी एक समर्पित Service ताकि अन्य लोग उस तक पहुँच सकते की आवश्यकता होगी।

+0

धन्यवाद @pagid। स्पष्ट होने के लिए, जबकि 'spec' -> 'template' वास्तव में एक' PodTemplateSpec' है, यह अभी भी * एकल * पॉड के लिए विशिष्ट है। क्या वह सही है? – Raj

+0

इसके अलावा, # 1 के बारे में, मुझे लगता है कि दो विकल्प हैं: 1) इनलाइन पॉड स्पेक या 2) लेबल के माध्यम से बाहरी संदर्भ। मेरी प्रारंभिक परियोजना के लिए, मेरी स्वच्छता के लिए मैं इनलाइन पॉड स्पेक में रहूंगा। – Raj

+0

हम एक तैनाती में 'प्रतिकृति' परिभाषा रख सकते हैं - इसलिए 'PodTemplateSpec' पॉड्स और' प्रतिकृति 'कॉन्फ़िगरेशन के समूह के लिए खाते हैं, यह परिभाषित करता है कि वह समूह कितना बड़ा है। बाह्य परिभाषा कुछ ऐसा है जो मैं एपीआई परिभाषा का उपयोग करते समय एक विकल्प के रूप में "देखने" में सक्षम नहीं हूं। – pagid

संबंधित मुद्दे