“Kubectl ডিবাগ” এর সাথে কুবারনেটস কন্টেইনার সমস্যাগুলি কীভাবে তদন্ত করবেন

কুবারনেটস লোগো

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

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

Kubectl ডিবাগ ব্যবহার করার প্রস্তুতি নিচ্ছে

kubectl debug Kubernetes এবং Kubectl-এর v1.18 দিয়ে লঞ্চ করা হয়েছিল। এটি আপনার ক্লাস্টারে পাওয়া ক্ষণস্থায়ী পাত্রের উপর নির্ভর করে। ক্ষণস্থায়ী কন্টেইনারগুলি Kubernetes v1.23-এ একটি বিটা বৈশিষ্ট্য হয়ে উঠেছে এবং এখন ডিফল্টরূপে সক্ষম করা হয়েছে। আপনার ক্লাস্টারটি একটি পুরানো Kubernetes সংস্করণ চালালে আপনাকে ম্যানুয়ালি বৈশিষ্ট্য গেটটি সক্ষম করতে হবে।

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

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

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

KubectlDebug ব্যবহার করে

চালিয়ে যাওয়ার আগে, পরীক্ষার উদ্দেশ্যে ব্যবহার করার জন্য একটি মৌলিক স্থাপনা তৈরি করুন:

$ kubectl create deployment nginx --image=nginx:latest
deployment.apps/nginx created

পরবর্তী ব্যবহার করুন get pods আপনার স্থাপনার পডের নাম খুঁজে পেতে কমান্ড:

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-55649fd747-qsnr2   1/1     Running   0          5s

আমাদের স্থাপনার পড বলা হয় nginx-55649fd747-qsnr2.

এখন আপনি ব্যবহার করতে পারেন kubectl debug আপনার পডের ভিতরে একটি ডিবাগিং সেশন শুরু করার কমান্ড:

$ kubectl debug -it --image=ubuntu:20.04 nginx-55649fd747-qsnr2

কমান্ডের সিনট্যাক্স একটি হাইব্রিড এর অনুরূপ kubectl create অন্যান্য kubectl debug. কমান্ডে সরবরাহ করা নামহীন যুক্তিটি সংযুক্ত করার জন্য একটি বিদ্যমান পড সনাক্ত করে। দ্য --image আর্গুমেন্ট নতুন কন্টেইনারের জন্য ব্যবহার করার জন্য ইমেজ নির্দিষ্ট করে। আমরা ব্যবহার করছি ubuntu:20.04 উবুন্টু লিনাক্স ডিস্ট্রিবিউশনে অন্তর্ভুক্ত পরিচিত কমান্ডগুলিতে অ্যাক্সেস পেতে এখানে।

দ্য -it পতাকা সমতুল্য --stdin --tty. এই আর্গুমেন্টগুলি সহ কন্টেইনারে একটি TTY বরাদ্দ করবে, এটি সংযুক্ত করবে এবং আপনার টার্মিনালের stdin স্ট্রীম সংযুক্ত করবে। এটি আপনাকে আপনার নতুন পাত্রে একটি ইন্টারেক্টিভ শেল দেয়।

এখন আপনি আপনার ক্ষণস্থায়ী পাত্রের মধ্যে থেকে আপনার ডিবাগিং কাজগুলি সম্পাদন করতে পারেন৷

কপি পড

ব্যবহার করার আরেকটি উপায় kubectl debug একটি সঙ্গে আছে --copy-to যুক্তি. এটি লক্ষ্য পডের একটি অনুলিপি তৈরি করে এবং অনুলিপিতে ক্ষণস্থায়ী ধারক যোগ করে। মূল পড অক্ষত আছে.

$ kubectl debug -it --image=ubuntu:20.04 --copy-to nginx-debug nginx-555649fd747-qsnr2

এই বৈশিষ্ট্যটি আপনাকে আরও বেশি আশ্বাস দেয় যে ডিবাগিংয়ের সময় করা পরিবর্তনগুলি সরাসরি আপনার উত্পাদন অ্যাপ্লিকেশনকে প্রভাবিত করবে না।

পড অনুলিপি করা আপনাকে প্রক্রিয়া নেমস্পেস শেয়ারিং সক্রিয় করতে দেয়। এটি আপনার পডের বিদ্যমান প্রক্রিয়াগুলিকে আপনার ক্ষণস্থায়ী পাত্রে দৃশ্যমান করে তোলে। এটি বিদ্যমান পাত্রে তাদের হিসাবে ব্যবহার করা যাবে না spec.shareProcessNamespace ক্ষেত্র সাধারণত সেট করা হবে false. চলমান kubectl debug সঙ্গে --copy-to অন্যান্য --share-processes পতাকা অনুলিপি করা পডে প্রক্রিয়া ভাগাভাগি সক্ষম করবে, এই পদ্ধতিটিকে আরও স্বজ্ঞাত করে তুলবে:

