Baik. Mari kita memulainya. Pertama-tama pastikan Anda telah menerbitkan aplikasi Anda dalam mode Debug! Saya lebih suka menggunakan fitur Docker multi-tahap build baru untuk membangun gambar saya jadi saya akan menulis sesuatu seperti ini di akhir tahap build di Dockerfile:
RUN dotnet publish -c Debug -o ./results
Untuk mendorong gambar ke Minikube saya menggunakan registry kontainer lokal seperti yang dijelaskan di sini. Tetapi Anda dapat melakukannya seperti biasanya. Ketika wadah Anda sudah siap dan berjalan, kami dapat mulai meretasnya. Saya akan menggunakan Powershell untuk tujuan itu tetapi hal yang sama dapat dengan mudah ditulis ulang dalam bahasa terminal lainnya. Anda dapat mengikuti tutorial langkah demi langkah dan menjalankan perintah di terminal Anda satu per satu memeriksa nilai var dengan perintah gema bila perlu. Dalam file * .yml Anda, Anda harus meminta pemilih memilih sesuatu seperti ini:
selector:
matchLabels:
app: mywebapp
Raih dan gunakan untuk mendefinisikan $ Selector var di terminal Powershell Anda:
$Selector = 'app=mywebapp'
Anda perlu menemukan pod tempat aplikasi kemas Anda dijalankan oleh pemilihnya:
$pod = kubectl get pods --selector=$Selector -o jsonpath='{.items[0].metadata.name}';
Dengan asumsi bahwa Anda hanya memiliki satu wadah di pod sekarang Anda dapat menjalankan perintah pada wadah itu. Secara default container tidak memiliki vsdbg, jadi silakan dan instal:
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;
Selanjutnya, Anda perlu menemukan PID aplikasi Anda di dalam wadah:
$prid = kubectl exec $pod -i -- pidof -s dotnet;
Biasanya itu sama dengan 1 tetapi lebih baik membuat asumsi lebih sedikit. Itu dia. Sekarang Anda dapat memulai debugger:
kubectl exec $pod -i -- /vsdbg/vsdbg --interpreter=mi --attach $prid;
Jangan lupa untuk menjalankan perintah berikut sebelum Anda menutup jendela, jika tidak aplikasi Anda akan macet selamanya:
-target-detach
-gdb-exit
Mari kita menggabungkan semuanya, membuat skrip yang dapat digunakan kembali dan menyimpannya di dekat akar karena Anda dapat menggunakannya dengan semua proyek Core ASP.NET Anda:
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;
Sekarang Anda dapat menjalankan skrip ini seperti ini ketika terminal dijalankan dari folder skrip:
powershell -ExecutionPolicy Bypass -File kubedbg.ps1 -Selector app=mywebapp
Tapi bukankah kita seharusnya debugging dari Visual Studio? Iya! Mari kita melangkah lebih jauh dan meluncurkan proses terminal kami dari Visual Studio MIEngine. Buka proyek Anda di Visual Studio. Tambahkan file XML baru dengan konten berikut dan beri nama 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>
Pada -File
parameter Anda perlu menentukan path absolut ke file skrip yang kami buat sebelumnya. Kemudian tekan Ctrl + Alt + A untuk membuka Command Window dan jalankan perintah berikut:
Debug.MIDebugLaunch /Executable:dotnet /OptionsFile:absolute_path_to_kubedbg_xml
Perintah ini akan memulai proses debugging di dalam Visual Studio dengan semua manfaat standar yang Anda harapkan. Tetapi jangan berhenti men-debug dengan cara lain selain dengan menekan Lepaskan Semua dari menu Debug! Meskipun perintah ini sangat tidak nyaman untuk menulis sepanjang waktu. Untungnya di Visual Studio, Anda dapat menentukan alias untuk perintah dengan parameter. Akhirnya, Anda akan memerlukan kubedbg.xml
file baru untuk setiap proyek. Dengan pemikiran ini, lanjutkan dan buat alias pertama Anda dengan mengetik perintah berikut di Command Window:
alias kubedbg.mywebapp Debug.MIDebugLaunch /Executable:dotnet
/OptionsFile:absolute_path_to_kubedbg.xml
Setelah itu, Anda dapat mulai men-debug hanya dengan mengeksekusi kubedbg.mywebapp di Command Window. Bahkan lebih baik, Anda dapat menjalankan perintah yang sama dari Combobox Temukan toolbar tetapi dengan awalan: >kubedbg.mywebapp.
Itu tidak sulit karena ada penyelesaian teks juga. Anda dapat membaca lebih lanjut tentang alias alias perintah di sini. Selamat men-debug! PS: Sebagai bonus, sama persis dengan cara Anda dapat men-debug aplikasi Anda bahkan ketika berjalan di dalam cloud publik. Ketika kubectl ditugaskan ke sebuah cluster di cloud publik, ia hanya bekerja dengan skrip yang sama dan membuat lebih sedikit asumsi dibayar kembali karena di dalam proses ID nyata cluster tidak sama dengan 1