2017-09-20 18 views
5

का उपयोग डोकर झुंड में न्यूनतम कंटेनर आवश्यकताओं के सेट करने के लिए तुम इतनी तरह अधिकतम सिस्टम आवश्यकताओं सेट कर सकते हैं:कैसे डोकर झुंड

my-service 
    image: hello-world 
    deploy: 
    resources: 
     limits: 
     cpus: '2' 
     memory: 4GB 

मैं एक कंटेनर है जो 2 सीपीयू कोर के न्यूनतम सिस्टम आवश्यकताओं और रैम 4 जीबी है कि है मेरे डॉकर स्वार में नोड्स का सटीक आकार। इसका मतलब यह है कि जब यह कंटेनर चल रहा है, तो उसे उस नोड पर चलने वाला एकमात्र कंटेनर होना चाहिए।

हालांकि, जब मैं कंटेनर को दूसरों के साथ चलाता हूं, तो अन्य कंटेनर एक ही नोड पर रखे जाते हैं। मैं कैसे सुनिश्चित कर सकता हूं कि डॉकर इस कंटेनर को न्यूनतम स्तर का सीपीयू और रैम देता है?

अद्यतन

रूप @yamenk ने सुझाव दिया मैं reservations जोड़ा, हालांकि मैं अभी भी एक ही नोड जो कंटेनर मैं की रक्षा के लिए कोशिश कर रहा हूँ के लिए प्रदर्शन समस्याओं का कारण बनता से शुरू होने वाले अन्य कंटेनरों मिलती है:

my-service 
    image: hello-world 
    deploy: 
    resources: 
     reservations: 
     cpus: '2' 
     memory: 4GB 

उत्तर

3

अद्यतन

स्पष्ट रूप से डॉकर स्वार में मेमोरी आरक्षण का प्रभाव बहुत अच्छी तरह से प्रलेखित नहीं है और वे एक बेहतरीन प्रयास के रूप में काम करते हैं। स्मृति आरक्षण ध्वज के प्रभाव को समझने के लिए, जाँच documentation:

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

...

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

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

के रूप में वर्णित here, नोड लेबल आदेश का उपयोग कर एक नोड में जोड़ा जा सकता:

docker node update --label-add hello-world=yes <node-name> 

फिर अपने ढेर फाइल के अंदर, आप केवल निर्दिष्ट लेबल होने नोड्स पर चलने के लिए कंटेनर सीमित कर सकते हैं, और अन्य कंटेनर hello-world=yes के साथ लेबल नोड्स से बचने के लिए।

my-service: 
    image: hello-world 
    deploy: 
    placement: 
     constraints: 
     - node.labels.hello-world == yes 

other-service: 
    ... 
    deploy: 
    placement: 
     constraints: 
     - node.labels.hello-world == no 

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

my-service: 
    image: hello-world 
    deploy: 
    mode: global 
    placement: 
     constraints: 
     - node.labels.hello-world == yes 

ओल्ड उत्तर::

आप इस तरह के रूप में संसाधन आरक्षण निर्धारित कर सकते हैं:

वैश्विक मोड कि वास्तव में एक कंटेनर प्रत्येक नोड कि सेवा की कमी को पूरा करता चला जाएगा सुनिश्चित करता है

version: '3' 
services: 
    redis: 
    image: redis:alpine 
    deploy: 
     resources: 
     reservations: 
      cpus: '1' 
      memory: 20M 
+0

मैंने 'आरक्षण 'जोड़ा, हालांकि मैं अभी भी एक ही नोड पर शुरू होने वाले अन्य कंटेनर प्राप्त करें जो कंटेनर के लिए प्रदर्शन समस्याओं का कारण बनता है, मैं रक्षा करने की कोशिश कर रहा हूं। –

+1

@MuhammadRehanSeed अद्यतन उत्तर – yamenk

+0

"सबसे अच्छा प्रयास" यही मुझे डर था। बाधाएं अच्छी हैं लेकिन अतिरिक्त काम की आवश्यकता है। –

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