我有一个kubernetes集群。
我可以轻松连接到远程容器,并运行连接到live production erlang node的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上运行,而4369是默认运行的端口epmd
,这是我的远程容器的情况。
运行:
iex --name debugging@127.0.0.1 --cookie marketplace -e ':observer.start()'
从:observer
的顶部菜单中选择我感兴趣的应用。
我的问题是:
最终,我可以将此流程设为单行或将其转换为shell脚本吗?
现在杀死epmd
看起来真的很脏,我很想能够特别避免这种情况。
答案 0 :(得分:1)
是的,您可以将其转换为Shell脚本。我确实为此用例创建了一个shell脚本,但是正在使用SSH。我的方法与您的方法相同,也必须在本地杀死epmd。但是我能够将其包装到bash脚本中。您可以在这里获取它:https://github.com/dominicletz/remote_observe/
该脚本还可以自动发现远程束端口。因此,您只能得到一行:
remote_observe -c <cookie> <server-address>
我没有尝试使用Kubernetes部署的方法,但是它可以很容易地移植为调用kubectl port-forward <server-address> <port>
而不是当前的ssh转发。