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

儀隴網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),儀隴網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為儀隴超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的儀隴做網(wǎng)站的公司定做!
終止消息為容器提供了一種方法,可以將有關(guān)致命事件的信息寫入某個(gè)位置, 在該位置可以通過儀表板和監(jiān)控軟件等工具輕松檢索和顯示致命事件。 在大多數(shù)情況下,你放入終止消息中的信息也應(yīng)該寫入 常規(guī) Kubernetes 日志。
在開始之前
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
要檢查版本,請(qǐng)輸入 ?kubectl version?。
讀寫終止消息
在本練習(xí)中,你將創(chuàng)建運(yùn)行一個(gè)容器的 Pod。 配置文件指定在容器啟動(dòng)時(shí)要運(yùn)行的命令。
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 的詳細(xì)信息:
- 使用 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 不再運(yùn)行。
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}}"
如果你正在運(yùn)行多容器 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?。 通過定制這個(gè)字段,你可以告訴 Kubernetes 使用不同的文件。 Kubernetes 使用指定文件中的內(nèi)容在成功和失敗時(shí)填充容器的狀態(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 ?字段,以便進(jìn)一步自定義。 此字段默認(rèn)為 "?File?",這意味著僅從終止消息文件中檢索終止消息。 通過將 ?terminationMessagePolicy ?設(shè)置為 "?FallbackToLogsOnError?",你就可以告訴 Kubernetes,在容器因錯(cuò)誤退出時(shí),如果終止消息文件為空,則使用容器日志輸出的最后一塊作為終止消息。 日志輸出限制為 2048 字節(jié)或 80 行,以較小者為準(zhǔn)。
網(wǎng)站題目:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes確定Pod失敗的原因
瀏覽地址:http://www.5511xx.com/article/djooccp.html


咨詢
建站咨詢
