Dieses Mal werde ich VisualVM verwenden, um eine Verbindung zu einer Java-App herzustellen, die auf k8s ausgeführt wird. Ich denke, es wird bei der Überwachung und Analyse von Java-Anwendungen verwendet. Da es sich um einen Container handelt, ist es meiner Meinung nach üblich, Metriken mit Prometheus zu erfassen. Dieses Mal werde ich jedoch das von Java bereitgestellte Tool verwenden, da es Java-Entwicklern vertraut ist.
Kubernetes:1.18 helm:v3.2 ※https://helm.sh/docs/intro/quickstart/ Java:1.8 Jenkins:2.235
Stellen Sie den Jenkins-Container mit Helm bereit.
Erstellen Sie zunächst eine Parameterdatei für die Bereitstellung.
IP-Adresse des Worker-Knotens
$ kubectl get nodes --namespace jenkins -o jsonpath="{.items[0].status.addresses[0].address}"
values.yaml
master:
serviceType: NodePort
javaOpts: >
-Djava.rmi.server.hostname=0.0.0.0
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=32000
-Dcom.Sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.rmi.port=32000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.10.51
jmxPort: 32000
Erstellen Sie außerdem eine Yaml-Datei, die den Dienst für den JMX-Zugriff definiert.
svc.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins-jmx
namespace: jenkins
spec:
ports:
- name: jmx
nodePort: 32000
port: 32000
protocol: TCP
targetPort: 32000
selector:
app.kubernetes.io/component: jenkins-master
app.kubernetes.io/instance: jenkins
type: NodePort
Sofort bereitstellen.
deploy_jenkins
#Erstellen Sie einen Jenkins-Namespace
$ kc create ns jenkins
#k8s Verbindungseinstellungen(context)Bestätigung
$ kc config current-context
sandbox
#k8s Verbindungseinstellungen(context)Namespace-Einstellung
$ kc config set-context sandbox --namespace jenkins
#Bestätigung des Verbindungsziel-Namespace k8s
$ kc config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* sandbox sandbox sandbox jenkins
#Helm-Repository hinzugefügt / Repository-Informationen aktualisiert
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com
"stable" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ? Happy Helming!?
#Jenkins Container-Bereitstellung
# helm install <Veröffentlichungsname> <Diagrammname> -f <parameter file> --namespace <Namespace des Bereitstellungsziels>
#Versionsname: Helms Verwaltungsname für die Bereitstellung
#Diagrammname: Zu verwendender Vorlagenname
$ helm install jenkins stable/jenkins -f values.yaml --namespace jenkins
NAME: jenkins
LAST DEPLOYED: Sat Jul 25 hh:mm:ss 2020
NAMESPACE: jenkins
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:
printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
export NODE_PORT=$(kubectl get --namespace jenkins -o jsonpath="{.spec.ports[0].nodePort}" services jenkins)
export NODE_IP=$(kubectl get nodes --namespace jenkins -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/login
3. Login with the password from step 1 and the username: admin
・ ・ ・
#Bestätigen Sie die Bereitstellung
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
jenkins jenkins 1 2020-MM-DD hh:mm:ss.950509962 +0900 JST deployed jenkins-2.4.1 lts
Der von helm erstellte Container verfügt nicht über eine Definition des Dienstes für die Verbindung mit JMX. Stellen Sie den Dienst daher separat bereit.
deploy_service
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.43.173.89 <none> 8080:31036/TCP 12m
jenkins-agent ClusterIP 10.43.130.60 <none> 50000/TCP 12m
$ kubectl apply -f svc.yaml
service/jenkins-jmx created
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.43.173.89 <none> 8080:31036/TCP 12m
jenkins-agent ClusterIP 10.43.130.60 <none> 50000/TCP 12m
jenkins-jmx NodePort 10.43.97.82 <none> 32000:32000/TCP 19s
Stellen Sie jetzt eine JMX-Verbindung zum gestarteten Jenkins-Container her. Starten wir Java VisualVM und stellen Sie eine Verbindung zum Jenkins-Container her. Es ist auch im JDK usw. enthalten, aber dieses Mal werde ich mich mit der 1.8 Java VisualVM verbinden, die mit Plejaden geliefert wird (alles in einer Sonnenfinsternis). https://mergedoc.osdn.jp/
** Bildschirm nach Verbindung **
** Registerkarte Überwachung **
** Thread-Registerkarte **
Als Bonus sieht es so aus, wenn ich versuche, mich mit jconsole zu verbinden.
Dieses Mal habe ich versucht, mit VisualVM oder jconsole eine Verbindung zu einem Container herzustellen, der auf k8s ausgeführt wird. Ich konnte keine Verbindung herstellen, indem ich einen gemeinsamen Port öffnete. Deshalb habe ich Folgendes hinzugefügt und festgelegt.
Bitte verwenden Sie dies als Referenz, wenn Sie eine Verbindung mit einem vertrauten Tool anstelle von Prometheus herstellen.