4

我在本地机器上的 minikube 集群内运行 rails 服务。我喜欢在我的代码中设置断点,以便与流程进行交互。这在 Minikube 中不起作用。我可以附加到运行我的 rails 容器的 pod 并点击binding.pr我的代码中的语句,而不是获得交互式断点,我只是看到 pry 尝试创建一个断点,但最终直接越过它。任何人都知道如何让这个工作?我猜部署的吊舱本身不是交互式的。

4

1 回答 1

4

您正在尝试对您的应用程序进行交互式访问。

您的问题是由于 k8s 默认情况下没有为容器分配 TTY 和 stdin 缓冲区造成的。

我已经复制了您的问题并找到了解决方案。

要获得交互式断点,您必须在 Deployment yaml 中添加 2 个标志以指示您需要交互式会话:

   stdin: true
   tty: true

下面是一个部署示例:

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     labels:
       run: test
     name: test
   spec:
     selector:
       matchLabels:
         run: test
     template:
       metadata:
         labels:
           run: test
       spec:
         containers:
         - image: test
           name: test
           stdin: true
           tty: true

您可以在此处找到有关它的更多信息。

请记住在附加到 pod 时使用 -it 选项,如下所示:

   kubectl attach -it <pod_name>

让我知道这是否有帮助。

于 2019-10-21T13:14:57.230 回答