نوٽ. ترجمو: هي آرٽيڪل عوامي ڊومين ۾ شايع ٿيل منصوبي جي مواد جو حصو آهي learnk8s، ٽريننگ ڪمپنيون ۽ انفرادي منتظمين ڪبرنيٽس سان ڪم ڪرڻ لاءِ. ان ۾، ڊينيئل پولينسڪ، پروجيڪٽ مئنيجر، بصري هدايتون شيئر ڪري ٿو ته ڪي 8s ڪلستر تي هلندڙ ايپليڪيشنن سان عام مسئلن جي صورت ۾ ڪهڙا قدم کڻڻ گهرجن.
ڇا ليبل جي باري ۾ track: canary ڊيپلائيشن سيڪشن جي چوٽي تي؟ ڇا اهو ملائڻ گهرجي؟
هي ليبل ڊيپلائيمينٽ لاءِ مخصوص آهي ۽ سروس طرفان استعمال نه ڪيو ويو آهي رستي جي ٽرئفڪ لاءِ. ٻين لفظن ۾، ان کي ختم ڪري سگھجي ٿو يا مختلف قدر مقرر ڪري سگھجي ٿو.
چونڊيندڙ بابت ڇا؟ matchLabels?
اهو هميشه پوڊ جي ليبل سان ملائڻ گهرجي, ڇاڪاڻ ته ان کي استعمال ڪيو ويندو آهي deployment ذريعي پوڊ کي ٽريڪ ڪرڻ لاء.
اچو ته سمجهون ته توهان صحيح تبديليون ڪيون آهن. ان کي ڪيئن چيڪ ڪرڻ لاء؟
توھان ھيٺ ڏنل حڪم سان پوڊ ليبل چيڪ ڪري سگھو ٿا:
kubectl get pods --show-labels
يا، جيڪڏهن پوڊ ڪيترن ئي ايپليڪيشنن سان تعلق رکن ٿا:
kubectl get pods --selector any-name=my-app --show-labels
ڪٿي any-name=my-app هڪ ليبل آهي any-name: my-app.
ڇا ڪي مشڪلاتون رهجي ويون آهن؟
توهان پوڊ سان ڳنڍي سگهو ٿا! هن کي ڪرڻ لاء توهان کي حڪم استعمال ڪرڻ جي ضرورت آهي port-forward kubectl ۾. اهو توهان کي خدمت سان ڳنڍڻ ۽ ڪنيڪشن چيڪ ڪرڻ جي اجازت ڏئي ٿو.
حقيقت اها آهي ته ڪو عالمگير حڪم ناهي. انهن جو هڪ ميلاپ استعمال ڪرڻ گهرجي.
عام پوڊ مسئلا
پوڊ غلطين جا ٻه مکيه قسم آهن: شروعاتي غلطيون ۽ رن ٽائم غلطيون.
شروعاتي غلطيون:
ImagePullBackoff
ImageInspectError
ErrImagePull
ErrImageNeverPull
RegistryUnavailable
InvalidImageName
رن ٽائم غلطيون:
CrashLoopBackOff
RunContainerError
KillContainerError
VerifyNonRootError
RunInitContainerError
CreatePodSandboxError
ConfigPodSandboxError
KillPodSandboxError
SetupNetworkError
TeardownNetworkError
ڪجهه غلطيون ٻين کان وڌيڪ عام آهن. هتي ڪجھ سڀ کان عام غلطيون آهن ۽ انهن کي ڪيئن حل ڪجي.
ImagePullBackOff
هي غلطي تڏهن ٿيندي آهي جڏهن ڪبرنيٽس پوڊ ڪنٽينرز مان هڪ لاءِ تصوير حاصل ڪرڻ جي قابل ناهي. هتي هن جا ٽي سڀ کان عام سبب آهن:
تصوير جو نالو غلط آهي - مثال طور، توهان ان ۾ غلطي ڪئي، يا تصوير موجود ناهي؛
تصوير لاءِ هڪ غير موجود ٽيگ بيان ڪيو ويو آهي؛
تصوير هڪ خانگي رجسٽري ۾ ذخيرو ٿيل آهي ۽ ڪبرنيٽس کي ان تائين رسائي جي اجازت ناهي.
پهرين ٻن سببن کي ختم ڪرڻ آسان آهي - صرف تصوير جو نالو ۽ ٽيگ درست ڪريو. بعد جي صورت ۾، توهان کي رازداري ۾ بند ٿيل رجسٽري لاءِ سندون داخل ڪرڻ ۽ پوڊز ۾ ان لاءِ لنڪ شامل ڪرڻ جي ضرورت آهي. Kubernetes دستاويزن ۾ هڪ مثال آهي اهو ڪيئن ڪري سگهجي ٿو.
ڪرش لوپ واپس بند
Kubenetes هڪ غلطي اڇلائي ٿو CrashLoopBackOff، جيڪڏهن ڪنٽينر شروع نه ٿي سگهي. اهو عام طور تي ٿئي ٿو جڏهن:
ايپليڪيشن ۾ هڪ بگ آهي جيڪو ان کي لانچ ڪرڻ کان روڪي ٿو؛
توهان کي ڪوشش ڪرڻ گهرجي ته ڪنٽينر مان لاگز حاصل ڪرڻ لاء ان جي ناڪامي جو سبب ڳولڻ لاء. جيڪڏهن لاگز تائين رسائي ڪرڻ ڏکيو آهي ڇو ته ڪنٽينر تمام جلدي ٻيهر شروع ٿئي ٿو، توهان هيٺ ڏنل حڪم استعمال ڪري سگهو ٿا:
kubectl logs <pod-name> --previous
اهو ڪنٽينر جي پوئين اوتار کان غلطي پيغام ڏيکاري ٿو.
رن ڪنٽينر جي غلطي
هي غلطي ٿيندي آهي جڏهن ڪنٽينر شروع ٿيڻ ۾ ناڪام ٿيندو آهي. اهو ايپليڪيشن شروع ٿيڻ کان اڳ واري لمحي سان ملندو آهي. اهو عام طور تي غلط سيٽنگن جي ڪري آهي، مثال طور:
هڪ غير موجود حجم کي نصب ڪرڻ جي ڪوشش ڪرڻ جهڙوڪ ConfigMap يا راز؛
صرف پڙهڻ واري حجم کي پڙهڻ جي طور تي لکڻ جي ڪوشش.
ٽيم اهڙين غلطين جو تجزيو ڪرڻ لاءِ موزون آهي kubectl describe pod <pod-name>.
ڪلستر وٽ ڪافي وسيلا نه آهن، جهڙوڪ پروسيسنگ پاور ۽ ميموري، پوڊ کي هلائڻ لاءِ.
اعتراض مناسب نالي واري جاء تي نصب ڪيو ويو آهي ResourceQuota ۽ پوڊ ٺاھڻ سبب نالي جي جڳھ ڪوٽا کان ٻاھر ٿي ويندي.
پوڊ Pending تي پابند آهي PersistentVolumeClaim.
انهي حالت ۾، اهو حڪم استعمال ڪرڻ جي صلاح ڏني وئي آهي kubectl describe ۽ سيڪشن چيڪ ڪريو Events:
kubectl describe pod <pod name>
سان لاڳاپيل غلطين جي صورت ۾ ResourceQuotas، اهو حڪم استعمال ڪندي ڪلستر لاگ ڏسڻ جي صلاح ڏني وئي آهي
kubectl get events --sort-by=.metadata.creationTimestamp
پوڊ تيار نه آهن
جيڪڏهن پوڊ جي طور تي درج ڪيو ويو آهي Running، پر حالت ۾ نه آهي Ready، مطلب ته ان جي تياري کي جانچڻ (تيار جي جاچ) ناڪام ٿي.
جڏهن اهو ٿئي ٿو، پوڊ سروس سان ڳنڍي نه ٿو ۽ ان ڏانهن ڪوبه ٽرئفڪ وهندو آهي. تياري جي امتحان ۾ ناڪامي ايپليڪيشن ۾ مسئلن جي سبب آهي. انهي حالت ۾، غلطي ڳولڻ لاء، توهان کي سيڪشن جو تجزيو ڪرڻو پوندو Events حڪم جي پيداوار ۾ kubectl describe.
2. خدمت جي تشخيص
جيڪڏهن پوڊ جي طور تي درج ٿيل آهن Running и Ready، پر اڃا تائين اپليڪيشن مان ڪو جواب نه آهي، توهان کي چيڪ ڪرڻ گهرجي سروس سيٽنگون.
خدمتون انهن جي ليبلن جي بنياد تي پوڊ ڏانهن ٽرئفڪ جي رستي جي ذميوار آهن. تنهن ڪري، پهرين شيء جيڪا توهان کي ڪرڻ جي ضرورت آهي اها چيڪ ڪريو ته ڪيترا پوڊ خدمت سان ڪم ڪن ٿا. هن کي ڪرڻ لاء، توهان خدمت ۾ آخري پوائنٽ چيڪ ڪري سگهو ٿا:
kubectl describe service <service-name> | grep Endpoints
آخر پوائنٽ فارم جي قدرن جو هڪ جوڙو آهي <IP-адрес:порт>، ۽ گهٽ ۾ گهٽ هڪ اهڙو جوڙو آئوٽ پٽ ۾ موجود هجڻ گهرجي (يعني گهٽ ۾ گهٽ هڪ پوڊ خدمت سان ڪم ڪري ٿو).
جيڪڏهن سيڪشن Endpoins خالي، ٻه اختيار ممڪن آهن:
صحيح ليبل سان ڪو به پوڊ نه آهي (اشارو: چيڪ ڪريو ته نالو جاء صحيح طور تي چونڊيو ويو آهي)؛
منتخب ڪندڙ ۾ سروس ليبل ۾ هڪ غلطي آهي.
جيڪڏهن توهان آخري پوائنٽن جي هڪ فهرست ڏسندا آهيو پر اڃا تائين ايپليڪيشن تائين رسائي نٿا ڪري سگهو، پوء امڪاني مجرم هڪ بگ آهي targetPort خدمت جي وضاحت ۾.
خدمت جي ڪارڪردگي کي ڪيئن جانچيو؟
خدمت جي قسم کان سواء، توهان حڪم استعمال ڪري سگهو ٿا kubectl port-forward ان سان ڳنڍڻ لاء:
هن جو مطلب آهي ته Ingress ڪنٽرولر گهڻو ڪري صحيح ترتيب نه آهي. جيئن ته Ingress ڪنٽرولر ڪلستر ۾ ٽئين پارٽي جو حصو آهي، ان جي قسم جي لحاظ کان مختلف ڊيبگنگ طريقا آهن.
پر ان کان اڳ جو توھان خاص اوزار استعمال ڪرڻ جي ڪوشش ڪريو Ingress ترتيب ڏيڻ لاءِ، توھان ڪجھھ سادو ڪري سگھو ٿا. Ingress استعمال ڪري ٿو serviceName и servicePort خدمت سان ڳنڍڻ لاء. توهان کي چيڪ ڪرڻ جي ضرورت آهي ته اهي صحيح ترتيب ڏنل آهن. توھان ھي حڪم استعمال ڪندي ڪري سگھو ٿا:
kubectl describe ingress <ingress-name>
جيڪڏهن ڪالم Backend خالي، هڪ اعلي امڪان آهي هڪ ترتيب جي غلطي جو. جيڪڏهن پٺاڻون جاءِ تي آهن، پر ايپليڪيشن اڃا تائين رسائي لائق نه آهي، ته پوءِ مسئلو ٿي سگهي ٿو لاڳاپيل هجي:
عوامي انٽرنيٽ کان رسائي سيٽنگون داخل ڪريو؛
عوامي انٽرنيٽ کان ڪلستر رسائي سيٽنگون.
توهان انفراسٹرڪچر سان مسئلن جي نشاندهي ڪري سگهو ٿا سڌو سنئون انگريس پوڊ سان ڳنڍڻ سان. ھن کي ڪرڻ لاءِ، پھريائين ڳولھيو Ingress Controller pod (اھو ٿي سگھي ٿو ڪنھن مختلف نالي جي جڳھ ۾):