কম্পিউটার টিউটোরিয়াল

ডকার স্বার্ম মাস্টার: ডকার ইঞ্জিন দিয়ে ক্লাস্টারিংয়ের বিগিনার গাইড

এটি একটি পাঙ্ক রক ব্যাডের মতো শোনা যায়। কিন্তু এটি ব্র্যান্ড নিউ অর্কেস্ট্রেশন মেকানিজম, বরং, ডকারে উপলব্ধ অর্কেস্ট্রেশনের একটি উন্নতি। সংক্ষেপে এবং মিষ্টি রাখলে, আপনি যদি ডকারের পুরনো ভার্সন ব্যবহার করেন, আপনাকে ম্যানুয়ালি Swarm সেটআপ করতে হবে ডকার ক্লাস্টার তৈরি করার জন্য। ভার্সন ১.১২ থেকে শুরু করে, ডকার ইঞ্জিন একটি নেটিভ ইমপ্লিমেন্টেশন নিয়ে আসে যা একটি seamless ক্লাস্টারিং সেটআপ অনুমতি দেয়। আমরা এখানে কেন আছি সেটির কারণ।

এই টিউটোরিয়ালে, আমি আপনাকে ডকার কী করতে পারে অর্কেস্ট্রেশনের ক্ষেত্রে সেটি চখানোর চেষ্টা করব। এই আর্টিকেল কোনো মানে all-inclusive (বেড অ্যান্ড ব্রেকফাস্ট) বা all-knowing নয়, কিন্তু এতে আপনাকে আপনার ক্লাস্টারিং যাত্রা শুরু করার জন্য যা দরকার সেটি আছে। আফTER মি।

টেকনোলজি ওভারভিউ

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

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

Service API হলো এই ইমপ্লিমেন্টেশনের দ্বিতীয় কম্পোনেন্ট। এটি ম্যানেজার নোডগুলকে সوار্মের সব নোডে ডিস্ট্রিবিউটেড সার্ভিস তৈরি করতে দেয়। সার্ভিসগুলো রিপ্লিকেটেড হতে পারে, অর্থাৎ সেগুলো ব্যালেন্সিং মেকানিজম ব্যবহার করে ক্লাস্টার জুড়ে ছড়িয়ে দেওয়া হবে, অথবা সেগুলো গ্লোবাল হতে পারে, অর্থাৎ সার্ভিসের একটি ইনস্ট্যান্স প্রতিটি নোডে চলবে।

এখানে আরও অনেক কিছু কাজ করছে, কিন্তু এটি আপনাকে প্রাইমড এবং পাম্পড করার জন্য পর্যাপ্ত। এখন, কিছু আসল হ্যান্ডস-অন জিনিস করি। আমাদের টার্গেট প্ল্যাটফর্ম CentOS 7.2, যা কফি আকর্ষণীয়, কারণ আমি এই টিউটোরিয়াল লেখার সময়, এতে শুধু ডকার ১.১০ ছিল রেপোতে, এবং আমাকে ফ্রেমওয়ার্ক ম্যানুয়ালি আপগ্রেড করতে হয়েছিল স্বার্ম ব্যবহার করার জন্য। আমরা আলাদা একটি টিউটোরিয়ালে এই बारेে আলোচনা করব। তারপর, আমাদের একটি ফলো-আপ গাইডও থাকবে, যেখানে আমরা নতুন নোড আমাদের ক্লাস্টারে জয়েন করব, এবং আমরা একটি অ্যাসিমেট্রিক সেটআপ Fedora-র সাথে ট্রাই করব। এই পয়েন্টে, অনুমান করুন সঠিক সেটআপ inplace-এ আছে, এবং চলুন একটি ক্লাস্টার সার্ভিস আপ এন্ড রানিং করি।

ইমেজ ও সার্ভিস সেটআপ

আমি একটি লোড-ব্যালেন্সড Apache সার্ভিস সেটআপ করার চেষ্টা করব, একাধিক ইনস্ট্যান্স কন্টেন্ট সার্ভ করবে একটি সিঙ্গেল IP অ্যাড্রেসের মাধ্যমে। খুব স্ট্যান্ডার্ড। এটি সেই টিপিক্যাল কারণগুলো হাইলাইট করে যেসব কারণে আপনি ক্লাস্টার কনফিগারেশনের সাথে যাবেন—অভailability, রিডান্ডেন্সি, হরিজন্টাল স্কেলিং, এবং পারফরম্যান্স। অবশ্যই, আপনাকে নেটওয়ার্কিং টুকরো এবং স্টোরেজও বিবেচনা করতে হবে, কিন্তু সেটি এই গাইডের ইমিডিয়েট স্কোপের বাইরে।

