国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何對Pod容器進行Remote Debug

云計算 云原生
先不談通過看log來debug的效率問題,在 VM 上這樣搞尚且可行,可當我們把應用容器化并讓K8s管理后,怎么辦呢?

大家好,我是二哥。

在一個面試場景中,就debug問題,一般會出現下面的對話:

二哥:你平時開發的時候是用什么方法debug ?

應聘者:看日志。

二哥:萬一log level沒設對或者關鍵的地方沒有加log怎么辦呢?

應聘者:那就改代碼,加log,重啟服務,然后繼續看日志。

先不談通過看log來debug的效率問題,在 VM 上這樣搞尚且可行,可當我們把應用容器化并讓K8s管理后,怎么辦呢?

我們都知道在Pod里是沒法方便地通過執行類似 systemctl和 monit等命令來重啟應用的,那繼續用看日志的方式的話,就剩下一條路了:

  1. 改代碼,加log。
  2. commit到git。
  3. CI/CD。
  4. 如果log沒有加對,或者想看一下某一個函數調用的返回值,那從步驟1開始重頭再來。

um, 看上去挺累的樣子。CI/CD和K8s也被折騰得夠嗆。

二哥稍微有點強迫癥,不能忍受這么折磨人的debug方式。另外,相比人肉看Log,通過調試器的方式來debug更優雅、更快捷,也更能激發RD的想象力。最重要的是,通過調試器debug會倒逼RD從代碼調用邏輯、和OS交互等多角度思考問題。比如會設斷點不難,難的是何時設斷點,把斷點設在哪里最合適。

“道—法—術—器—勢”,是老子《道德經》的精髓思想。本文講的其實是“術”和“器”,但二哥想說“道”更本質,也更重要,它是核心思想、理念、本質規律。強烈建議好奇心重的同學多思考一下這些“術”背后的實現原理。

二哥通過一個示例給老鐵們演示一下,如何從本地機器遠程調試Pod里面的應用。應用本身非常簡單,是用Node.js寫的一段http server。對于其它語言寫的應用,你肯定能找到變通方法。

進入debug模式

首先得把http server切換到調試模式。注意這里demo的方法僅適用于Node.js。

kubectl exec nodejs-8448d4cbc6-nbjwd -n lancehbzhang -- /bin/bash -c "kill -USR1 1"

一切順利的話,你可以從Pod的log里面看到如下所示的信息。這表示debugger偵聽在端口9229。

圖 1:將容器切換進入debug模式

K8s port-forward

下面的問題是:如何才能把本地debugger發出的調試命令連進來?

方法其實有不少。比如通過一個Load Balancer類型的service。不過這種方法比較費錢,據我所知,騰訊云的Load Balancer價格不菲。

這里二哥介紹一個既免費又通用的方法。用K8s自帶的port-forward功能,命令如下所示:

$ kubectl port-forward deploy/nodejs -n lancehbzhang 9229:9229

在一臺可以執行kubectl命令的機器上執行這行命令后,如果一切正常,你會看到下面的界面。

圖 2:使用K8s port-forward

恭喜你,這表示從此以后任何發往這臺機器 9229 端口的請求都將會 forward 到 pod nodejs 的 9229 端口,如你所猜,那正是 debugger 正在偵聽的端口。

到現在為止,下圖中的 ③ 和 ④ 你應該都準備好了。

圖 3:從本機debugger到遠程debuggee全景圖

你是不是摩拳擦掌,擼起袖子準備從本地機器連過來了?且慢,有一種場景我們還沒解決。

如果執行 kubectl port-forward 的機器和我們的本地機器無法直連怎么辦?假如出于安全考慮,上圖中 ③ 和 ④ 是可以網絡直連的,但 ① 和 ③ 被防火墻隔開了,只留了一個22端口供 ① 通過 ssh 登錄到 ③ 。這種情況下,該如何從本機連接到 ④ 上的debugger呢?

