k8s如何执行分布式容器



我想从cronJob中删除一个特定的文件到下面的容器,问题是当我运行exec时我得到了错误,我如何执行到分布式容器(k8s v1.22.5)并从cronJob中删除该文件,我们有哪个选项?

这是部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: distro
labels:
app: distro
spec:
replicas: 1
selector:
matchLabels:
app: distro
template:
metadata:
labels:
app: distro
spec:
containers:
- name: edistro
image: timberio/vector:0.21.X-distroless-libc
ports:
- containerPort: 80

我尝试的是

kubectl exec -i -t -n apits aor-agent-zz -c tor "--" sh -c "clear; (bash || ash || sh)"

错误是:

error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec

我试着这样做

kubectl debug -it distro-d49b456cf-t85cm --image=ubuntu --target=edistro  --share-processes -n default

And got error:

Targeting container "edistro". If you don't see processes from this container it may be because the container runtime doesn't support this feature. Defaulting debug container name to debugger-fvfxs. error: ephemeral containers are disabled for this cluster (error from server: "the server could not find the requested resource").

我猜(不确定),我们的容器运行时不支持它,我们有哪个选项?

下面的答案不能解决问题,我需要一种方法从外部的非分配器访问并删除特定的文件,我该怎么做?

使用distro-less的目的是在映像中打包最少量的工具/软件。这意味着从映像中删除不必要的工具,如shell

你可以使用,但这可能取决于你的目标:

kubectl debug -it <POD_TO_DEBUG> --image=<helper-image> --target=<CONTAINER_TO_DEBUG> --share-processes

,

kubectl debug -it distro-less-pod   --image=ubuntu --target=edistro  --share-processes

不是一个很好的选择,但这是我能想到的唯一的选择。

如果你能够进入运行pod的节点,并且你有权限在那里执行命令(很可能是作为root),你可以尝试nsenter或任何其他方式直接进入容器挂载命名空间。

相关内容

  • 没有找到相关文章

最新更新