কোনও ফাইলকে পোদে ভাগ করে নেওয়া / মাউন্ট করার সর্বোত্তম উপায় কী?


110

আমি একটি একক ফাইল মাউন্ট করতে গোপনীয়তা ব্যবহার করার কথা ভাবছিলাম তবে মনে হয় আপনি কেবল ডিরেক্টরিটি মাউন্ট করতে পারেন যা অন্য সমস্ত সামগ্রীকে ওভাররাইট করে। ডিরেক্টরি মাউন্ট না করে আমি কীভাবে একটি একক কনফিগারেশন ফাইলটি ভাগ করতে পারি?

উত্তর:


163

উদাহরণস্বরূপ আপনার একটি কনফিগারেশন রয়েছে যাতে 2 টি কনফিগারেশন ফাইল রয়েছে:

kubectl create configmap config --from-file <file1> --from-file <file2>

আপনি বিদ্যমান ডিরেক্টরিতে একক ফাইল মাউন্ট করতে এই জাতীয় সাবপথ ব্যবহার করতে পারেন:

---
        volumeMounts:
        - name: "config"
          mountPath: "/<existing folder>/<file1>"
          subPath: "<file1>"
        - name: "config"
          mountPath: "/<existing folder>/<file2>"
          subPath: "<file2>"
      restartPolicy: Always
      volumes:
        - name: "config"
          configMap:
            name: "config"
---

এখানে সম্পূর্ণ উদাহরণ


4
বিভ্রান্ত কেন এটি যখন 2 টি ফাইলের জন্য উদাহরণ দেখায় যখন ওপিকে কেবল 1 টির প্রয়োজন হয়, আমি ধরে নিই একই ফাইলটির ক্ষেত্রে একই প্রযোজ্য।
র‌্যান্ডি এল

7
এটি কেবলমাত্র একাধিক ফাইলের সাথে কীভাবে কাজ করে তা পরিষ্কার করে দেওয়ার জন্য
টমি

@ টমিনিগুইন, কোনও উপায় আছে যদি আমি কেবল আমার প্রধান পথটি মাউন্ট করতে চাই এবং / /abc.txt এর মতো সাব পাথটি না চাই যেখানে abc.txt মূল ফোল্ডারের ধারকটির ভিতরে অবস্থিত এবং সাব ফোল্ডারটি নয়।
প্রিন্সটি

4
ফাইলটি যদি কনফিগারেশন না হয় বা কনফিগার্যাপে না থাকে তবে কী হবে? আপনার স্থানীয় ডিস্ক থেকে একটি স্বেচ্ছাসেবী ফাইল মাউন্ট করা সম্ভব?
লন্ডনরব

4
আপনার ক্ষেত্রে @LondonRob আপনি hostPath ব্যবহার করা উচিত, দেখুন kubernetes.io/docs/concepts/storage/volumes/#hostpath
Masupilami

48

আমি এখানে থেকে এই কাজের উদাহরণ দিয়ে শুরু করব । আপনি কমপক্ষে কুবেরনেটস ১.৩ ব্যবহার করছেন তা নিশ্চিত করুন।

কেবল এটির মতো একটি কনফিগার ম্যাপ তৈরি করুন:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-pd-plus-cfgmap
data:
  file-from-cfgmap: file data

এবং তারপরে একটি পড তৈরি করুন:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd-plus-cfgmap
spec:
  containers:
  - image: ubuntu
    name: bash
    stdin: true
    stdinOnce: true
    tty: true
    volumeMounts:
    - mountPath: /mnt
      name: pd
    - mountPath: /mnt/file-from-cfgmap
      name: cfgmap
      subPath: file-from-cfgmap
  volumes:
  - name: pd
    gcePersistentDisk:
      pdName: testdisk
  - name: cfgmap
    configMap:
      name: test-pd-plus-cfgmap

