পডের মধ্যে ধারক পুনরায় আরম্ভ করুন


112

আমার কাছে test-1495806908-xn5jnদুটি পাত্রে একটি পোড রয়েছে। আমি তাদের মধ্যে একটি কল করা আবার চালু করতে চাই container-test। কোনও পোডের মধ্যে একটি একক ধারক পুনরায় চালু করা সম্ভব এবং কীভাবে? যদি তা না হয় তবে আমি কীভাবে পোড পুনরায় চালু করব?

শুঁটি এর সাহায্যে তৈরি হয়েছিল deployment.yaml:

kubectl create -f deployment.yaml

উত্তর:


143

একক ধারকটি পুনরায় চালু করা কি সম্ভব?

এর মাধ্যমে নয় kubectl, যদিও আপনার ক্লাস্টারের সেটআপের উপর নির্ভর করে আপনি "প্রতারণা" করতে পারেন এবং docker kill the-sha-goes-hereযার ফলে কুবেলেট "ব্যর্থ" ধারকটি পুনরায় চালু করতে পারে (ধরে নিই, পোডের জন্য পুনরায় চালু করার নীতিটি বলে যা এটি করা উচিত)

আমি কিভাবে পোড পুনরায় আরম্ভ করব

এটি পডটি কীভাবে তৈরি হয়েছিল তার উপর নির্ভর করে তবে আপনি যে পোড নামটি দিয়েছিলেন তার উপর ভিত্তি করে, এটি একটি প্রতিলিপি সেটের তত্ত্বাবধানের অধীনে উপস্থিত বলে মনে হয়, যাতে আপনি ঠিক করতে পারেন kubectl delete pod test-1495806908-xn5jnএবং কুবেরনেটগুলি তার জায়গায় একটি নতুন তৈরি করতে পারে (নতুন পোডটিতে একটি থাকবে আলাদা নাম, তাই আর কখনও kubectl get podsফিরে আসবেন বলে আশা করবেন না test-1495806908-xn5jn)


7
ডিফল্ট পুনঃসূচনা নীতিটি সর্বদা পুনঃসূচনা হয়
হেম

আমি যদি এটি করতে পারি docker kill the-sha-goes-here:, তবে docker container restart the-sha-goes-hereপরিবর্তে কেন করবেন না? কেন kubeletএটি পুনরায় চালু করতে ভরসা ? যাইহোক, আসল সমস্যাটি হ'ল আমি dockerকমান্ডটি চালাচ্ছি এমনকি এটি ধারকটি মেরে ফেলতে হবে। চালু could-shell, dockerকে 8 এস ক্লাস্টারগুলি থেকে পাত্রে প্রদর্শিত হবে না!
নওয়াজ

52

এমন কিছু ক্ষেত্রে রয়েছে যখন আপনি পোড মোছার পরিবর্তে কোনও নির্দিষ্ট ধারক পুনরায় আরম্ভ করতে চান এবং কুবেরনেটকে এটি পুনরায় তৈরি করতে দিন।

kubectl exec POD_NAME -c CONTAINER_NAME /sbin/killall5আমার জন্য একটি কাজ করছেন ।

(আমি নীচের প্রস্তাবনার উপর ভিত্তি করে কমান্ডটি পরিবর্তন করেছি rebootto /sbin/killall5)


28
প্রতিটি পাত্রে থাকে না reboot; /sbin/killall5পরিবর্তে মৃত্যুদন্ড কার্যকর করার ক্ষেত্রে আমার আরও ভাগ্য ছিল ; যা সমস্ত প্রক্রিয়া হত্যা করে এবং ধারকটি প্রস্থান করবে।
ইনগো কারকাত

1
এবং প্রতিটি পাত্রে রুট ব্যবহারকারী নেই;)
জুলিএসএমজেড

4
-1, কারণ ... আপনি 'রিবুট' এর পার্শ্ব প্রতিক্রিয়া ব্যবহার করছেন সমস্ত প্রক্রিয়া এবং কুবেরনেটস এর পুনরুদ্ধার নিহত করে। এটি প্রচুর অনুমান করছে: মূল হিসাবে চালানো, পাত্রে বাইনারিগুলির সহজলভ্যতা, সক্ষম হওয়া একটি পুনঃসূচনা পলিসি ইত্যাদি Also এছাড়াও, এই প্রক্রিয়াটির ব্যর্থতা সম্পর্কে লগগুলি ছড়িয়ে দেয়, যা আদর্শ নয়।
gertvdijk

