为远程erlang节点运行observer:使其更简单

为远程erlang节点运行observer:使其更简单,erlang,elixir,kubernetes,Erlang,Elixir,Kubernetes,我有一个库伯内特斯星系团 我可以轻松连接到远程容器,并运行连接到实时生产erlang节点的shell节点: $ kubectl exec myapp-2431125679-cwqvt -i -t -- iex --name debugging@127.0.0.1 --remsh myliveapp@127.0.0.1 --cookie my_secret_cookie Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [smp:2:2] [async-t

我有一个库伯内特斯星系团

我可以轻松连接到远程容器,并运行连接到实时生产erlang节点的shell节点:

$ kubectl exec myapp-2431125679-cwqvt -i -t -- iex --name debugging@127.0.0.1 --remsh myliveapp@127.0.0.1 --cookie my_secret_cookie

Erlang/OTP 18 [erts-7.3.1] [source] [64-bit] [smp:2:2] [async-threads:10] [kernel-poll:false]

Interactive Elixir (1.3.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(myliveapp@127.0.0.1)1>
不过,我需要的是能够对远程实时生产erlang节点运行
:observer

我也能做到:

  • 终止本地
    epmd
    进程:

    killall epmd
    
  • 将所选远程端口转发到我的本地计算机:

    kubectl port-forward myapp-2431125679-cwqvt 35609 4369
    
    我知道我的应用程序在远程容器的端口35609上运行,而4399是默认运行的端口
    epmd
    ,这是我的远程容器的情况

  • 运行:

    iex --name debugging@127.0.0.1 --cookie marketplace -e ':observer.start()'
    
  • :observer
    的顶部菜单中选择我感兴趣的应用程序

  • 我的问题是:

  • 这能做得更简单吗
  • 关于kubernetes,有什么我应该知道的吗,可以编写一个连接到远程节点并执行我想要的操作的单行程序吗
  • 最终,我能把这个过程变成一行程序还是把它变成一个shell脚本


    现在杀戮
    epmd
    看起来真的很肮脏,我希望能够特别避免这种情况。

    是的,您可以将其转换为shell脚本。我确实为这个用例创建了一个shell脚本,但我正在使用SSH。我的方法和你的一样,而且我必须在本地杀死epmd。但我能够将它包装成bash脚本。你可以在这里找到它:

    该脚本还自动发现远程beam端口。因此,您将以一行结束:

    远程观察-c


    我手头没有Kubernetes部署可供尝试,但它可能很容易移植,以调用
    kubectl端口转发
    ,而不是当前的ssh转发。

    我写过如何避免将epmd用于Erlang分发。对于您的情况,这不是一个现成的解决方案,但它展示了如何创建一个类似于epmd的自定义模块来或多或少实现您想要的功能。您不需要通过端口将远程epmd和节点端口转发到本地机上,只需使用本地机上的公共主机名访问这些端口即可。如果您可以做到这一点,那么在使用正确的cookie启动shell之后,您可以从本地iex使用
    Node.connect(:“myliveapp@”)