কীভাবে ডকার সোর্ম ভলিউম ভাগ করে নেওয়ার প্রয়োগ করে?


93

ডকার সোর্ম দুটি ধরণের স্টোরেজ পরিচালনা করতে পারে:

volume এবং bind

যদিও bindডকার ডকুমেন্টেশন দ্বারা এটি প্রস্তাবিত নয় যেহেতু এটি একটি স্থানীয় ডিরেক্টরি (প্রতিটি জঞ্জাল নোডে) কোনও কাজের জন্য একটি বাঁধাই তৈরি করে, volumeবাস্তবায়নের উল্লেখ করা হয়নি, তাই আমি বুঝতে পারি না যে কীভাবে কার্যগুলির মধ্যে খণ্ডগুলি ভাগ করা হয়?

  • কীভাবে ডকার সোর্ম নোডগুলির মধ্যে খণ্ডগুলি ভাগ করে?
  • ভলিউমগুলি কোথায় সংরক্ষিত হয় (কোনও ম্যানেজারে? এবং যদি একাধিক পরিচালক থাকে?)
  • নোডগুলির মধ্যে যদি এটি বিভিন্ন নেটওয়ার্কে বিভিন্ন মেশিনে চলছে তবে কি কোনও সমস্যা নেই?
  • এটি একটি ভিপিএন তৈরি করে?

4
ঝাঁক কি ভাগ করে? এটি প্রায় এক বছর আগে আমি ডকার সোকার সাথে কাজ করেছি, তবে আমি মনে করি ঝাঁকটি নোডের মধ্যে ভলিউম ভাগ করে নেওয়ার জন্য দায়ী নয়। আপনি যদি নিজের নোডগুলি একই ভলিউমটি ভাগ করে নিতে চান তবে আপনাকে ভলিউম প্লাগইনগুলি অ্যাজুরে ভলিউমাইট্রাইভারের মতো ব্যবহার করতে হবে।
মুনচকিন

উত্তর:


66

আপনি যা সম্পর্কে জিজ্ঞাসা করছেন এটি একটি সাধারণ প্রশ্ন। ভলিউম ডেটা এবং সেই ভলিউমটি কী করতে পারে তার বৈশিষ্ট্যগুলি ভলিউম ড্রাইভার দ্বারা পরিচালিত হয়। শুধু তোমার মত বিভিন্ন নেটওয়ার্ক ড্রাইভার ব্যবহার করতে পারেন overlay, bridgeঅথবা hostআপনি বিভিন্ন ভলিউম ড্রাইভার ব্যবহার করতে পারেন।

ডকার এবং সোয়ার localবাক্সের বাইরে স্ট্যান্ডার্ড ড্রাইভার নিয়ে আসে। এতে ঝাঁক সম্পর্কে কোনও সচেতনতা নেই, এবং এটি আপনার পরিষেবা কার্য নির্ধারিত যেকোন নোডে আপনার ডেটার জন্য নতুন ভলিউম তৈরি করবে। এটি সাধারণত যা চান তা নয়।

আপনি একটি তৃতীয় পক্ষের ড্রাইভার প্লাগইন চান যা স্বর্ম সচেতন এবং আপনি কোনও পরিষেবা কাজের জন্য তৈরি ভলিউমটি সঠিক সময়ে ডান নোডে উপলভ্য নিশ্চিত করবেন। বিকল্পগুলির মধ্যে " অ্যাডাব্লুএস / অ্যাজুরির জন্য ডকার" এবং এর অন্তর্ভুক্ত ক্লাউডস্টার ড্রাইভার, বা জনপ্রিয় ওপেন সোর্স রেক্স-রে সমাধান অন্তর্ভুক্ত রয়েছে।

প্রচুর তৃতীয় পক্ষের ভলিউম ড্রাইভার রয়েছে, যা আপনি ডকার স্টোরে খুঁজে পেতে পারেন ।


hadoop যেমন একটি ভাগ করা ভলিউম হিসাবে কাজ করতে পারে?
স্ট্যাকিট

55

স্বর্ম মোড নিজেই ভলিউমের সাথে আলাদা কিছু করে না, এটি নোডে আপনি সরবরাহ করেন এমন কোনও ভলিউম মাউন্ট কমান্ড চালায় যেখানে ধারকটি চলছে। যদি আপনার ভলিউম মাউন্টটি সেই নোডের স্থানীয় হয় তবে আপনার ডেটা সেই নোডে স্থানীয়ভাবে সংরক্ষণ করা হবে। নোডগুলির মধ্যে স্বয়ংক্রিয়ভাবে ডেটা স্থানান্তর করতে কার্যকারিতাটিতে কোনও অন্তর্নির্মিত নেই।