這個時候就需要輪到步驟 ② 所示的 SSH Tunnel 登場了。通過這樣的方式, 本機VS code只需 attach 到 127.0.0.1:9229,諸如設置斷點、單步執行、查看變量等調試命令都被封裝起來,塞進 SSH Tunnel 再送至 ③ 上,然后再通過 port-forwarding 轉至 ④ 上的debuggee。

注:SSH Tunnel的使用并非本文的重點,大家可以自行谷歌找到使用方法。

演示

好了,準備工作做完了。下面開始二哥的表演。

本地機器打開VS Code,在launch.json里面輸入如下所示的配置。其中參數 port表示本機debugger需要連接的端口,localRoot表示本地的代碼路徑,而remoteRoot則表示 ④ 中應用所在的路徑。二哥在build Docker image時,將應用的WORKDIR設置為了/myapp,所以這里也得填成/myapp。其它參數各位自行谷歌。

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Attach-2-nodejs",
"port": 9229,
"request": "attach",
"skipFiles": ["<node_internals>/**"],
"type": "pwa-node",
"localRoot": "${workspaceFolder}",
"remoteRoot": "/myapp",
"sourceMaps": true
}
]
}

在第17行設置斷點,按下F5開始debugging。

圖 4:本機debugger

還記得前文我們已經打開的 SSH Tunnel 界面嗎?這個時候,你會看到它會打印出一些諸如 "Successfully established connection 127.0.0.1:9229 -> 127.0.0.1:9229" 這樣的信息。當然,具體信息內容與你使用的工具相關。

圖 5:SSH Tunnel正在工作示意圖

沒有問題的話,網絡包應該來到了圖3中位置 ③ 。我們來看看這個時候 K8s port-forward 會打印出什么來:

圖 6:K8s port-forward正在工作示意圖

非常不錯,看起來它收到了請求,并且也在勤奮地工作著。那最后我們來看看圖3中 ④ 中打印出來的令人激動的信息:"Debugger attached"。

圖 7:debuggee顯示已有debugger attach上來了

萬事俱備,只差最后一腳了:發個請求,看看能不能命中斷點:

圖 8:發個請求,命中一下斷點

回頭看看圖4吧,多么讓人陶醉的界面,在那里你可以查看變量、棧回溯,還可以干很多很多其它騷操作。是的,這個時候才是發揮你想象力的時候。

其它需要做的工作

到目前為止,本文略過一些雖不是重點,但有的時候又可能會影響調試體驗的細枝末節,我列舉一二。

將Pod的replica設置為 1。不然你就得發了瘋地尋找debugger發出的調試命令發到哪里去了呢?

還記得K8s的livenessProbe和readinessProbe嗎?如果容器內應用因為被調試而長時間未響應這兩個probe,那么Pod有可能會被K8s殺掉。這個時候,或許你費勁千辛萬苦才等來的斷點命中瞬間化為烏有了。

網上有不少解決方法,比如通過 kubectl patch deploy/nodejs 安裝dummy的livenessProbe和readinessProbe。

這個dummy probe不需要真的去probe container是否活著,相反它永遠返回 true。比如下面這種方法用 kubectl patch 命令修改了 deployment 的spec。

# 移除 livenessProbe
$ kubectl patch deploy/nodejs -n lancehbzhang --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
# 安裝 dummy livenessProbe
$ kubectl patch deploy/nodejs -n lancehbzhang -p '{"spec": {"template": {"spec": {"containers": [{"name": "nodejs", "livenessProbe": {"initialDelaySeconds": 5, "periodSeconds": 5, "exec": {"command": ["true"]}}}]}}}}'

總結

首先需要將容器內的應用切換到debug模式。具體如何操作與所使用的語言密切相關。

  • 通過K8s port-forward可以將debugger發出的調試命令轉發至被調試應用(debuggee)。
  • 如果運行于你本機的debugger無法和運行著K8s port-forward的那臺機器直接通信,那么這個時候就需要把debugger的調試命令丟進SSH Tunnel送至對端。
  • 一切準備就緒后,本機debugger就可以attach到debuggee了。
