利用VisualVm和JMX远程监控K8S里的Java进程
原文地址在利用VisualVm和JMX远程监控Java进程和VisualVm利用SSL连接JMX的方法里介绍了如何使用VisualVm+JMX监控远程Java进程的方法。那么如何监控一个运行在K8S集群中的Java进程呢?其实大致方法也是类似的。非SSL JMX连接如果采用非SSL JMX连接,那么你只需要这么几步就可以让你本地的VisualVm连接到K8S集群里的Java进程了。Step1 修改Deployment.yaml,添加以下System Properties-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=1100-Dcom.sun.management.jmxremote.rmi.port=1100-Djava.rmi.server.hostname=localhost注意,-Djava.rmi.server.hostname一定要设置成localhostStep2 修改Deployment.yaml,添加Container Portcontainers:- name: … image: … ports: - containerPort: 1100 name: tcp-jmxStep3 部署DeploymentStep4 利用kubectl转发端口kubectl -n <namespace> port-forward <pod-name> 1100Step5 启动VisualVm,创建JMX连接localhost:1100SSL JMX连接启用SSL JMX连接,那么需要增加三个步骤,步骤就稍微复杂一些,假设你已经根据VisualVm利用SSL连接JMX的方法创建好了java-app和visualvm的keystore和truststore。Step1 创建一个Secret包含java-app.keystore和java-app.truststorekubectl -n <namespace> create secret generic jmx-ssl \ –from-file=java-app.keystore \ –from-file=java-app.truststoreStep2 修改Deployment.yaml,把Secret挂载到容器内的/jmx-ssl目录下 containers: - name: … image: … volumeMounts: - name: jmx-ssl-vol mountPath: /jmx-ssl volumes: - name: jmx-ssl-vol secret: secretName: jmx-sslStep3 修改Deployment.yaml,添加以下System Properties-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=1100-Dcom.sun.management.jmxremote.rmi.port=1100-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=true-Dcom.sun.management.jmxremote.registry.ssl=true-Dcom.sun.management.jmxremote.ssl.need.client.auth=true-Djavax.net.ssl.keyStore=/jmx-ssl/java-app.keystore-Djavax.net.ssl.keyStorePassword=<keystore password>-Djavax.net.ssl.trustStore=/jmx-ssl/java-app.truststore-Djavax.net.ssl.trustStorePassword=<truststore password>-Djava.rmi.server.hostname=localhost注意,-Djava.rmi.server.hostname一定要设置成localhostStep4 修改Deployment.yaml,添加Container Portcontainers:- name: … image: … ports: - containerPort: 1100 name: tcp-jmx …Step5 部署DeploymentStep6 利用kubectl转发端口kubectl -n <namespace> port-forward <pod-name> 1100Step7 启动VisualVm,创建JMX连接localhost:1100jvisualvm -J-Djavax.net.ssl.keyStore=<path to visualvm.keystore> \ -J-Djavax.net.ssl.keyStorePassword=<visualvm.keystore的密码> \ -J-Djavax.net.ssl.trustStore=<path to visualvm.truststore> \ -J-Djavax.net.ssl.trustStorePassword=<visualvm.truststore的密码>K8S样例配置文件相关K8S样例配置文件在这里(用tomcat做的例子)。 ...