Tamam. Hadi başlayalım. Öncelikle uygulamanızı Hata Ayıklama modunda yayınladığınızdan emin olun! Görüntülerimi oluşturmak için yeni bir Docker özelliği çok aşamalı derleme kullanmayı tercih ediyorum, böylece Dockerfile'daki bir oluşturma aşamasının sonunda böyle bir şey yazarım:
RUN dotnet publish -c Debug -o ./results
Minikube'ye görüntü aktarmak için burada anlatıldığı gibi yerel konteyner kayıt defterini kullanıyorum. Ama bunu genellikle yaptığınız gibi yapabilirsiniz. Konteynerinizi çalıştırıp çalıştırdığınızda, onu hacklemeye başlayabiliriz. Bu amaçla Powershell'i kullanacağım, ancak aynı şey başka bir terminal dilinde kolayca yeniden yazılabilir. Öğreticiyi adım adım takip edebilir ve gerektiğinde yankı komutuyla var'ın değerlerini kontrol ederek terminalinizdeki komutları birer birer uygulayabilirsiniz. * .Yml dosyanızda şöyle bir seçicinin tanımlanması gerekir:
selector:
matchLabels:
app: mywebapp
Yakalayın ve Powershell terminalinizde bir $ Selector var tanımlamak için kullanın:
$Selector = 'app=mywebapp'
Kapsayıcı uygulamanızın seçici tarafından çalıştığı bir kapsül bulmanız gerekir:
$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';
Bölmede yalnızca bir kapsayıcı bulunduğunu varsayarsak, o kapsayıcıda komutları yürütebilirsiniz. Varsayılan olarak kapsayıcıda vsdbg yüklü değildir, bu yüzden devam edin ve yükleyin:
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;
Ardından, kapsayıcı içinde uygulamanızın PID'sini bulmanız gerekir:
$prid = kubectl exec $pod -i -- pidof -s dotnet;
Normalde 1'e eşittir, ancak daha az varsayım yapmak daha iyidir. Bu kadar. Şimdi bir hata ayıklayıcı başlatabilirsiniz:
kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;
Pencereyi kapatmadan önce aşağıdaki komutları çalıştırmayı unutmayın, aksi takdirde uygulamanız sonsuza kadar sıkışacaktır:
-target-detach
-gdb-exit
Her şeyi bir araya getirelim, yeniden kullanılabilir bir komut dosyası oluşturalım ve tüm ASP.NET Core projelerinizle kullanabileceğiniz için köklerin yakınında bir yere kaydedelim:
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;
Artık terminal komut dosyası klasöründen çalışırken bu komut dosyasını şu şekilde yürütebilirsiniz:
powershell -ExecutionPolicy Bypass -File kubedbg.ps1 -Selector app=mywebapp
Ancak Visual Studio'dan hata ayıklamamız gerekmiyor mu? Evet! Daha ileri gidip terminal sürecimizi Visual Studio MIEngine'den başlatalım. Projenizi Visual Studio'da açın. Aşağıdaki içeriğe sahip yeni bir XML dosyası ekleyin ve kubedbg.xml olarak adlandırın:
<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>
Gelen -File
parametresi biz önce oluşturulan komut dosyanın mutlak yolunu belirtmeniz gerekir. Sonra Ctrl + Alt + A tuşlarına basarak Komut Penceresini açın ve aşağıdaki komutu çalıştırın:
Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Bu komut, Visual Studio içindeki tüm hata ayıklama işlemini beklediğiniz tüm standart avantajlarla başlatır. Ancak hata ayıklamayı, Hata Ayıklama menüsünden Tümünü Ayır'a basmaktan başka bir şekilde durdurmayın! Bu komut her zaman yazmak için çok uygun olmasa da. Neyse ki Visual Studio'da, parametrelerle komutlar için diğer adlar belirtebilirsiniz. Sonunda, kubedbg.xml
her proje için yeni bir dosyaya ihtiyacınız olacak . Bunu göz önünde bulundurarak devam edin ve Komut Penceresine aşağıdaki komutu yazarak ilk takma adınızı oluşturun:
alias kubedbg.mywebapp Debug.MIDebugLaunch /Executable:dotnet
/OptionsFile:absolute_path_to_kubedbg.xml
Bundan sonra, sadece Komut Penceresinde kubedbg.mywebapp komutunu çalıştırarak hata ayıklamaya başlayabilirsiniz. Daha da iyisi, Bul araç çubuğu Açılan Kutusundan aynı komutu ancak önekiyle çalıştırabilirsiniz: >kubedbg.mywebapp.
Bu bir metin tamamlama olduğundan da zor değil. Komut diğer adları hakkında daha fazla bilgiyi buradan edinebilirsiniz. Mutlu hata ayıklama! Not: Bonus olarak kesinlikle aynı şekilde, genel bulutta çalışırken bile uygulamanızda hata ayıklayabilirsiniz. Kubectl genel buluttaki bir kümeye atandığında, aynı komut dosyasıyla çalışır ve gerçek küme işlem kimliği içinde eşit olmadığı için daha az varsayım yapar. 1