Essayez d'exécuter Spring Boot sur Kubernetes

about J'étais un peu intéressé par Kubernetes en lisant SoftwareDesign 2018/3, alors je l'ai essayé. Je me demandais s'il y avait beaucoup de choses auxquelles j'étais accro, mais j'ai pu passer en douceur de la construction de l'environnement au déploiement et à l'échelle.

environnement

Installation

VirtualBox

$ brew cask install virtualbox

minikube

$ brew cask install minikube

Contrôle de fonctionnement

Lancer le minikube

$ minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

Vous pouvez voir que minikube est créé et démarré sur VirtualBox

スクリーンショット 2018-02-24 17.28.48.png

Créer un déploiement

# deployment
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment "hello-minikube" created

$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

$ kubectl get pod
NAME                              READY     STATUS    RESTARTS   AGE
hello-minikube-7844bdb9c6-88hl4   1/1       Running   0          2m

Si vous vérifiez le tableau de bord dans cet état

#Lancer le tableau de bord
$ minikube dashboard

Des déploiements et des pods sont créés. スクリーンショット 2018-02-24 17.35.13.png

#Confirmer l'URL
$ minikube service hello-minikube --url

$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
・
・
・
#Suppression du service
$ kubectl delete service hello-minikube
service "hello-minikube" deleted

#Supprimer le déploiement
$ kubectl delete deployment hello-minikube
deployment "hello-minikube" deleted

#fin de minikube
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

Préparer un environnement Docker pour Spring Boot

Cette fois, nous utiliserons la version complète du tutoriel officiel. https://spring.io/guides/gs/spring-boot-docker/

Cloner le démarreur

$ git clone https://github.com/spring-guides/gs-spring-boot-docker.git
#Utilisez la version finie
$ cd gs-spring-boot-docker/complete
$ ./gradlew build docker
・
・
・
:processTestResources NO-SOURCE
:testClasses
:test
:check
:build
:dockerClean UP-TO-DATE
:dockerPrepare
:docker

BUILD SUCCESSFUL

Total time: 1 mins 37.278 secs

Essayez de bouger

$ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
springio/gs-spring-boot-docker   latest              d486fdb38288        4 minutes ago       116MB

$ docker run -p 8080:8080 -t springio/gs-spring-boot-docker

Spring Boot a démarré sur le docker.

スクリーンショット 2018-02-24 21.11.02.png

Exécuter sur kubernetes

Définition des variables d'environnement

$ minikube start
$ eval $(minikube docker-env)
#Dans cet état, vous ne pourrez pas vous connecter temporairement au docker depuis votre PC local, mais si vous redémarrez le terminal, les paramètres disparaîtront et vous serez restauré.

Créez un fichier de paramètres de service avec le contenu suivant.

kubernetes-service.yaml


apiVersion: v1
kind: Service
metadata:
  name: hellojavakubernetes
  labels:
    app: hellojavakubernetes
    tier: backend
spec:
  type: NodePort
  ports:
    # the port that this service should serve on
  - port: 8080
  selector:
    app: hellojavakubernetes
    tier: backend

Inscription au service

$ kubectl create -f kubernetes-service.yaml

Le service hellojavakubernetes a été enregistré.

スクリーンショット 2018-02-24 21.43.07.png

Créez un fichier de configuration de déploiement avec le contenu suivant.

kubernetes-deployment.yaml


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hellojavakubernetes
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hellojavakubernetes
        tier: backend
    spec:
      containers:
      - name: hellojavakubernetes
        image: springio/gs-spring-boot-docker
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8080

Essayez de déployer.

$ kubectl create -f kubernetes-deployment.yaml
deployment "hellojavakubernetes" created

$ kubectl get deployment
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hellojavakubernetes   1         1         1            1           3m

Un déploiement appelé «hellojavakubernetes» a été créé et un pod a également été créé.

スクリーンショット 2018-02-24 21.54.37.png

Recherchez l'URL.

$ minikube service hellojavakubernetes --url
http://192.168.99.100:31830

Accéder à l'URL affichée スクリーンショット 2018-02-24 22.04.06.png

Il était affiché correctement. J'ai pu continuer sans me coincer pour autant.

Mise à l'échelle de l'application

Puisque c'est un gros problème, je vais essayer de mettre à l'échelle.

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hellojavakubernetes   1         1         1            1           17h

#Spécifier les répliques
$ kubectl scale --replicas=2 -f kubernetes-deployment.yaml 
deployment "hellojavakubernetes" scaled

#Le nombre de déploiements est passé à 2.
$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hellojavakubernetes   2         2         2            2           17h

Vous pouvez voir que le nombre de pods est passé à deux.

スクリーンショット 2018-02-25 15.48.27.png

Ensuite, essayez de changer à partir du fichier de paramètres. Remplacez les «répliques» de «kubernetes-deployment.yaml» créées ci-dessus par «3».

#Appliquer les paramètres
$ kubectl apply -f kubernetes-deployment.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
deployment "hellojavakubernetes" configured

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hellojavakubernetes   3         3         3            3           17h

J'ai également pu mettre à l'échelle cela.

Nettoyer

terminer

$ kubectl delete service,deployment hellojavakubernetes
$ minikube stop
$ minikube delete

Il semble qu'il y ait encore beaucoup de choses à étudier pour l'exploiter en production, mais j'ai eu l'impression que Kubernetes lui-même est assez complet.

Page de référence

[minikube] https://github.com/kubernetes/minikube

[Spring Boot with Docker] https://spring.io/guides/gs/spring-boot-docker/

[getting started] https://www.bluefyre.io/getting-started-springboot-kubernetes/

Recommended Posts

Essayez d'exécuter Spring Boot sur Kubernetes
Essayez Spring Boot sur Mac
Spring Boot sur Microsoft Azure
Essayez d'utiliser Spring Boot Security
gRPC sur Spring Boot avec grpc-spring-boot-starter
Création d'un environnement de développement Spring Boot dans Vagrant
Mémo de construction de l'environnement Spring Boot sur Mac
Essayez d'utiliser Spring Boot avec VS Code
Essayez d'exécuter Kubernetes Job à partir de Java
Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
Défi Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Essayez d'exécuter ScalarDB sur WSL Ubuntu (Construction de l'environnement)
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
Essayez d'implémenter la fonction de connexion avec Spring Boot
Essayez d'automatiser la migration avec Spring Boot Flyway
Déployer l'application Spring Boot sur Elastic Beanstalk
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
Essayez DisplayLink sur Ubuntu 20.04
Essayez d'exécuter une application créée avec Quarkus sur Heroku
Rédaction de mémo de démarrage de printemps (1)
Essayez OpenLiteSpeed sur CentOS8
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Apprentissage de Spring Boot [Début]
Essayez la loi de l'inversion des dépendances avec plusieurs projets Spring Boot
Rédaction de mémos de démarrage de printemps (2)
Essayez d'exécuter Spring Cloud Config pour le moment
Résumé du document Spring Boot 2.2
Essayez gRPC dans le projet Spring Boot et Spring Cloud (Mac OS)
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Déployer le projet Spring Boot sur Tomcat dans XAMPP
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
Essayez d'utiliser Spring JDBC
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Définir le paramètre contextuel dans Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Calendrier des tâches du didacticiel Spring Boot
Spring 5 et Spring Boot 2 Procédure de préparation pratique
Démarrez avec Spring Boot
Essayez Docker sur Windows 10 Famille
Bonjour tout le monde avec Spring Boot!
Multi-projets Spring Boot 2 avec Gradle
Exécutez LIFF avec Spring Boot