গ্লাস্টারএফএসের মতো কয়েকটি সফ্টওয়্যার ভিত্তিক বিতরণ স্টোরেজ সমাধান রয়েছে, এবং ডকারের ইনফিনিট নামে একটি রয়েছে যা এখনও জিএ নয় এবং এর বিকাশটি ইইতে কুবেরনেটস সংহতকরণের পিছনে আসন নিয়েছে।

সাধারণ ফলাফলটি হ'ল হয় আপনার অ্যাপ্লিকেশনটির মধ্যে স্টোরেজটির প্রতিলিপি পরিচালনা করতে হবে (যেমন ইত্যাদি এবং অন্যান্য ভেলা ভিত্তিক অ্যালগরিদম) অথবা আপনি একটি বাহ্যিক স্টোরেজ সিস্টেমে আপনার মাউন্টগুলি সম্পাদন করবেন (আশা করি এটির নিজস্ব এইচএ সহ)। একটি বাহ্যিক স্টোরেজ সিস্টেম মাউন্ট করার দুটি বিকল্প রয়েছে, ব্লক বা ফাইল ভিত্তিক। ব্লক ভিত্তিক স্টোরেজ (উদাঃ EBS) সাধারণত উচ্চতর পারফরম্যান্সের সাথে আসে তবে কেবল একটি নোডে মাউন্ট করা সীমাবদ্ধ। এর জন্য, আপনার ডকারকে সেই ব্লক স্টোরেজটিতে অ্যাক্সেস দেওয়ার জন্য আপনার সাধারণত একটি তৃতীয় পক্ষের ভলিউম প্লাগইন ড্রাইভারের প্রয়োজন হবে। ফাইল ভিত্তিক স্টোরেজ (যেমন ইএফএস) এর কর্মক্ষমতা কম থাকে তবে এটি আরও বহনযোগ্য এবং একসাথে একাধিক নোডে মাউন্ট করা যায় যা একটি প্রতিলিপিযুক্ত পরিষেবার জন্য দরকারী।

সর্বাধিক প্রচলিত ফাইল ভিত্তিক নেটওয়ার্ক স্টোরেজ হ'ল এনএফএস (এটি ইএফএস দ্বারা ব্যবহৃত একই প্রোটোকল)। এবং আপনি এটি কোনও তৃতীয় পক্ষের প্লাগইন ড্রাইভার ছাড়া মাউন্ট করতে পারেন। দুর্ভাগ্যক্রমে নামের "স্থানীয়" ভলিউম প্লাগইন ড্রাইভার যা আপনাকে ডক জাহাজের সাহায্যে চালকের বিকল্পগুলির সাহায্যে মাউন্ট কমান্ডের যে কোনও মান পাস করার বিকল্প দেয় এবং কোনও বিকল্প ছাড়াই এটি ডকার ডিরেক্টরি / var / lib / ভলিউম সংরক্ষণের জন্য ডিফল্ট হয় it ডকার / খণ্ড বিকল্পগুলির সাহায্যে আপনি এটিকে এনএফএস প্যারামিটারগুলি পাস করতে পারেন এবং এটি এনএফএস হোস্টনেম (একটি ডিএনএস লুকআপও করতে পারে যা সাধারণত এনএফএসের সাথে আপনার নেই)। স্থানীয় ভলিউম ড্রাইভার ব্যবহার করে একটি এনএফএস ফাইল সিস্টেম মাউন্ট করার বিভিন্ন উপায়ের উদাহরণ এখানে রয়েছে:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=192.168.1.1,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=192.168.1.1,rw
        device: ":/path/to/dir"
  ...

আপনি যদি শেষের দিকে রচনা ফাইলের উদাহরণটি ব্যবহার করেন তবে মনে রাখবেন যে একটি ভলিউমের পরিবর্তন (যেমন সার্ভারের পাথ বা ঠিকানা আপডেট করা) যতক্ষণ না বিদ্যমান রয়েছে ততক্ষণ বিদ্যমান নামযুক্ত ভলিউমে প্রতিফলিত হবে না। আপনার ভলিউমটির নতুন নামকরণ করতে হবে, বা এটি মুছতে হবে, যাতে নতুন মান সহ ঝাঁকুনিটিকে পুনরায় তৈরি করতে দেয়।