責任編輯:姜華 來源: 二哥聊云原生
相關推薦

2022-05-26 07:33:48

Pod容器debug

2022-09-07 09:19:49

Docker健康檢查

2021-03-05 00:06:12

Docker容器內存

2022-07-05 08:25:10

Reactyarn link

2020-05-20 12:30:44

容器Linux系統

2011-01-20 10:33:30

Postfix

2023-01-30 08:30:09

Tomcat性能優化

2015-07-28 11:10:22

Docker容器容器編排

2019-11-20 09:15:53

KubernetesPod

2010-05-11 08:58:22

mysql表字段

2010-01-20 17:48:07

C++ 函數重載

2021-09-02 22:52:16

ValueDictionary排序

2021-09-27 16:39:10

PythonGif壓縮

2010-02-02 14:11:14

Python 進行編程

2020-12-22 21:57:39

人臉識別AI人工智能

2013-05-24 09:25:27

2014-05-14 00:50:18

JoyentNode

2011-04-13 08:49:33

DataSet強類型化

2021-05-06 09:33:32

OperatorKubernetes開源

2010-05-25 10:11:06

ubuntu Grub
點贊
收藏

51CTO技術棧公眾號

蜜臀av在线播放| 91成人观看| 久久久久一区二区三区四区| 精品一区在线播放| 日韩欧美中文字幕电影| 日韩免费一区二区| 黄色小视频在线观看| 亚洲精品成人悠悠色影视| 久草资源站在线观看| 久久国产精品色| fc2ppv国产精品久久| 国产精品911| 国产精品永久免费在线| 国产视频福利在线| 国产九色精品成人porny | 亚洲欧美经典视频| 这里只有精品在线播放| 伊人福利在线| 亚洲一区二区动漫| 亚洲高清一区二| 丁香婷婷综合激情| 麻豆网站在线看| 激情深爱一区二区| 久久天天躁日日躁| 国产美女网站在线观看| 91最新在线视频| 国产成人免费视频精品含羞草妖精| 在线91免费看| 韩国三级电影久久久久久| 97在线观看| 亚洲aa在线| 亚洲.国产.中文慕字在线| 中日韩视频在线观看| 欧美a级网站| 日韩视频免费观看高清完整版在线观看| 国产白丝袜美女久久久久| 亚洲v天堂v手机在线| 日韩电视剧免费观看网站| www.1024| 亚洲人成网址| 国产欧美日韩一区二区三区在线观看| 欧美情侣性视频| sm在线观看| 午夜激情一区二区| 日韩wuma| 美女网站色91| 色之综合天天综合色天天棕色| 菠萝蜜视频国产在线播放| 国产精品成人在线观看| 久久99精品久久久久久久久久| www.成人在线视频| 久久久久久久一区二区| 制服国产精品| 伊人成综合网yiren22| 免费精品视频在线| 国产综合动作在线观看| 91精品一区| 自拍偷拍亚洲激情| 日韩不卡一二三| 男男视频亚洲欧美| 精品亚洲欧美日韩| 国产传媒欧美日韩成人精品大片| 免费av不卡在线观看| 亚洲成a人片综合在线| 一本免费视频| 日韩欧美中文字幕一区| 日本网站在线免费观看视频| 免费高清视频在线一区| 国产尤物精品| 肥熟一91porny丨九色丨| 偷拍视屏一区| 亚洲午夜久久久久| 精品剧情v国产在线观看| 日韩美女视频在线| 国产小视频免费在线网址| 亚洲在线视频网站| 91美女精品福利| 日韩精品一区在线视频| 午夜a成v人精品| 亚洲电影有码| 久久婷婷久久| 国产一区 在线播放| 日韩国产一二三区| 18禁网站免费无遮挡无码中文| 少妇人妻无码专区视频| 一区二区三区中文字幕精品精品| 污视频网站在线免费| 蜜臀久久99精品久久久无需会员 | 啪一啪鲁一鲁2019在线视频| 亚洲国产精品综合久久久| 无码人妻aⅴ一区二区三区日本| 亚洲国产成人高清精品| 欧美日韩免费电影| 麻豆av一区二区| 亚洲一区二区精品3399| 亚洲综合视频| 日本福利视频导航| 久久精品综合网| 日韩福利电影在线| 免费xxxxx网站中文字幕| 亚洲精品资源在线| 欧美精品尤物在线观看| 国产一级爱c视频| 日韩精品一区二区三区swag| 国产精品88久久久久久| 日韩欧美在线免费观看视频| 在线电影国产精品| 日韩欧美高清在线播放| 一区二区成人网| 中文字幕欧美视频在线| 日韩一区精品视频| www.在线视频.com| 日韩免费在线视频| 日本一区二区免费在线观看视频 | 狠狠色丁香九九婷婷综合五月| 久久综合色影院| 自拍偷自拍亚洲精品播放| а√天堂中文在线资源8| 国产精品一区二区欧美黑人喷潮水| 国产三级精品在线| 精品国产乱子伦一区二区| 神马一区二区影院| 欧美日韩成人| 中文字幕中文字幕在线中文字幕三区 | 欧美色图另类小说| 国产亚洲第一区| 色偷偷91综合久久噜噜| 香蕉成人啪国产精品视频综合网| 日韩电影免费在线| 久久国产成人精品| 18成人免费观看网站下载| 一区在线观看免费| 嗯用力啊快一点好舒服小柔久久| 日韩av播放器| 992tv在线成人免费观看| 国产精品国产成人国产三级 | 好色先生视频污| 亚洲美女性生活视频| 国产麻豆精品95视频| 欧美极品影院| 久久久999视频| 91精品国产91久久久久久不卡| 亚洲欧美日韩人成在线播放| 欧美欧美黄在线二区| 四虎精品在线| 免费成人在线观看av| 欧美精品一区二区三| 成人av网站大全| 欧美性生活一级片| 三级视频在线播放| 日韩少妇中文字幕| 在线精品91av| 亚洲欧美二区三区| 激情文学一区| 欧美性猛交xxx高清大费中文| 国产天堂在线播放| 国产精品尤物福利片在线观看| 欧美日韩在线播放一区| 精品在线免费视频| 风间由美中文字幕在线看视频国产欧美 | 伊人色**天天综合婷婷| 九义人在线观看完整免费版电视剧| 日韩久久久久久久久久久久久| 伊人伊人伊人久久| 国产精品久久久久aaaa樱花| 婷婷亚洲最大| 丰满的护士2在线观看高清| 欧美日韩在线中文| 国产精品美女在线| 精品福利在线导航| 欧美经典一区二区三区| 一区二区蜜桃| 亚洲精品久久久久久一区二区| 中文字幕日韩视频| 一区二区三区四区不卡视频| 免费在线亚洲| 亚洲日本va午夜在线电影| 中午字幕在线观看| 天天爱天天做天天操| 欧美最近摘花xxxx摘花| 日韩欧美一区二区不卡| 国产女人18毛片水真多成人如厕 | 99re6热在线精品视频播放速度| 337p日本欧洲亚洲大胆精品| 成人免费视频在线观看| 久久久久99| 色综合综合色| 欧美三区四区| 日韩一区二区影院| 色94色欧美sute亚洲线路二 | av一区观看| 欧美不卡一区二区| 国产精品福利影院| 久久亚洲视频| 国产一区二区电影在线观看| av在线不卡免费| 天堂影视av| 国产毛片视频网站| 精品亚洲欧美日韩| 国产99久久精品一区二区 夜夜躁日日躁|