আসল Dockerfile টেমপ্লেট অফিসিয়াল রিপোজিটরি-তে httpd আন্ডারে উপলব্ধ। আপনাকে একটি মিনিমাল সেটআপ দরকার শুরু করার জন্য। ইমেজ ডাউনলোড, নিজের তৈরি করা ইত্যাদি সম্পর্কে ডিটেইলস আমার ইন্ট্রো গাইডে উপলব্ধ, যা এই টিউটোরিয়ালের শুরুতে লিংক করা আছে।

docker build -t my-apache2 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM httpd:2.4
Trying to pull repository docker.io/library/httpd ...
2.4: Pulling from docker.io/library/httpd

8ad8b3f87b37: Pull complete
c95e1f92326d: Pull complete
96e8046a7a4e: Pull complete
00a0d292c371: Pull complete
3f7586acab34: Pull complete
Digest: sha256:3ad4d7c4f1815bd1c16788a57f81b413...a915e50a0d3a4
Status: Downloaded newer image for docker.io/httpd:2.4
---> fe3336dd034d
Step 2 : COPY ../public-html/ /usr/local/apache2/htdocs/
... 

আরো আগে যাওয়ার আগে, আপনার একটি সিঙ্গেল ইনস্ট্যান্স শুরু করা উচিত এবং দেখতে হবে আপনার কন্টেইনার কোনো এরর ছাড়া তৈরি হয়েছে এবং আপনি ওয়েব সার্ভারের সাথে সংযোগ করতে পারছেন। একবার সেটি স্থাপন হয়ে গেলে, আমরা একটি ডিস্ট্রিবিউটেড সার্ভিস তৈরি করব।

docker run -dit --name my-running-app my-apache2

IP ঠিকানা চেক করুন, ব্রাউজারে পাঞ্চ করুন, দেখুন কী হয়।

স্বার্ম ইনিশিয়েশন এবং সেটআপ

পরবর্তী ধাপ হলো স্বার্ম চালানো। এখানে সবচেয়ে বেসিক কমান্ড যা আপনাকে underway করবে, এবং এটি ডকার ব্লগে ব্যবহৃত উদাহরণের সাথে খুব সিমিলার:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest

এখানে কী আছে? আমরা frontend নামে একটি সার্ভিস তৈরি করছি, পাঁচটি কন্টেইনার ইনস্ট্যান্সের সাথে। আমরা আমাদের হোস্ট পোর্ট ৮০ কন্টেইনার পোর্ট ৮০-এর সাথে বাইন্ড করছি। এবং আমরা আমার টازه তৈরি করা Apache ইমেজ ব্যবহার করছি। কিন্তু, আপনি এটি করলে, নিচের এরর পাবেন:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

এটি মানে আপনি করেন্ট হোস্ট (নোড) কে স্বার্ম ম্যানেজার হিসেবে সেটআপ করেননি। আপনাকে হয় স্বার্ম ইনিশিয়েট করতে হবে বা একটি বিদ্যমান সওয়ার্মে জয়েন করতে হবে। যেহেতু আমাদের এখনো একটি নেই, আমরা এখন এটি ইনিশিয়েট করব:

docker swarm init
Swarm initialized: current node (dm58mmsczqemiikazbfyfwqpd) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join \
--token SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla
9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \
10.0.2.15:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

আউটপুট কফি সেলফ-এক্সপ্ল্যানেটরি। আমরা একটি স্বার্ম তৈরি করেছি। নতুন নোডগুলকে স্বার্মে জয়েন করার জন্য সঠিক টোকেন ব্যবহার করতে হবে। আপনার IP ঠিকানা এবং পোর্টও আইডেন্টিফাইড, যদি আপনার ফায়ারওয়াল রুল দরকার হয়। আরও, আপনি স্বার্মে ম্যানেজারও যোগ করতে পারেন। এখন, সার্ভিস ক্রিয়েট কমান্ড রি-রান করুন:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
6lrx1vhxsar2i50is8arh4ud1

কানেক্টিভিটি টেস্ট

এখন, চেক করি আমাদের সার্ভিস আসলে কাজ করে কিনা। একভাবে, এটি সিমিলার যেটি আমরা Vagrant এবং coreOS-এ করেছিলাম। সbora, কনসেপ্টগুলো অলমোস্ট আইডেন্টিক্যাল। শুধু একই Idea-এর ভিন্ন ইমপ্লিমেন্টেশন। প্রথম, `docker ps` সঠিক আউটপুট দেখাতে হবে। আপনার তৈরি করা সার্ভিসের জন্য একাধিক রিপ্লিকা থাকা উচিত।

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
cda532f67d55 my-apache2:latest "httpd-foreground"
2 minutes ago Up 2 minutes 80/tcp frontend.1.2sobjfchdyucschtu2xw6ms9a
75fe6e0aa77b my-apache2:latest "httpd-foreground"
2 minutes ago Up 2 minutes 80/tcp frontend.4.ag77qtdeby9fyvif5v6c4zcpc
3ce824d3151f my-apache2:latest "httpd-foreground"
2 minutes ago Up 2 minutes 80/tcp frontend.2.b6fqg6sf4hkeqs86ps4zjyq65
eda01569181d my-apache2:latest "httpd-foreground"
2 minutes ago Up 2 minutes 80/tcp frontend.5.0rmei3zeeh8usagg7fn3olsp4
497ef904e381 my-apache2:latest "httpd-foreground"
2 minutes ago Up 2 minutes 80/tcp frontend.3.7m83qsilli5dk8rncw3u10g5a

