10

अद्यतन: मैं minikubevm से जुड़ा हूं और मुझे लगता है कि मेरी मेजबान निर्देशिका घुड़सवार है लेकिन वहां कोई फाइल नहीं है। साथ ही जब मैं एक फाइल बनाउंगा तो यह मेरी मेजबान मशीन में नहीं होगा। कोई भी लिंक उनके बीचमिनीक्यूब के साथ होस्टपैथ - कुबेरनेट

मैं अपने ऐप को कुबर्नेट्स के साथ विकसित करने के लिए होस्ट निर्देशिका को माउंट करने का प्रयास करता हूं।

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

अपने परीक्षण एप्लिकेशन (server.js):

var http = require('http'); 
var handleRequest = function(request, response) { 
response.writeHead(200); 
response.end("Hello World!"); 
} 
var www = http.createServer(handleRequest); 
www.listen(8080); 

मेरी Dockerfile:

FROM node:latest 
WORKDIR /code 
ADD code/ /code 
EXPOSE 8080 
CMD server.js 

मेरी फली Kubernetes विन्यास: (फली-configuration.yaml)

apiVersion: v1 
kind: Pod 
metadata: 
    name: apiserver 
spec: 
    containers: 
    - name: node 
    image: myusername/nodetest:v1 
    ports: 
    - containerPort: 8080 
    volumeMounts: 
    - name: api-server-code-files 
     mountPath: /code 
    volumes: 
    - name: api-server-code-files 
    hostPath: 
     path: /home/<myuser>/Projects/nodetest/api-server/code 

मेरी फ़ोल्डर हैं:

/home/<myuser>/Projects/nodetest/ 
- pod-configuration.yaml 
- api-server/ 
    - Dockerfile 
    - code/ 
     - server.js 

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

कोई विचार? मैं अपनी स्थानीय निर्देशिका को माउंट करने में सफलता क्यों नहीं पा रहा हूं?

सहायता के लिए धन्यवाद।

उत्तर

7

संपादित करें: ऐसा लगता है कि समाधान privilaged container का उपयोग करना है या मैन्युअल रूप से अपने होम फ़ोल्डर को माउंट करने के लिए मिनीक्यूब वीएम को आपके होस्टपैथ - https://github.com/boot2docker/boot2docker#virtualbox-guest-additions से पढ़ने की अनुमति देने के लिए है। (एलआईएल को यह पता लगाने के लिए क्रेडिट)।

मिनीक्यूब के साथ होस्टपैथ वॉल्यूम को कॉन्फ़िगर करना बिल्कुल संभव है - लेकिन बहुत सारे quirks हैं और इस विशेष मुद्दे के लिए बहुत अच्छा समर्थन नहीं है।

अपने डॉकरफ़ाइल से ADD code/ /code को हटाने का प्रयास करें।Docker's "ADD" instruction आपकी मेजबान मशीन से कोड को आपके कंटेनर /code निर्देशिका में कॉपी कर रहा है। यही कारण है कि छवि का पुनर्निर्माण सफलतापूर्वक आपके कोड को अद्यतन करता है।

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

अपनी मेजबान मशीन पर code/ निर्देशिका की अनुमतियों को भी जांचना सुनिश्चित करें।

मेरा एकमात्र अन्य विचार रूट निर्देशिका में बढ़ने से संबंधित है। रूट निर्देशिका में निर्देशिकाओं से/Kubernetes hostPath वॉल्यूम को घुमाने पर मुझे समस्याएं थीं (मुझे लगता है कि यह अनुमति संबंधित थी)। तो, कोशिश करने के लिए कुछ और /var/www/html की तरह माउंटपैथ होगा। आपकी प्रतिक्रिया के लिए

apiVersion: v1 
kind: Pod 
metadata: 
    name: example 
spec: 
    volumes: 
    - name: example-volume 
     hostPath: 
     path: '/Users/example-user/code' 
    containers: 
    - name: example-container 
     image: example-image 
     volumeMounts: 
     - mountPath: '/var/www/html' 
      name: example-volume 
+0

