怎么注册自己网站,彩票网站建设制作价格,重庆seo网站管理,免费网站系统下载临时容器
特性状态#xff1a; Kubernetes v1.25 [stable] 本页面概述了临时容器#xff1a;一种特殊的容器#xff0c;该容器在现有 Pod 中临时运行#xff0c;以便完成用户发起的操作#xff0c;例如故障排查。 你会使用临时容器来检查服务#xff0c;而不是用它来构建…临时容器
特性状态 Kubernetes v1.25 [stable] 本页面概述了临时容器一种特殊的容器该容器在现有 Pod 中临时运行以便完成用户发起的操作例如故障排查。 你会使用临时容器来检查服务而不是用它来构建应用程序
了解临时容器
Pod 是 Kubernetes 应用程序的基本构建块。 由于 Pod 是一次性且可替换的因此一旦 Pod 创建就无法将容器加入到 Pod 中。 取而代之的是通常使用 Deployment 以受控的方式来删除并替换 Pod
有时有必要检查现有 Pod 的状态。例如对于难以复现的故障进行排查。 在这些场景中可以在现有 Pod 中运行临时容器来检查其状态并运行任意命令
什么是临时容器
临时容器与其他容器的不同之处在于它们缺少对资源或执行的保证并且永远不会自动重启 因此不适用于构建应用程序。 临时容器使用与常规容器相同的 ContainerSpec 节来描述但许多字段是不兼容和不允许的
临时容器没有端口配置因此像 ports、livenessProbe、readinessProbe 这样的字段是不允许的。Pod 资源分配是不可变的因此 resources 配置是不允许的
临时容器是使用 API 中的一种特殊的 ephemeralcontainers 处理器进行创建的 而不是直接添加到 pod.spec 段因此无法使用 kubectl edit 来添加一个临时容器
与常规容器一样将临时容器添加到 Pod 后将不能更改或删除临时容器
临时容器的用途
当由于容器崩溃或容器镜像不包含调试工具而导致 kubectl exec 无用时 临时容器对于交互式故障排查很有用。
尤其是Distroless 镜像 允许用户部署最小的容器镜像从而减少攻击面并减少故障和漏洞的暴露。 由于 distroless 镜像不包含 Shell 或任何的调试工具因此很难单独使用 kubectl exec 命令进行故障排查。
使用临时容器时 启用进程名字空间共享很有帮助 可以查看其他容器中的进程
使用临时调试容器来进行调试
特性状态 Kubernetes v1.25 [stable] 当由于容器崩溃或容器镜像不包含调试程序例如无发行版镜像等 而导致 kubectl exec 无法运行时临时容器对于排除交互式故障很有用
使用临时容器来调试的例子
你可以使用 kubectl debug 命令来给正在运行中的 Pod 增加一个临时容器。 首先像示例一样创建一个 pod
kubectl run ephemeral-demo --imageregistry.k8s.io/pause:3.1 --restartNever本示例中使用 pause 容器镜像因为它不包含调试程序但是这个方法适用于所有容器镜像。
如果你尝试使用 kubectl exec 来创建一个 shell你将会看到一个错误因为这个容器镜像中没有 shell
kubectl exec -it ephemeral-demo -- shOCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused exec: \sh\: executable file not found in $PATH: unknown你可以改为使用 kubectl debug 添加调试容器。 如果你指定 -i 或者 --interactive 参数kubectl 将自动挂接到临时容器的控制台
kubectl debug -it ephemeral-demo --imagebusybox:1.28 --targetephemeral-demoDefaulting debug container name to debugger-8xzrl.
If you dont see a command prompt, try pressing enter.
/ #此命令添加一个新的 busybox 容器并将其挂接到该容器。–target 参数指定另一个容器的进程命名空间。 这个指定进程命名空间的操作是必需的因为 kubectl run 不能在它创建的 Pod 中启用共享进程命名空间
可以使用 kubectl describe 查看新创建的临时容器的状态
kubectl describe pod ephemeral-demo使用 kubectl delete 来移除已经结束掉的 Pod
kubectl delete pod ephemeral-demo