为远程erlang节点运行观察者:使其更简单

时间:2017-02-02 09:06:58

标签: erlang elixir kubernetes

我有一个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

我也可以这样做:

  1. 杀死本地epmd进程:

    killall epmd
    
  2. 将选定的远程端口转发到我的本地计算机:

    kubectl port-forward myapp-2431125679-cwqvt 35609 4369
    

    我知道我的应用程序在远程容器上的端口35609上运行,而4369是默认运行的端口epmd,这是我的远程容器的情况。

  3. 运行:

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

  5. 我的问题是:

    1. 这可以更简单吗
    2. 有什么我应该知道的关于kubernetes ,以便能够编写一个连接到远程节点的单线程并做我想做的事情吗?
    3. 最终,我可以将此流程设为单行或将其转换为shell脚本吗?

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

1 个答案:

答案 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转发。