আমি ভিন্ন, নন-ডিফল্ট পোর্টও টেস্ট করলাম, এবং এটি ভালো কাজ করে। আপনার সার্ভারের সাথে সংযোগ করতে এবং রেসপন্স পেতে আপনার অনেক leeway আছে। আপনি localhost বা docker ইন্টারফেস IP অ্যাড্রেস সঠিক পোর্টের সাথে ব্যবহার করতে পারেন। নিচের উদাহরণ পোর্ট ১০৮০ দেখাচ্ছে:

এখন, এটি একটি খুব রफ़, খুব সিম্পল শুরু। আসল চ্যালেঞ্জ হলো অপ্টিমাইজড, স্কেলেবল সার্ভিস তৈরি করা, কিন্তু সেগুলো একটি প্রপার টেকনিক্যাল ইউজ কেস দরকার। আরও, আপনার `docker info` এবং `docker service (inspect|ps)` কমান্ডও ব্যবহার করা উচিত আপনার ক্লাস্টার কীভাবে বেহেভ করছে সেটি আরও শিখতে।

সম্ভাব্য সমস্যা

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

Docker service is not a docker command

যখন আপনি রিপ্লিকেটেড সার্ভিস শুরু করার জন্য প্রয়োজনীয় কমান্ড চালান, আপনি একটি এরর পাবেন যা বলে `docker: 'service' is not a docker command`। এর মানে আপনার কাছে ডকারের সঠিক ভার্সন নেই ( `-v` দিয়ে চেক করুন)। আমরা একটি ফলো-আপ টিউটোরিয়ালে এটাকে ফিক্স করব।

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
docker: 'service' is not a docker command.

Docker tag not recognized

আপনি নিচের এররও দেখতে পারেন:

docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest
Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "-name" is not a valid repository/tag

এটি নিয়ে বেশ কিছু ডিসকাশন থ্রেড আছে। এররটি আসলে কফি ইনোসেন্ট হতে পারে। আপনি ব্রাউজার থেকে কমান্ড কপি করেছেন, এবং হাইফেনগুলো সঠিকভাবে পার্স হয়নি। সিম্পলとして।

আরও পঠন

এই টপিকে আরও অনেক কিছু বলা বাকি, সহিত স্বার্ম ইমপ্লিমেন্টেশন ডকার ১.১২-এর আগে, সেইসাথে ডকার ইঞ্জিনের করেন্ট ভার্সন। Wit, দয়া করে লেজি না হন এবং কিছু সময় ব্যয় করুন পড়তে:

  • Docker Swarm overview (স্ট্যান্ডঅ্যালোন Swarm ইনস্টলেশনের জন্য)
  • Build a Swarm cluster for production (স্ট্যান্ডঅ্যালোন সেটআপের জন্য)
  • Install and create a Docker Swarm (স্ট্যান্ডঅ্যালোন সেটআপের জন্য)
  • Docker engine swarm overview (ভার্সন ১.১২-এর জন্য)
  • Getting started with swarm mode (ভার্সন ১.১২-এর জন্য)

উপসংহার

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

আশা করি আপনি এই গাইডটি আকর্ষণীয় পাবেন। আমার ডকারে পূর্বের কাজের সাথে কম্বাইন করলে, এটি আপনাকে ইমেজ, নেটওয়ার্কিং স্ট্যাক, স্টোরেজ, এবং এখন ক্লাস্টার নিয়ে কীভাবে কাজ করতে হয় সেটির একটি decent understanding দেবে। warming up। সত্যিই, enjoy করুন এবং শীঘ্রই নতুন ডকার টিউটোরিয়ালের সাথে 뵙겠습니다। আমি নিজেকে কন্টেইন [sic] করতে পারছি না।

চিয়ার্স।

  1. ডকার ডেস্কটপ: স্মুথ কন্টেইনার ম্যানেজমেন্টের জন্য সহজ GUI

  2. ভার্চুয়ালবক্স NAT নেটওয়ার্কিং কনফিগারেশন একাধিক VM-এর জন্য

  3. KVM স্টোরেজ ম্যানেজমেন্ট আয়ত্ত করা: একটি ব্যাপক টিউটোরিয়াল

  4. VirtualBox মাস্টার করুন: ডিস্ক ইমেজ ক্লোনিং-র ধাপে ধাপে গাইড