新聞中心
調(diào)試 Pod
調(diào)試 Pod 的第一步是查看 Pod 信息。用如下命令查看 Pod 的當前狀態(tài)和最近的事件:

10年的秭歸網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網(wǎng)站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整秭歸建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“秭歸網(wǎng)站設計”,“秭歸網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
kubectl describe pods ${POD_NAME}
查看一下 Pod 中的容器所處的狀態(tài)。這些容器的狀態(tài)都是 ?Running ?嗎?最近有沒有重啟過?
后面的調(diào)試都是要依靠 Pod 的狀態(tài)的。
Pod 停滯在 Pending 狀態(tài)
如果一個 Pod 停滯在 ?Pending ?狀態(tài),表示 Pod 沒有被調(diào)度到節(jié)點上。通常這是因為 某種類型的資源不足導致無法調(diào)度。 查看上面的 ?kubectl describe ...? 命令的輸出,其中應該顯示了為什么沒被調(diào)度的原因。 常見原因如下:
- 資源不足: 你可能耗盡了集群上所有的 CPU 或內(nèi)存。此時,你需要刪除 Pod、調(diào)整資源請求或者為集群添加節(jié)點。
- 使用了 ?
hostPort?: 如果綁定 Pod 到 ?hostPort?,那么能夠運行該 Pod 的節(jié)點就有限了。 多數(shù)情況下,?hostPort?是非必要的,而應該采用 Service 對象來暴露 Pod。 如果確實需要使用 ?hostPort?,那么集群中節(jié)點的個數(shù)就是所能創(chuàng)建的 Pod 的數(shù)量上限。
Pod 停滯在 Waiting 狀態(tài)
如果 Pod 停滯在 ?Waiting ?狀態(tài),則表示 Pod 已經(jīng)被調(diào)度到某工作節(jié)點,但是無法在該節(jié)點上運行。 同樣,?kubectl describe ...? 命令的輸出可能很有用。 ?Waiting ?狀態(tài)的最常見原因是拉取鏡像失敗。要檢查的有三個方面:
- 確保鏡像名字拼寫正確
- 確保鏡像已被推送到鏡像倉庫
- 嘗試手動是否能拉取鏡像。例如,如果你在你的 PC 上使用 Docker,請運行 ?
docker pull <鏡像>?。
Pod 處于 Crashing 或別的不健康狀態(tài)
一旦 Pod 被調(diào)度,就可以采用 調(diào)試運行中的 Pod 中的方法來進一步調(diào)試。
Pod 處于 Running 態(tài)但是沒有正常工作
如果 Pod 行為不符合預期,很可能 Pod 描述(例如你本地機器上的 ?mypod.yaml?)中有問題, 并且該錯誤在創(chuàng)建 Pod 時被忽略掉,沒有報錯。 通常,Pod 的定義中節(jié)區(qū)嵌套關系錯誤、字段名字拼錯的情況都會引起對應內(nèi)容被忽略掉。 例如,如果你誤將 ?command ?寫成 ?commnd?,Pod 雖然可以創(chuàng)建,但它不會執(zhí)行 你期望它執(zhí)行的命令行。
可以做的第一件事是刪除你的 Pod,并嘗試帶有 ?--validate? 選項重新創(chuàng)建。 例如,運行 ?kubectl apply --validate -f mypod.yaml?。 如果 ?command ?被誤拼成 ?commnd?,你將會看到下面的錯誤信息:
I0805 10:43:25.129850 46757 schema.go:126] unknown field: commnd
I0805 10:43:25.129973 46757 schema.go:129] this may be a false alarm, see https://github.com/Kubernetes/kubernetes/issues/6842
pods/mypod接下來就要檢查的是 API 服務器上的 Pod 與你所期望創(chuàng)建的是否匹配 (例如,你原本使用本機上的一個 YAML 文件來創(chuàng)建 Pod)。 例如,運行 ?kubectl get pods/mypod -o yaml > mypod-on-apiserver.yaml?,之后 手動比較 ?mypod.yaml? 與從 API 服務器取回的 Pod 描述。 從 API 服務器處獲得的 YAML 通常包含一些創(chuàng)建 Pod 所用的 YAML 中不存在的行,這是正常的。 不過,如果如果源文件中有些行在 API 服務器版本中不存在,則意味著 Pod 規(guī)約是有問題的。
調(diào)試副本控制器
副本控制器相對比較簡單直接。它們要么能創(chuàng)建 Pod,要么不能。 如果不能創(chuàng)建 Pod,請參閱上述說明調(diào)試 Pod。
你也可以使用 ?kubectl describe rc ${CONTROLLER_NAME}? 命令來檢視副本控制器相關的事件。
調(diào)試 Service
服務支持在多個 Pod 間負載均衡。 有一些常見的問題可以造成服務無法正常工作。 以下說明將有助于調(diào)試服務的問題。
首先,驗證服務是否有端點。對于每一個 Service 對象,API 服務器為其提供 對應的 ?endpoints ?資源。
通過如下命令可以查看 endpoints 資源:
kubectl get endpoints ${SERVICE_NAME}
確保 Endpoints 與服務成員 Pod 個數(shù)一致。 例如,如果你的 Service 用來運行 3 個副本的 nginx 容器,你應該會在 Service 的 Endpoints 中看到 3 個不同的 IP 地址。
服務缺少 Endpoints
如果沒有 Endpoints,請嘗試使用 Service 所使用的標簽列出 Pod。 假定你的服務包含如下標簽選擇算符:
...
spec:
- selector:
name: nginx
type: frontend你可以使用如下命令列出與選擇算符相匹配的 Pod,并驗證這些 Pod 是否歸屬于創(chuàng)建的服務:
kubectl get pods --selector=name=nginx,type=frontend
驗證 Pod 的 ?containerPort ?與服務的 ?targetPort ?是否匹配。
新聞標題:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes調(diào)試Pod
本文鏈接:http://www.dlmjj.cn/article/cddcpej.html


咨詢
建站咨詢