অন্যান্য সাধারণ সমস্যা যা আমি বেশিরভাগ এনএফএসের ব্যবহারে দেখতে পাচ্ছি তা হ'ল সার্ভারে "রুট স্কোয়াশ" সক্ষম করা। কনটেইনারগুলি ভলিউমে ফাইল লেখার রুট প্রয়াস হিসাবে চালিত হলে অনুমতি সংক্রান্ত সমস্যার ফলস্বরূপ। আপনার অনুরূপ ইউআইডি / জিআইডি অনুমতি সংক্রান্ত সমস্যা রয়েছে যেখানে কনটেইনার ইউআইডি / জিআইডি হ'ল ভলিউমে লেখার জন্য অনুমতি প্রয়োজন, যার জন্য ডিরেক্টরিটির মালিকানা এবং এনএফএস সার্ভারে অ্যাডজাস্ট করার অনুমতি প্রয়োজন হতে পারে।


9

AWS ইএফএসের জন্য আমার সমাধান, যা কাজ করে:

  1. ইএফএস তৈরি করুন (সুরক্ষা গোষ্ঠীতে এনএফএস পোর্ট 2049 খুলতে ভুলবেন না)
  2. এনএফএস-সাধারণ প্যাকেজ ইনস্টল করুন:

    sudo apt-get install -y nfs-common

  3. আপনার efs কাজ করে কিনা তা পরীক্ষা করুন:

    mkdir efs-test-point
    sudo chmod go + rw efs-test-point
    sudo মাউন্ট -t nfs -o nfsvers = 4.1, আরসাইজ = 1048576, ডাব্লু সাইজ = 1048576, হার্ড, টাইমো = 600, retrans = 2, নর্সপোর্টপোর্ট [YOUR_EFS_DNS]: / efs- পরীক্ষার পয়েন্ট
    efs-test-point / 1.txt টাচ করুন
    সুডো অ্যামাউন্ট ইফএস-টেস্ট-পয়েন্ট /
    ls -la efs-test-point /

    ডিরেক্টরি খালি থাকতে হবে

    sudo মাউন্ট -t nfs -o nfsvers = 4.1, আরসাইজ = 1048576, ডাব্লু সাইজ = 1048576, হার্ড, টাইমো = 600, retrans = 2, নর্সপোর্টপোর্ট [YOUR_EFS_DNS]: / efs- পরীক্ষার পয়েন্ট

    ls -la efs-test-point/

    ফাইল 1.txt উপস্থিত থাকতে হবে

  4. ডকার-কমপোজ.আইএমএল ফাইলটি কনফিগার করুন:

    সেবা:
      পার্শ্ববর্তী:
        আয়তন:
          - আপলোড_টিএমপি_ফিজ: / হোম / অ্যাপ্লিকেশন / পাবলিক / আপলোড / টিএমপি
      ...
    আয়তন:
      আপলোড_টিএমপি_ফিজ:
        ড্রাইভার: স্থানীয়
        ড্রাইভার_পটস:
          প্রকার: এনএফএস
          ও: অ্যাডার = [YOUR_EFS_DNS], এনএফএসওয়ার্স = 4.1, রাইসাইজ = 1048576, ডাব্লু সাইজ = 1048576, হার্ড, টাইমো = 600, রেট্রান্স = 2
          ডিভাইস: [YOUR_EFS_DNS]: /


6

আমাদের স্থানীয়ভাবে হোস্ট করা ঝাঁকের জন্য আমার সমাধান: প্রতিটি ফাইল নোড আমাদের ফাইলসভারটি সরবরাহ করে একটি এনএফএস-শেয়ার মাউন্ট করেছে /mnt/docker-data। আমি যখন আমার পরিষেবাদিগুলিতে ফাইলগুলি রচনা করে ভলিউম সংজ্ঞায়িত করি, তখন আমি ডিভাইসটিকে কিছু পথের মধ্যে সেট করি /mnt/docker-data, উদাহরণস্বরূপ:

volumes:
  traefik-logs:
    driver: local
    driver_opts:
      o: bind
      device: /mnt/docker-data/services/traefik/logs
      type: none

এই সমাধানের সাহায্যে ডকার প্রতিটি নোডে ভলিউম তৈরি করে, পরিষেবাটি নিযুক্ত করা হয় এবং - অবাক - সেখানে ইতিমধ্যে ডেটা রয়েছে, কারণ এটি একই পথ, যা অন্য নোডের ভলিউম দ্বারা ব্যবহৃত হয়েছিল।

আপনি যদি নোড ফাইল সিস্টেমটি ঘনিষ্ঠভাবে দেখে থাকেন তবে আপনি দেখতে পাচ্ছেন যে আমার ফাইলসভার মাউন্টে মাউন্টগুলি নীচে তৈরি করা হয়েছে /var/lib/docker/volumes, এখানে দেখুন:

root@node-3:~# df -h
Dateisystem                                                                                                   Größe Benutzt Verf. Verw% Eingehängt auf
[...]
fs.mydomain.com:/srv/shares/docker-data/services/traefik/logs                                 194G    141G   53G   73% /var/lib/docker/volumes/traefik_traefik-logs/_data
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.