4
এটি অনির্দিষ্টভাবে ইতিমধ্যে উল্লিখিত ওপি এর মতো পুরো ডিরেক্টরিটি ওভাররাইট করবে।
ডেভেলগ্যালান্ট

4
আমি রাজি নই। "সাবপাথ" সহ পদ্ধতির পরীক্ষা করেছেন এবং কেবলমাত্র ফাইলগুলি পুরো ডিরেক্টরিটিই মাউন্ট করা হয়নি। কুবেরনেটস ২.০ এর সাথে পরীক্ষিত।
সোমবার 14'14

@ dmorlock প্রশ্নটি অস্পষ্টভাবে বলা হয়েছিল। এটি শিরোনাম হিসাবে "একটি পডের মধ্যে একটি ফাইল ভাগ / মাউন্ট করবে" এবং প্রশ্নের মতো "একটি ডিরেক্টরি না মাউন্ট করে একটি কনফিগার ফাইল শেয়ার করুন" জিজ্ঞাসা করবে
জোয়েল বি

4
আমি শব্দ "subpath" এ ডক্স কোথাও উল্লেখ নেই তিনবার এখন এই প্রশ্নের আসতে হল থাকেন kubernetes.io/docs/tasks/configure-pod-container/... । আমার ধারণা এটি একটি বন্ধুত্বপূর্ণ ডকুমেন্টেশন পিআর যা তৈরি এবং জমা দেওয়ার দরকার।
টড লাইন্স

@ জোয়েলবি, কোনও উপায় আছে যদি আমি কেবল আমার প্রধান পথটি মাউন্ট করতে চাই এবং। /Abc.txt এর মতো সাব পাথ না চাই যেখানে abc.txt মূল ফোল্ডারের ধারকটির ভিতরে অবস্থিত এবং সাব ফোল্ডারটি নয়।
প্রিন্সটি

7

বর্তমানে (v1.0, v1.1) একক কনফিগারেশন ফাইলের ভলিউমের কোনও উপায় নেই। সিক্রেট স্ট্রাকচার প্রাকৃতিকভাবে একাধিক গোপনীয়তার প্রতিনিধিত্ব করতে সক্ষম, যার অর্থ এটি অবশ্যই একটি ডিরেক্টরি হতে হবে।

যখন আমরা কনফিগার অবজেক্টগুলি পাই, একক ফাইলগুলি সমর্থন করা উচিত।

মাঝামাঝি সময়ে আপনি একটি ডিরেক্টরি মাউন্ট করতে পারেন এবং আপনার চিত্র থেকে এটিতে সিমিলিংক করতে পারেন, সম্ভবত?


4
এটা কি এখনও সত্য?
neu242

7
এখনই একটি ফাইল পেতে আপনি ভলিউমমাউন্টগুলির সাবপাথ বৈশিষ্ট্যটি ব্যবহার করতে পারেন
টিম হকিন

4
এই মুহূর্তে এটি সম্ভব। উপরের উত্তরটি দেখুন: stackoverflow.com/a/43404857/5091346
Andrii Abramov

0

বলুন আপনি লগিং বাড়ানোর জন্য একটি চলমান মোতায়েনের জন্য একটি নতুন লগ 4j2.xML মাউন্ট করতে চান Le

# Variables
k8s_namespace=xcs
deployment_name=orders-service
container_name=orders-service
container_working_dir=/opt/orders-service

# Create config map and patch deployment
kubectl -n ${k8s_namespace} create cm log4j \
 --from-file=log4j2.xml=./log4j2.xml

kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
 -p '{"spec":{"template":{"spec":{"volumes":[{"configMap":{"defaultMode": 420,"name": "log4j"},"name": "log4j"}]}}}}'

kubectl -n ${k8s_namespace} patch deployment ${deployment_name} \
 -p '{"spec":{"template":{"spec":{"containers":[{"name": "'${container_name}'","volumeMounts": [{  "mountPath": "'${container_working_dir}'/log4j2.xml","name": "log4j","subPath": "log4j2.xml"}]}]}}}}'

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.