臨時容器
特性狀態(tài): Kubernetes v1.25 [stable]
本頁面概述了臨時容器:一種特殊的容器,該容器在現(xiàn)有 Pod 中臨時運行,以便完成用戶發(fā)起的操作,例如故障排查。 你會使用臨時容器來檢查服務,而不是用它來構(gòu)建應用程序
了解臨時容器
Pod 是 Kubernetes 應用程序的基本構(gòu)建塊。 由于 Pod 是一次性且可替換的,因此一旦 Pod 創(chuàng)建,就無法將容器加入到 Pod 中。 取而代之的是,通常使用 Deployment 以受控的方式來刪除并替換 Pod
有時有必要檢查現(xiàn)有 Pod 的狀態(tài)。例如,對于難以復現(xiàn)的故障進行排查。 在這些場景中,可以在現(xiàn)有 Pod 中運行臨時容器來檢查其狀態(tài)并運行任意命令
什么是臨時容器
臨時容器與其他容器的不同之處在于,它們?nèi)鄙賹Y源或執(zhí)行的保證,并且永遠不會自動重啟, 因此不適用于構(gòu)建應用程序。 臨時容器使用與常規(guī)容器相同的 ContainerSpec 節(jié)來描述,但許多字段是不兼容和不允許的
- 臨時容器沒有端口配置,因此像 ports、livenessProbe、readinessProbe 這樣的字段是不允許的。
- Pod 資源分配是不可變的,因此 resources 配置是不允許的
臨時容器是使用 API 中的一種特殊的 ephemeralcontainers 處理器進行創(chuàng)建的, 而不是直接添加到 pod.spec 段,因此無法使用 kubectl edit 來添加一個臨時容器
與常規(guī)容器一樣,將臨時容器添加到 Pod 后,將不能更改或刪除臨時容器
臨時容器的用途
當由于容器崩潰或容器鏡像不包含調(diào)試工具而導致 kubectl exec 無用時, 臨時容器對于交互式故障排查很有用。
尤其是,Distroless 鏡像 允許用戶部署最小的容器鏡像,從而減少攻擊面并減少故障和漏洞的暴露。 由于 distroless 鏡像不包含 Shell 或任何的調(diào)試工具,因此很難單獨使用 kubectl exec 命令進行故障排查。
使用臨時容器時, 啟用進程名字空間共享很有幫助, 可以查看其他容器中的進程
使用臨時調(diào)試容器來進行調(diào)試
特性狀態(tài): Kubernetes v1.25 [stable]
當由于容器崩潰或容器鏡像不包含調(diào)試程序(例如無發(fā)行版鏡像等) 而導致 kubectl exec 無法運行時,臨時容器對于排除交互式故障很有用
使用臨時容器來調(diào)試的例子
你可以使用 kubectl debug 命令來給正在運行中的 Pod 增加一個臨時容器。 首先,像示例一樣創(chuàng)建一個 pod:
kubectl run ephemeral-demo --image=registry.k8s.io/pause:3.1 --restart=Never
本示例中使用 pause 容器鏡像,因為它不包含調(diào)試程序,但是這個方法適用于所有容器鏡像。
如果你嘗試使用 kubectl exec 來創(chuàng)建一個 shell,你將會看到一個錯誤,因為這個容器鏡像中沒有 shell
kubectl exec -it ephemeral-demo -- sh
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
你可以改為使用 kubectl debug 添加調(diào)試容器。 如果你指定 -i 或者 --interactive 參數(shù),kubectl 將自動掛接到臨時容器的控制臺
kubectl debug -it ephemeral-demo --image=busybox:1.28 --target=ephemeral-demo
Defaulting debug container name to debugger-8xzrl.
If you don't see a command prompt, try pressing enter.
/ #
此命令添加一個新的 busybox 容器并將其掛接到該容器。–target 參數(shù)指定另一個容器的進程命名空間。 這個指定進程命名空間的操作是必需的,因為 kubectl run 不能在它創(chuàng)建的 Pod 中啟用共享進程命名空間
可以使用 kubectl describe 查看新創(chuàng)建的臨時容器的狀態(tài)文章來源:http://www.zghlxwxcb.cn/news/detail-558333.html
kubectl describe pod ephemeral-demo
使用 kubectl delete 來移除已經(jīng)結(jié)束掉的 Pod:文章來源地址http://www.zghlxwxcb.cn/news/detail-558333.html
kubectl delete pod ephemeral-demo
到了這里,關(guān)于【云原生】Kubernetes臨時容器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!