新聞中心
確定 Pod 失敗的原因
本文介紹如何編寫和讀取容器的終止消息。

儀隴網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),儀隴網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為儀隴超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的儀隴做網(wǎng)站的公司定做!
終止消息為容器提供了一種方法,可以將有關(guān)致命事件的信息寫入某個位置, 在該位置可以通過儀表板和監(jiān)控軟件等工具輕松檢索和顯示致命事件。 在大多數(shù)情況下,你放入終止消息中的信息也應(yīng)該寫入 常規(guī) Kubernetes 日志。
在開始之前
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
要檢查版本,請輸入 ?kubectl version?。
讀寫終止消息
在本練習(xí)中,你將創(chuàng)建運行一個容器的 Pod。 配置文件指定在容器啟動時要運行的命令。
apiVersion: v1
kind: Pod
metadata:
name: termination-demo
spec:
containers:
- name: termination-demo-container
image: debian
command: ["/bin/sh"]
args: ["-c", "sleep 10 && echo Sleep expired > /dev/termination-log"]
- 基于 YAML 配置文件創(chuàng)建 Pod:
- 顯示 Pod 的信息:
- 顯示 Pod 的詳細信息:
- 使用 Go 模板過濾輸出結(jié)果,使其只含有終止消息:
kubectl apply -f https://K8S.io/examples/debug/termination.yaml
YAML 文件中,在 ?command ?和 ?args ?字段,你可以看到容器休眠 10 秒然后將 "Sleep expired" 寫入 ?/dev/termination-log? 文件。 容器寫完 "Sleep expired" 消息后就終止了。
kubectl get pod termination-demo
重復(fù)前面的命令直到 Pod 不再運行。
kubectl get pod termination-demo --output=yaml
輸出結(jié)果包含 "Sleep expired" 消息:
apiVersion: v1
kind: Pod
...
lastState:
terminated:
containerID: ...
exitCode: 0
finishedAt: ...
message: |
Sleep expired
...
kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"
如果你正在運行多容器 Pod,則可以使用 Go 模板來包含容器的名稱。這樣,你可以發(fā)現(xiàn)哪些容器出現(xiàn)故障:
kubectl get pod multi-container-pod -o go-template='{{range .status.containerStatuses}}{{printf "%s:\n%s\n\n" .name .lastState.terminated.message}}{{end}}'
定制終止消息
Kubernetes 從容器的 ?terminationMessagePath ?字段中指定的終止消息文件中檢索終止消息, 默認(rèn)值為 ?/dev/termination-log?。 通過定制這個字段,你可以告訴 Kubernetes 使用不同的文件。 Kubernetes 使用指定文件中的內(nèi)容在成功和失敗時填充容器的狀態(tài)消息。
在下例中,容器將終止消息寫入 ?/tmp/my-log? 給 Kubernetes 來接收:
apiVersion: v1
kind: Pod
metadata:
name: msg-path-demo
spec:
containers:
- name: msg-path-demo-container
image: debian
terminationMessagePath: "/tmp/my-log"此外,用戶可以設(shè)置容器的 ?terminationMessagePolicy ?字段,以便進一步自定義。 此字段默認(rèn)為 "?File?",這意味著僅從終止消息文件中檢索終止消息。 通過將 ?terminationMessagePolicy ?設(shè)置為 "?FallbackToLogsOnError?",你就可以告訴 Kubernetes,在容器因錯誤退出時,如果終止消息文件為空,則使用容器日志輸出的最后一塊作為終止消息。 日志輸出限制為 2048 字節(jié)或 80 行,以較小者為準(zhǔn)。
當(dāng)前文章:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes確定Pod失敗的原因
標(biāo)題網(wǎng)址:http://fisionsoft.com.cn/article/djooccp.html


咨詢
建站咨詢
