为远程erlang节点运行observer:使其更简单
我有一个库伯内特斯星系团 我可以轻松连接到远程容器,并运行连接到实时生产erlang节点的shell节点:为远程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
$ 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
的顶部菜单中选择我感兴趣的应用程序现在杀戮
epmd
看起来真的很肮脏,我希望能够特别避免这种情况。是的,您可以将其转换为shell脚本。我确实为这个用例创建了一个shell脚本,但我正在使用SSH。我的方法和你的一样,而且我必须在本地杀死epmd。但我能够将它包装成bash脚本。你可以在这里找到它:
该脚本还自动发现远程beam端口。因此,您将以一行结束:
远程观察-c
我手头没有Kubernetes部署可供尝试,但它可能很容易移植,以调用
kubectl端口转发
,而不是当前的ssh转发。我写过如何避免将epmd用于Erlang分发。对于您的情况,这不是一个现成的解决方案,但它展示了如何创建一个类似于epmd的自定义模块来或多或少实现您想要的功能。您不需要通过端口将远程epmd和节点端口转发到本地机上,只需使用本地机上的公共主机名访问这些端口即可。如果您可以做到这一点,那么在使用正确的cookie启动shell之后,您可以从本地iex使用Node.connect(:“myliveapp@”)
。