Cette fois, je vais utiliser VisualVM pour me connecter à une application Java exécutée sur k8s. Je pense qu'il sera utilisé lors de la surveillance et de l'analyse des applications Java. Puisqu'il s'agit d'un conteneur, je pense qu'il est courant de collecter des métriques avec Prometheus, mais cette fois j'utiliserai l'outil fourni par Java car c'est un outil familier aux développeurs Java.
Kubernetes:1.18 helm:v3.2 ※https://helm.sh/docs/intro/quickstart/ Java:1.8 Jenkins:2.235
Déployez le conteneur Jenkins avec helm.
Tout d'abord, créez un fichier de paramètres pour le déploiement.
Adresse IP du nœud de travail
$ 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
Créez également un fichier yaml qui définit le service pour l'accès JMX.
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
Déployez immédiatement.
deploy_jenkins
#Créer un espace de noms Jenkins
$ kc create ns jenkins
#paramètres de connexion k8s(context)Vérification
$ kc config current-context
sandbox
#paramètres de connexion k8s(context)Paramètre d'espace de noms
$ kc config set-context sandbox --namespace jenkins
#k8s Confirmation de l'espace de noms de destination de connexion
$ kc config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* sandbox sandbox sandbox jenkins
#Dépôt Helm ajouté / informations sur le référentiel mises à jour
$ 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!?
#Déploiement de conteneurs Jenkins
# helm install <Nom de la version> <Nom du graphique> -f <parameter file> --namespace <Espace de noms de destination de déploiement>
#Nom de la version: nom administratif de Helm pour le déploiement
#Nom du graphique: nom du modèle à utiliser
$ 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
・ ・ ・
#Confirmer le déploiement
$ 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
Le conteneur créé par helm n'a pas de définition de Service pour se connecter à JMX, alors déployez le Service séparément.
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
Maintenant, établissez une connexion JMX au conteneur Jenkins lancé. Lançons Java VisualVM et connectons-nous au conteneur Jenkins. Il est également inclus dans le JDK, etc., mais cette fois, je vais me connecter avec le Java VisualVM 1.8 fourni avec des pléiades (le tout dans une éclipse). https://mergedoc.osdn.jp/
java \ 8 \ bin \ jvisualvm.exe```.** Écran après connexion **
** Onglet Surveillance **
** Onglet de fil **
En prime, quand j'essaye de me connecter avec jconsole, ça ressemble à ça.
Cette fois, j'ai essayé de me connecter à un conteneur fonctionnant sur k8s avec VisualVM ou jconsole. Je n'ai pas pu me connecter en ouvrant un port commun, j'ai donc ajouté ce qui suit et l'ai défini.
--Ajoutez le nom d'hôte aux options de démarrage java (javaOpts) et définissez l'adresse IP du nœud Worker --Définissez la même valeur pour le port connecté par jmx et le port ouvert par Nodeport.
Veuillez l'utiliser comme référence lorsque vous vous connectez à un outil familier au lieu de Prometheus.