ठीक है। चलो शुरू हो जाओ। सबसे पहले यह सुनिश्चित करें कि आपने अपना ऐप डिबग मोड में प्रकाशित किया है! मैं अपनी छवियों के निर्माण के लिए एक नए डॉकर फीचर मल्टी-स्टेज बिल्ड का उपयोग करना पसंद करता हूं, इसलिए मैं डॉकरफाइल में एक बिल्ड स्टेज के अंत में ऐसा कुछ लिखूंगा:
RUN dotnet publish -c Debug -o ./results
मिनिक्यूब के लिए छवियों को पुश करने के लिए मैं स्थानीय कंटेनर रजिस्ट्री का उपयोग करता हूं जैसा कि यहां वर्णित है। लेकिन आप इसे कर सकते हैं जैसा कि आप आमतौर पर करते हैं। जब आपके पास आपका कंटेनर आ जाता है और हम उसे चलाना शुरू कर सकते हैं। मैं उस उद्देश्य के लिए पॉवर्सशेल का उपयोग करूंगा लेकिन इसे किसी भी अन्य टर्मिनल भाषा में आसानी से लिखा जा सकता है। जब आवश्यक हो, इको कमांड के साथ एक के बाद एक वर्जन के मानों की जाँच करके आप अपने टर्मिनल एक में ट्यूटोरियल स्टेप बाई स्टेप और कमांड निष्पादित कर सकते हैं। आपकी * .yml फ़ाइल में आपको एक चयनकर्ता होना चाहिए जो कुछ इस तरह वर्णित हो:
selector:
matchLabels:
app: mywebapp
इसे पकड़ो और अपने पॉवर्सशेल टर्मिनल में $ चयनकर्ता संस्करण को परिभाषित करने के लिए उपयोग करें:
$Selector = 'app=mywebapp'
आपको एक पॉड खोजने की जरूरत है जहां आपका कंटेनर एप्लिकेशन इसके चयनकर्ता द्वारा चल रहा हो:
$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';
यह मानते हुए कि आपके पास फली पर केवल एक कंटेनर है अब आप उस कंटेनर पर कमांड निष्पादित कर सकते हैं। डिफ़ॉल्ट कंटेनर में vsdbg स्थापित नहीं है इसलिए आगे बढ़ें और इसे स्थापित करें:
kubectl exec $pod -i -- apt-get update;
kubectl exec $pod -i -- apt-get install -y unzip;
kubectl exec $pod -i -- curl -sSL https://aka.ms/getvsdbgsh -o '/root/getvsdbg.sh';
kubectl exec $pod -i -- bash /root/getvsdbg.sh -v latest -l /vsdbg;
इसके बाद, आपको अपने एप्लिकेशन के PID को कंटेनर के अंदर ढूंढना होगा:
$prid = kubectl exec $pod -i -- pidof -s dotnet;
आम तौर पर यह 1 के बराबर है लेकिन कम धारणा बनाना बेहतर है। बस। अब आप डिबगर शुरू कर सकते हैं:
kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;
विंडो बंद करने से पहले निम्नलिखित कमांड को निष्पादित करना न भूलें अन्यथा आपका ऐप हमेशा के लिए अटक जाएगा:
-target-detach
-gdb-exit
आइए, सब कुछ एक साथ रखें, एक पुन: प्रयोज्य स्क्रिप्ट बनाएं और इसे जड़ों के पास कहीं बचा लें क्योंकि आप इसे अपने सभी ASP.NET कोर प्रोजेक्ट्स के साथ उपयोग कर सकते हैं:
param(
# the selector from your yml file
# selector:
# matchLabels:
# app: myweb
# -Selector app=myweb
[Parameter(Mandatory=$true)][string]$Selector
)
Write-Host '1. searching pod by selector:' $Selector '...';
$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';
Write-Host '2. installing updates ...';
kubectl exec $pod -i -- apt-get update;
Write-Host '3. installing unzip ...';
kubectl exec $pod -i -- apt-get install -y --no-install-recommends unzip;
Write-Host '4. downloading getvsdbgsh ...';
kubectl exec $pod -i -- curl -sSL https://aka.ms/getvsdbgsh -o '/root/getvsdbg.sh';
Write-Host '5. installing vsdbg ...';
kubectl exec $pod -i -- bash /root/getvsdbg.sh -v latest -l /vsdbg;
$cmd = 'dotnet';
Write-Host '6. seaching for' $cmd 'process PID in pod:' $pod '...';
$prid = kubectl exec $pod -i -- pidof -s $cmd;
Write-Host '7. attaching debugger to process with PID:' $pid 'in pod:' $pod '...';
kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;
अब आप इस स्क्रिप्ट को इस तरह निष्पादित कर सकते हैं जब टर्मिनल स्क्रिप्ट फ़ोल्डर से चल रहा हो:
powershell -ExecutionPolicy Bypass -File kubedbg.ps1 -Selector app=mywebapp
लेकिन क्या हम विजुअल स्टूडियो से डिबगिंग करने वाले नहीं हैं? हाँ! चलिए आगे बढ़ते हैं और Visual Studio MIEngine से हमारी टर्मिनल प्रक्रिया शुरू करते हैं। Visual Studio में अपना प्रोजेक्ट खोलें। निम्न सामग्री के साथ नई XML फ़ाइल जोड़ें और इसे kubedbg.xml नाम दें:
<PipeLaunchOptions xmlns="http://schemas.microsoft.com/vstudio/MDDDebuggerOptions/2014"
PipePath="powershell" TargetArchitecture="x64" MIMode="clrdbg"
PipeArguments="
-ExecutionPolicy Bypass
-File C:\kube\kubedbg.ps1
-Selector app=mywebapp">
<LaunchCompleteCommand>None</LaunchCompleteCommand>
</PipeLaunchOptions>
में -File
पैरामीटर आप स्क्रिप्ट फ़ाइल हम से पहले बनाए गए का निरपेक्ष पथ निर्दिष्ट करने के लिए की जरूरत है। फिर कमांड विंडो खोलने और निम्नलिखित कमांड को चलाने के लिए Ctrl + Alt + A दबाएं:
Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
यह कमांड विजुअल स्टूडियो के अंदर डिबगिंग प्रक्रिया को शुरू करेगा, जिसकी सभी मानक लाभ की आप अपेक्षा करेंगे। लेकिन डिबग मेनू से सभी को अलग करके दबाकर किसी अन्य तरीके से डिबग करना बंद न करें! हालांकि यह कमांड हर समय लिखने के लिए बहुत सुविधाजनक नहीं है। सौभाग्य से विजुअल स्टूडियो में, आप पैरामीटर वाले कमांड के लिए उपनाम निर्दिष्ट कर सकते हैं। आखिरकार, आपको kubedbg.xml
प्रत्येक प्रोजेक्ट के लिए एक नई फ़ाइल की आवश्यकता होगी । इसे ध्यान में रखते हुए कमांड विंडो में निम्नलिखित कमांड टाइप करके अपना पहला उपनाम बनाएं:
alias kubedbg.mywebapp Debug.MIDebugLaunch /Executable:dotnet
/OptionsFile:absolute_path_to_kubedbg.xml
उसके बाद, आप कमांड विंडो में केवल kubedbg.mywebapp निष्पादित करके डिबगिंग शुरू कर सकते हैं। इससे भी बेहतर आप एक ही कमांड को टूलबार कॉम्बोक्स से चला सकते हैं लेकिन उपसर्ग के साथ: >kubedbg.mywebapp.
यह मुश्किल नहीं है क्योंकि एक पाठ पूरा होने में भी है। आप यहाँ कमांड उपनामों के बारे में अधिक पढ़ सकते हैं। खुश डिबगिंग! पुनश्च: एक बोनस के रूप में बिल्कुल उसी तरह से आप अपने ऐप को किसी सार्वजनिक क्लाउड के अंदर चलाने पर भी डिबग कर सकते हैं। जब सार्वजनिक बादल में एक क्लस्टर को kubectl को सौंपा जाता है, तो यह एक ही स्क्रिप्ट के साथ काम करता है और वास्तविक क्लस्टर प्रक्रिया आईडी के अंदर से भुगतान की गई कम मान्यताओं को वापस करने के बराबर नहीं है 1