1
দেখে মনে হচ্ছে অ্যালপাইনটিতে কিল্ল নেই, তবে / এসবিন / রিবুট দুর্দান্ত কাজ করে। kubectl exec POD_NAME -c CONTAINER_NAME /sbin/reboot
মনোমুগ্ধকর

38

পোড এবং ধারক উভয়ই সংক্ষিপ্ত, নির্দিষ্ট কন্টেইনারটি বন্ধ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করার চেষ্টা করুন এবং কে 8 এস ক্লাস্টার একটি নতুন ধারক পুনরায় আরম্ভ করবে।

kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"

এটি SIGTERM1 প্রক্রিয়াতে সংকেত প্রেরণ করবে , এটিই ধারকটিতে চলমান মূল প্রক্রিয়া। অন্যান্য সমস্ত প্রক্রিয়াগুলি 1 টি প্রক্রিয়ার শিশু হবে এবং প্রক্রিয়া 1 থেকে বেরিয়ে যাওয়ার পরে এটি সমাপ্ত হবে। আপনি পাঠাতে পারেন এমন অন্যান্য সংকেতের জন্য কিল ম্যানপেজটি দেখুন ।


3
আমি অন্যান্য উত্তর চেষ্টা করেছিলাম এবং এটিই কেবল আমার পক্ষে কাজ করেছিল, মনে হয় এটি সবচেয়ে সাধারণ।
বাতাতো

আমি একটি পডের ভিতরে যে ধারকটির নাম চলছে তা কীভাবে পাব ??
আতিথ রাজেন্দ্রান

আমার অ্যালপাইন ধারকটি যখন চেষ্টা করেছিলাম তখন কিছুটা অস্বাস্থ্যকর স্থিতিতে চলে গিয়েছিল। kubectl get po শো এর পডের স্থিতি কলামে ত্রুটি ..
আতিফম

17

কুবেরনেটস থাকার পুরো কারণটি তাই এটি আপনার জন্য পাত্রে পরিচালনা করে যাতে পডের ধারকগুলির লাইফলাইল সম্পর্কে আপনার এত যত্ন করার দরকার নেই।

যেহেতু আপনার একটি deploymentসেটআপ রয়েছে যা ব্যবহার করে replica set। আপনি kubectl delete pod test-1495806908-xn5jnপোড ব্যবহার করে মুছে ফেলতে পারেন এবং কুবারনেটগুলি কোনও ডাইনটাইম ছাড়াই 2 টি ধারক সহ একটি নতুন পোড তৈরি পরিচালনা করবে। শিংগুলিতে একক পাত্রে ম্যানুয়ালি পুনঃসূচনা করার চেষ্টা করা কুবারনেটগুলির পুরো সুবিধাটিকে তুচ্ছ করে।


2
আমার টার্মিনেটিং পডের প্রক্রিয়া 0/1 হয়ে যাওয়ার সাথে সাথে আমি ডাউনটাইমটি অনুভব করেছি
ডিন ক্রিশ্চান আর্মদা

6
আপনাকে "কোনও ডাউনটাইম ছাড়াই" সতর্কতার সাথে বলা দরকার। এটি আপনার সঠিক কনফিগারেশনের উপর নির্ভর করে। প্লাস শূন্য-ডাউনটাইমের নিজস্ব চ্যালেঞ্জ রয়েছে।
নিকোলাস

আমি যখন আমার স্থাপনার কোনও পড মুছি কেবলমাত্র 1 টি প্রতিলিপি দিয়ে, আমি সর্বদা ডাউনটাইম অভিজ্ঞতা করি।
Nyein চ্যান Wynn

7

উপরের সমস্ত উত্তরগুলিতে পোড মুছে ফেলার কথা উল্লেখ করা হয়েছে ... তবে আপনার যদি একই পরিষেবাদির অনেকগুলি পোড থাকে তবে তাদের প্রতিটি মুছে ফেলা বিরক্তিকর হবে ...

অতএব, আমি নিম্নলিখিত সমাধানটি প্রস্তাব করছি, পুনরায় চালু করুন :

  • 1) স্কেল শূন্য সেট করুন:

     kubectl scale deployment <<name>> --replicas=0 -n service 
    

    উপরের কমান্ডটি আপনার সমস্ত শুঁটি নামের সাথে শেষ করবে <<name>>

  • 2) আবার পোড শুরু করতে, প্রতিরূপ 0 টিরও বেশি সেট করুন

    kubectl scale deployment <<name>> --replicas=2 -n service
    

    উপরের কমান্ডটি আপনার পোডগুলি 2 টি প্রতিরূপ দিয়ে আবার শুরু করবে।