$ kubectl debug -it --image=ubuntu:20.04 --copy-to nginx-debug --share-processes nginx-555649fd747-qsnr2

আপনার ক্ষণস্থায়ী উবুন্টু কন্টেইনারে দৃশ্যমান প্রক্রিয়া তালিকায় এখন একটি NGINX প্রক্রিয়া অন্তর্ভুক্ত থাকবে:

$ ps ax
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
    9 root      0:00 nginx: master process nginx -g daemon off;

এই প্রক্রিয়াটি এখনও আপনার পডের মধ্যে পৃথক NGINX পাত্রে চলছে৷ নেমস্পেস শেয়ারিং এর মাধ্যমে লক্ষ্য কন্টেইনারের ফাইল সিস্টেমে অ্যাক্সেস প্রদান করে /proc:

$ ls /proc/9/root/etc/nginx
conf.d fastcgi_params mime.types modules nginx.conf ...

এইভাবে পড কপি করা তাই একটি শক্তিশালী ডিবাগিং টুল। আপনি পরিচিত সরঞ্জামগুলির সাথে প্রস্তুত একটি পৃথক ধারক ব্যবহার করে পডের ফাইল এবং প্রক্রিয়াগুলি সহজেই পরিদর্শন করতে পারেন।

ঐচ্ছিক যুক্তি

দ্য --copy-to পতাকা সর্বদা মূল পডকে ডিফল্টরূপে অক্ষত রাখে। আপনি অপারেশনটি ব্যবহার করার পরিবর্তে প্রতিস্থাপন হিসাবে কাজ করতে পারেন --replace. এটি প্রথম পড বন্ধ করবে।

$ kubectl debug -it --image=ubuntu:20.04 --copy-to nginx-debug --replace nginx-555649fd747-qsnr2

Kubernetes অনুলিপি করা Pod যেকোন উপলব্ধ নোডে নির্ধারিত করবে। আপনি যদি একটি সামঞ্জস্যপূর্ণ পরীক্ষার পরিবেশ নিশ্চিত করতে চান তবে এটি সমস্যাযুক্ত হতে পারে। যোগ করা --same-node আপনার ক্লাস্টারে মেশিনের মধ্যে বিদ্যমান যে কোনো পার্থক্য দূর করে বিদ্যমান পডের নোডে অনুলিপি নির্ধারণ করবে।

$ kubectl debug -it --image=ubuntu:20.04 --copy-to nginx-debug --same-node nginx-555649fd747-qsnr2

আরেকটি দরকারী বিকল্প হল --env আপনার ক্ষণস্থায়ী পাত্রের ভিতরে অতিরিক্ত পরিবেশ ভেরিয়েবল সেট করতে। ডিবাগিং টুল কনফিগার করতে বা আপনার টার্গেট পড থেকে উত্তরাধিকারসূত্রে প্রাপ্ত মানগুলিকে ওভাররাইড করতে আপনাকে এটি ব্যবহার করতে হতে পারে।

$ kubectl debug -it --image=ubuntu:20.04 --copy-to nginx-debug --env EDITOR=/usr/bin/nano nginx-555649fd747-qsnr2

পরিশেষে, যে পাত্রে দ্বারা নির্মিত মনে রাখবেন kubectl debug ইন্টারেক্টিভ হতে হবে না। আপনি সহজেই আপনার পড ব্যবহার করে এক-অফ কমান্ড চালাতে পারেন kubectl exec– সিনট্যাক্সের মত। দ্য --attach আপনি যখন চালাচ্ছেন না তখন আপনার শেলটি কন্টেইনারের সাথে সংযুক্ত কিনা তা নিয়ন্ত্রণ করতে আর্গুমেন্ট সমর্থিত -i (--stdin)

$ kubectl debug --image=ubuntu:20.04 --copy-to nginx-debug --share-processes --attach true nginx-555649fd747-qsnr2 -- ls /proc/9/root/etc/nginx
conf.d fastcgi_params mime.types modules nginx.conf ...

উপসংহার

ক্ষণস্থায়ী পাত্রে এবং kubectl debug কমান্ড Kubernetes ওয়ার্কলোডের জন্য একটি সরলীকৃত ডিবাগিং অভিজ্ঞতা প্রদান করে। আপনি আপনার নিয়মিত পাত্রে একটি ভিন্ন চিত্র ব্যবহার করে একটি পডের ভিতরে কমান্ড চালাতে পারেন। এটি আপনাকে ডিবাগিং সরঞ্জামগুলি অ্যাক্সেস করতে দেয় যা আপনার অ্যাপ্লিকেশনের ছবিতে অন্তর্ভুক্ত নয়৷

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