हाय, आपकी प्रतिक्रिया के लिए धन्यवाद लेकिन यह काम नहीं करता .. यह मुझे "" "मॉड्यूल नहीं मिल सकता है '/code/server.js'" " क्या आपके पास मिनीक्यूब से उबंटू होस्ट में होस्टपैथ को घुमाने का एक कामकाजी उदाहरण है? उपयोगकर्ता/समूह एडीडी निर्देश, प्राथमिकता के बारे में कोड की अनुमति/ है और जब आप वॉल्यूम को माउंट करते हैं तो यह डॉकर-कंपोज़ पर काम करता है, घुड़सवार वॉल्यूम का उपयोग किया जाता है इससे कोई फर्क नहीं पड़ता कि आपने क्या किया इसमें जोड़ें –

+1

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

+0

मैं अपने pod.yaml को अपडेट करता हूं जैसा कि आप माउंटपाथ के साथ/var/www/html पर सुझाव देते हैं लेकिन यह अभी भी काम नहीं करता है। यह अजीब बात है कि पिछले उदाहरण में जब मैं एसएसएच के माध्यम से मिनीक्यूब से कनेक्ट करता हूं तो मैं/कोड पर माउंट करने की कोशिश करता हूं, मैं वीएम की होम निर्देशिका में पथ को घुमाता हूं (/ home//प्रोजेक्ट्स/नोडेटेस्ट/एपीआई-सर्वर/कोड) लेकिन server.js फ़ाइल के बिना - एक प्राथमिकता जो कहती है कि अनुमति का मुद्दा नहीं है –

-3

सर्वश्रेष्ठ अभ्यास आपकी छवि में कोड का निर्माण करेगा, आपको बस डिस्क से आने वाले कोड के साथ एक छवि नहीं चलनी चाहिए। आपका Dockerfile अधिक तरह दिखना चाहिए:

FROM node:latest COPY /code/server.js /code/server.js EXPOSE 8080 CMD /code/server.js

तो फिर तुम किसी भी मात्रा के बिना Kubernetes पर छवि चलाते हैं। जब भी आप कोड अपडेट करते हैं तो आपको छवि को पुनर्निर्माण करने और पॉड को अपडेट करने की आवश्यकता होती है।

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

यदि आप वास्तव में कंटेनर चलते समय कोड बदलने के चरम तेज़ प्रतिक्रिया चक्र चाहते हैं, तो आप कुबर्नेट्स के बिना -v /path/to/host/code:/code के साथ केवल डॉकर का उपयोग करने में सक्षम हो सकते हैं और फिर एक बार जब आप तैयार हो जाते हैं तो छवि का निर्माण और तैनाती और परीक्षण करें मिनीक्यूब पर हालांकि, मुझे यकीन नहीं है कि अगर आप अपने नोड ऐप की मुख्य .js फ़ाइल बदल रहे हैं तो यह काम करेगा।

+0

धन्यवाद:

यहाँ एक कार्यात्मक hostPath मात्रा का एक उदाहरण है। स्थानीय रूप से कुबर्नेट्स चलाने का लाभ यह है कि आपका देव पर्यावरण आपके प्रोड एनवी की तरह है। पॉड में स्थानीय निर्देशिकाओं को माउंट करने से डेवलपर अनुभव बहुत बढ़ जाएगा। यदि एक उदाहरण के रूप में मेरे प्रोजेक्ट को एक रेडिस इंस्टेंस की आवश्यकता है, तो मैं इसे अपने देव एनवी में कुबर्नेट्स के साथ भी चलाने के लिए चाहता हूं ताकि यह जांच सके कि वे अच्छी तरह से जुड़े हुए हैं। मैं अपने होस्ट में मिनीक्यूब वीएम से होस्टपैथ को माउंट करने का एक तरीका खोज रहा हूं। यह मिनीक्यूब मुद्दा कहता है कि यह संभव है https://github.com/kubernetes/minikube/issues/2 लेकिन मुझे नहीं पता कि कैसे। –

+0

निश्चित रूप से, मैं देव प्रोड समानता रखने की आपकी आवश्यकता को समझता हूं। फिर भी, जो मुद्दा आप उल्लेख करते हैं वह खुला है और हल नहीं हुआ है। एकमात्र तरीका यह है कि एनएफएस को अपने मेजबान से वीएम में माउंट करना होगा जैसा कि यहां इस मुद्दे में वर्णित है: https://github.com/kubernetes/minikube/issues/2#issuecomment-233629375 – puja

+0

मेरा प्रश्न अभी भी रहता है, AFAIK में कोई गर्म स्वैपिंग नहीं है कोड node.js में है ताकि आपको वैसे भी पुनरारंभ करना होगा। आप अपनी छवि में कोड क्यों नहीं बनाएंगे? – puja

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