5
প্রশ্নটি একটি শুঁটিয়ের মধ্যে কীভাবে একটি একক ধারক পুনরায় চালু করবেন সে সম্পর্কে জিজ্ঞাসা করছিল।
ক্রিস বিচ

এছাড়াও, 0 টি পোড স্কেলিং অত্যন্ত উপলব্ধ অ্যাপ্লিকেশনগুলির জন্য কাজ করবে না। kubectl patch deployment <deployment name> -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": { \"redeploy\": \"$(date +%s)\"}}}}}"পরিবর্তে ব্যবহার করুন। এটি মোতায়েন আপডেট করে এবং অতএব রোলিং আপডেট কৌশল অনুসারে এটি দ্বারা পরিচালিত সমস্ত পোডের বিনোদন শুরু করবে।
কোস্তরহব

3

ইন্টিগ্রেশন পডে নতুন করে চিত্রগুলি পুনঃ-স্থাপনার জন্য জোর করতে আমরা বেশ সুবিধাজনক কমান্ড লাইন ব্যবহার করি।
আমরা লক্ষ্য করেছি যে আমাদের আলপাইন পাত্রে সমস্ত তাদের পিআইডি 5-তে "চালিত" কমান্ড চালায় Therefore সুতরাং, এটি একটি SIGTERMসংকেত প্রেরণ করে ধারকটি নীচে নেমে যায়। imagePullPolicyসেট হচ্ছে Alwaysযখন এটি ধারক ফিরে এনেছে kubelet পুনরায় টান সর্বশেষ ইমেজ আছে।

kubectl exec -i [pod name] -c [container-name] -- kill -15 5

1
-15 এবং 5 কোনটি উপস্থাপন করে?
জন বালভিন আরিয়াস

2
@ জোহান বালভিনআরিয়াস এটি উপরের বর্ণনায় ধরা পড়েছে, তবে আপনি kill -15 5পিআইডি 5 সহ প্রক্রিয়ায় "-15" সিগন্যাল প্রেরণের জন্য কিল কমান্ডটি চালাচ্ছেন 5. এইভাবে আপনি কোনও প্রক্রিয়া বলবেন যে আপনি এটি বন্ধ করতে চান (সাইনটারএম) ) এবং যে কোনও খোলা সংস্থানগুলি (টেম্প ফাইল, রোলব্যাক ডিবি লেনদেন, ঘনিষ্ঠ সংযোগ, যাই হোক না কেন) পরিষ্কার করতে সময় নিতে হবে। -9 (সিগ্কিল) এর সাথে বিপরীতে, প্রক্রিয়াটি তত্ক্ষণাত হত্যা করে, এটি কোনও উন্মুক্ত সংস্থান পরিষ্কার করার অনুমতি দেয় না।
কনরাড.ডিয়ান

2

ডকফাইফিলের CMD/ নির্দিষ্ট করা প্রক্রিয়াটি ENTRYPOINTআমার জন্য কাজ করছে illing (ধারকটি স্বয়ংক্রিয়ভাবে পুনরায় আরম্ভ হবে)

আমার পাত্রে পুনরায় বুট করার অনুমতি দেওয়া হয়নি, সুতরাং আমাকে এই কার্যটি ব্যবহার করতে হবে।


2

corednsশুঁটিতে একটি সমস্যা ছিল , আমি এই জাতীয় পোড দ্বারা মুছে ফেলেছি

kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf

এর পডটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে।


2
kubectl exec -it POD_NAME -c CONTAINER_NAME bash - then kill 1

ধারনা করা হয় যে ধারকটি রুট হিসাবে চালিত যা প্রস্তাবিত নয়।

আমার ক্ষেত্রে যখন আমি অ্যাপ্লিকেশন কনফিগারটি পরিবর্তন করেছি তখন আমাকে ধারকটি পুনরায় বুট করতে হয়েছিল যা সিডিকার প্যাটার্নে ব্যবহৃত হয়েছিল, আমি বসার বুট অ্যাপ্লিকেশনটির জন্য পিআইডি মেরে ফেলব যা ডকার ব্যবহারকারীর মালিকানাধীন।


1
আপনি যদি লিখেন তবে kubectl exec -it ${POD_NAME?} -c ${CONTAINER_NAME?} bash ...এটি লোকেদের অনুলিপি / আটকানো আরও সহজ করে তোলে।
উইলিয়াম পার্সেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.