使用Docker,如果我要检查没有自己的外壳的运行容器,则可以运行以下命令:
docker run --net=container:thingie --pid=container:thingie -it --rm busybox sh
这将在一个单独的映像中运行一个shell,但其pid /网络空间与我要检查的容器相同。还有用于连接到目标容器文件系统的选项。
我可以在Kubernetes中使用kubectl
并指向现有的吊舱/容器吗?
答案 0 :(得分:2)
当然,首先要使用kubectl get pod | grep YOUR_DEPLOYMENT_NAME
来获取pod的uid。然后,使用kubectl exec -it POD_UID bash/sh/whatever
登录到Pod。请注意,您的容器可能不接受bash,因此您可能需要将其更改为sh。
但是,正如您的评论所建议,图像可能没有外壳(我从未听说过,但我们仍然可以解决)。为此,您可以在Pod 中添加另一个容器,该容器将共享文件系统,网络等。这将允许您调试主容器。使用kubectl exec -it $YOUR_POD_UID -c $CONTAINER_NAME alpine sh
进入调试容器。这是一棵Yaml,以备不时之需。
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: alpine
labels:
app: alpine
spec:
replicas: 1
selector:
matchLabels:
app: alpine
template:
metadata:
creationTimestamp: null
labels:
app: alpine
spec:
containers:
# Your container.
- name: your_container_without_shell
image: container_without_shell:latest
# Sidecar container.
- name: alpine
image: alpine:latest
command: ["/bin/sleep", "1000000"] # let's say it dies eventually.
hostname: alpine
restartPolicy: Always