Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 多个应用程序节点如何在kubernetes中公开jmx? 在kubernetes中,我可以使用service公开服务。这很好 假设我有1个web实例和10个java服务器实例 我有一个windows网关,用于通过安装在上面的jconsole访问这10个java服务器实例 显然,我并没有通过kubernetes服务公开所有应用程序jmx端口_Docker_Kubernetes_Kubernetes Service - Fatal编程技术网

Docker 多个应用程序节点如何在kubernetes中公开jmx? 在kubernetes中,我可以使用service公开服务。这很好 假设我有1个web实例和10个java服务器实例 我有一个windows网关,用于通过安装在上面的jconsole访问这10个java服务器实例 显然,我并没有通过kubernetes服务公开所有应用程序jmx端口

Docker 多个应用程序节点如何在kubernetes中公开jmx? 在kubernetes中,我可以使用service公开服务。这很好 假设我有1个web实例和10个java服务器实例 我有一个windows网关,用于通过安装在上面的jconsole访问这10个java服务器实例 显然,我并没有通过kubernetes服务公开所有应用程序jmx端口,docker,kubernetes,kubernetes-service,Docker,Kubernetes,Kubernetes Service,我的选择是什么?我应该如何允许kubernetes群集外部windows网关访问这10台服务器jmx端口?这里有什么做法吗?我认为一种方法是使用唯一的字符串\id(例如pod\u name)向您的pod添加标签,并使用expose命令创建一个新的服务,该服务的选择器为该唯一的id\string kubectl label pods <podname> podname=<podname> kubectl expose pod <podname> --port=9

我的选择是什么?我应该如何允许kubernetes群集外部windows网关访问这10台服务器jmx端口?这里有什么做法吗?

我认为一种方法是使用唯一的字符串\id(例如pod\u name)向您的pod添加标签,并使用expose命令创建一个新的服务,该服务的选择器为该唯一的id\string

kubectl label pods <podname> podname=<podname>
kubectl expose pod <podname> --port=9010 --name=<podname>_jmx
kubectl标签吊舱吊舱名称=
kubectl expose pod--port=9010--name=_jmx

我们按照以下方式做了

  • 为每个吊舱添加一个唯一的标签。ex:podid=asdw23443
  • 使用选择器podid=asdw23443创建新服务。确保在服务中通过nodeport或loadbalancer公开pod上的jmx端口
  • 如果您正在服务中选择nodeport,因为您正在执行NAT操作,您可能必须为需要通过jconsole连接的每个JVM提供以下JVM参数

    -Djava.rmi.server.hostname=<your-ip-address>
    
    -Djava.rmi.server.hostname=
    
    另一个选项是使用kubectl port forward将JMX端口从K8 pod转发到本地PC

    我是这样做的:

    1) 。向应用程序添加以下JVM选项:

    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.local.only=false
    -Dcom.sun.management.jmxremote.port=1099
    -Dcom.sun.management.jmxremote.rmi.port=1099
    -Djava.rmi.server.hostname=127.0.0.1
    
    这里的关键部分是:

    • 同一端口应用作“jmxremote.port”和“jmxremote.rmi.port”。这只需要转发一个端口

    • 127.0.0.1应作为rmi服务器主机名传递。这是JMX连接通过端口转发工作所必需的

    2) 。通过kubectl将JMX端口(1099)转发到本地PC:

    kubectl port-forward <your-app-pod> 1099
    
    通过这种方式,可以通过JMX调试任何Java pod,而无需通过K8服务公开JMX(从安全角度来看这更好)

    另一个可能有用的选项是将Jolokia()代理附加到容器内的Java进程,以便它通过HTTP端口代理JMX,并公开或转发此HTTP端口以通过HTTP查询JMX。

    此外,我希望一次监视同一pod的所有实例,因为我们将端口硬编码为1099,这很困难,因为我只能用这个端口将一个端口转发到一个pod

    在运行docker时,我使用Shell脚本动态分配pod

    Dockerfile
    
    CMD/run.sh
    

    run.sh

    JMX_端口=$((随机%20)+1099))

    echo“在端口$JMX_端口上运行JMX”

    java``eval echo$java\u OPTS```…

    部署.yml
    
    环境:
    -名称:JAVA_OPTS
    值:“-Xms256m-Xmx6144m-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=$JMX_port-Dcom.sun.management.jmxremote.port=$JMX_port-Djava.rmi.server.hostname=127.0.1”
    


    eval将评估JMX_端口到bash的值,启动时每个pod可能会得到不同的pod。我

    我不确定我是否明白,是不是每个pod实例都有一个PODD?因此,如果您将其从10扩展到20,那么您可以在没有负载平衡器的情况下访问每个pod实例?我想访问一个特定的pod实例。我不确定我是否得到了它。是不是每个pod实例都有一个POID?所以,如果你把它从10个扩展到1000个,那么你有1000个服务?是的,在这种方法中,你必须为每个吊舱创建一个服务。如果你有1000个pod,那么应该有1000个服务。有一件事我正在努力解决:当我提前不知道pod将被安排到哪个工作者时,如何将JVM arg设置为运行进程的IP地址?这是我遇到的最直接的解释,效果非常好。谢谢非常感谢。Big helpsetting
    -Djava.rmi.server.hostname=127.0.0.1
    帮了我们的忙。我欠你一杯咖啡!如何从远程主机连接到此jmx服务器?
    jconsole 127.0.0.1:1099