是否有docker run --net = container:thingie --pid = container:thingie -it --rm --busybox sh的kubectl版本?

时间:2019-10-25 20:16:04

标签: docker kubernetes

使用Docker,如果我要检查没有自己的外壳的运行容器,则可以运行以下命令:

docker run --net=container:thingie --pid=container:thingie -it --rm busybox sh

这将在一个单独的映像中运行一个shell,但其pid /网络空间与我要检查的容器相同。还有用于连接到目标容器文件系统的选项。

我可以在Kubernetes中使用kubectl并指向现有的吊舱/容器吗?

1 个答案:

答案 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