k8s如何执行distroless容器
k8s how to exec to distroless container
我想从 cronJob 中删除特定文件到以下容器,问题是当我 运行 exec 时出现错误,如何执行到 distroless 容器 (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
出现错误:
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").
我猜(不确定)我们的容器 运行time 不支持它,我们有哪个选项?
下面的答案没有解决问题,我需要一种从 distroless pod 外部访问并删除特定文件的方法在那里,我该怎么做?
使用 distro-less
的目的是在映像中打包最少的 tools/software。这意味着从图像中删除不必要的工具,如 shell
。
您可以解决使用问题,但这可能取决于您的 objective:
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
不是很好的选择,但这是我能想到的唯一选择。
如果您能够进入 pods 所在的节点 运行 并且您有权在其中执行命令(很可能是 root),您可以尝试 nsenter
或任何其他直接进入容器挂载命名空间的方式。
我想从 cronJob 中删除特定文件到以下容器,问题是当我 运行 exec 时出现错误,如何执行到 distroless 容器 (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
出现错误:
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").
我猜(不确定)我们的容器 运行time 不支持它,我们有哪个选项?
下面的答案没有解决问题,我需要一种从 distroless pod 外部访问并删除特定文件的方法在那里,我该怎么做?
使用 distro-less
的目的是在映像中打包最少的 tools/software。这意味着从图像中删除不必要的工具,如 shell
。
您可以解决使用问题,但这可能取决于您的 objective:
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
不是很好的选择,但这是我能想到的唯一选择。
如果您能够进入 pods 所在的节点 运行 并且您有权在其中执行命令(很可能是 root),您可以尝试 nsenter
或任何其他直接进入容器挂载命名空间的方式。