如何 curl 測試容器
1
| kubectl -n monitoring run ne-test --rm -i --restart=Never --image=curlimages/curl:8.10.1 -- curl -s http://node-exporter:9100/metrics 2>&1 | grep -E "^node_(memory_MemAvailable|cpu_seconds_total|filesystem_avail)" | head -5
|
這是一個非常典型的 Kubernetes 臨時除錯指令。它利用一個暫時性的容器來測試叢集內部的網路連通性,並獲取 Prometheus 格式的監控數據。
我們可以將指令拆解成三個部分來理解:
1.啟動測試容器 (The Runner)
1
| kubectl -n monitoring run ne-test --rm -i --restart=Never --image=curlimages/curl:8.10.1
|
-n monitoring: 在指定的 monitoring 命名空間下執行。
run ne-test: 建立一個名為 ne-test 的臨時 Pod。
--rm: 執行結束後,自動刪除這個 Pod(不留垃圾)。
-i: 以互動模式執行(Interactive)。
--restart=Never: 設定 Pod 結束後不要重啟。
--image=curlimages/curl:8.10.1: 使用包含 curl 工具的輕量級映像檔。
2.發送請求 (The Request)
1
| -- curl -s http://node-exporter:9100/metrics
|
- 這是在新建立的 Pod 內部執行的命令。
- 它嘗試透過 HTTP 存取同一命名空間下的 node-exporter 服務,連接埠為 9100,並讀取 /metrics 路徑(這是 Prometheus 監控數據的標準接口)。
3.過濾與截取 (The Processing)
1
| 2>&1 | grep -E "^node_(memory_MemAvailable|cpu_seconds_total|filesystem_avail)" | head -5
|
2>&1: 將錯誤訊息(stderr)與標準輸出(stdout)合併,確保如果連線失敗,錯誤也能被顯示出來。
grep -E "...": 使用正規表示式篩選出特定的監控指標,只保留:
node_memory_MemAvailable(可用記憶體)
node_cpu_seconds_total(CPU 使用時間)
node_filesystem_avail(磁碟剩餘空間)
head -5: 只顯示篩選結果的前 5 行(因為這些監控指標通常非常多,全部列出會洗版)。
4. 也可以進去容器再測試
1
| kubectl -n monitoring run ne-test --rm -i --tty --restart=Never --image=curlimages/curl:8.10.1 -- /bin/sh
|
--tty (或 -t): 分配一個終端機,這是進入互動模式的關鍵。
/bin/sh: 強制執行 Shell,而不是執行 curl 指令。