Versuchen Sie, Spring Boot auf Kubernetes auszuführen

about Ich habe mich beim Lesen von SoftwareDesign 2018/3 ein wenig für Kubernetes interessiert, also habe ich es versucht. Ich habe mich gefragt, ob es viele Dinge gibt, denen ich verfallen bin, aber ich konnte reibungslos vom Aufbau der Umgebung bis zur Bereitstellung und Skalierung vorgehen.

Umgebung

Installation

VirtualBox

$ brew cask install virtualbox

minikube

$ brew cask install minikube

Funktionsprüfung

Starten Sie die 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.

Sie können sehen, dass Minikube auf VirtualBox erstellt und gestartet wird

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

Bereitstellung erstellen

# 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

Wenn Sie das Dashboard in diesem Zustand überprüfen

#Starten Sie das Dashboard
$ minikube dashboard

Bereitstellungen und Pods werden erstellt. スクリーンショット 2018-02-24 17.35.13.png

#URL bestätigen
$ minikube service hello-minikube --url

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

#Bereitstellung löschen
$ kubectl delete deployment hello-minikube
deployment "hello-minikube" deleted

#Minikube Ende
$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

Bereiten Sie eine Docker-Umgebung für Spring Boot vor

Dieses Mal werden wir die fertige Version des offiziellen Tutorials verwenden. https://spring.io/guides/gs/spring-boot-docker/

Klonen Sie den Starter

$ git clone https://github.com/spring-guides/gs-spring-boot-docker.git
#Verwenden Sie die fertige Version
$ 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

Versuche dich zu bewegen

$ 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 wurde auf Docker gestartet.

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

Laufen Sie auf Kubernetes

Umgebungsvariablen einstellen

$ minikube start
$ eval $(minikube docker-env)
#In diesem Zustand können Sie von Ihrem lokalen PC aus vorübergehend keine Verbindung zum Docker herstellen. Wenn Sie das Terminal jedoch neu starten, werden die Einstellungen ausgeblendet und Sie werden wiederhergestellt.

Erstellen Sie eine Serviceeinstellungsdatei mit den folgenden Inhalten.

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

Serviceregistrierung

$ kubectl create -f kubernetes-service.yaml

Der Dienst "hellojavakubernetes" wurde registriert.

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

Erstellen Sie eine Bereitstellungskonfigurationsdatei mit den folgenden Inhalten.

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

Versuchen Sie zu implementieren.

$ 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

Eine Bereitstellung mit dem Namen "hellojavakubernetes" wurde erstellt, und es wurde auch ein Pod erstellt.

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

Suchen Sie die URL.

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

Greifen Sie auf die angezeigte URL zu スクリーンショット 2018-02-24 22.04.06.png

Es wurde korrekt angezeigt. Ich konnte weitermachen, ohne bisher hängen zu bleiben.

Anwendungsskalierung

Da es eine große Sache ist, werde ich versuchen, zu skalieren.

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

#Geben Sie Replikate an
$ kubectl scale --replicas=2 -f kubernetes-deployment.yaml 
deployment "hellojavakubernetes" scaled

#Die Anzahl der Bereitstellungen wurde auf 2 erhöht.
$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hellojavakubernetes   2         2         2            2           17h

Sie können sehen, dass die Anzahl der Pods auf zwei gestiegen ist.

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

Versuchen Sie als Nächstes, die Einstellungsdatei zu ändern. Ändern Sie die "Replikate" der oben erstellten "kubernetes-deploy.yaml" in "3".

#Einstellungen übernehmen
$ 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

Das konnte ich auch skalieren.

Aufräumen

Fertig

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

Es scheint, dass es noch viele Dinge zu untersuchen gibt, um es in der Produktion zu betreiben, aber ich hatte den Eindruck, dass Kubernetes selbst ziemlich vollständig ist.

Referenzseite

[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

Versuchen Sie, Spring Boot auf Kubernetes auszuführen
Versuchen Sie Spring Boot auf dem Mac
Spring Boot unter Microsoft Azure
Versuchen Sie es mit Spring Boot Security
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Erstellen einer Spring Boot-Entwicklungsumgebung in Vagrant
Spring Boot Umgebungskonstruktionsnotiz auf Mac
Versuchen Sie es mit Spring Boot mit VS-Code
Versuchen Sie, Kubernetes Job von Java aus auszuführen
Versuchen Sie Spring Boot 1 (Umgebungskonstruktion ~ Tomcat-Start)
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Versuchen Sie, ScalarDB unter WSL Ubuntu (Environment Construction) auszuführen.
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
SPRING BOOT Lernaufzeichnung 01
Frühlingsstiefel + Heroku Postgres
Probieren Sie DisplayLink unter Ubuntu 20.04 aus
Versuchen Sie, eine mit Quarkus erstellte App auf Heroku auszuführen
Schreiben von Frühlingsstiefel-Memos (1)
Probieren Sie OpenLiteSpeed unter CentOS8 aus
Erster Frühlingsstiefel (DI)
SPRING BOOT Lernprotokoll 02
Spring Boot2 Spickzettel
Spring Boot-Ausnahmebehandlung
Spring Boot Servlet-Zuordnung
Spring Boot Entwicklung-Entwicklungsumgebung-
Spring Boot-Lernverfahren
Spring Boot lernen [Anfang]
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
Schreiben von Spring Boot-Memos (2)
Versuchen Sie vorerst, Spring Cloud Config auszuführen
Spring Boot 2.2 Dokumentzusammenfassung
Probieren Sie gRPC im Spring Boot & Spring Cloud-Projekt (Mac OS) aus.
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Stellen Sie das Spring Boot-Projekt in XAMPP für Tomcat bereit
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Spring Boot Tutorials Themen
Mit Spring Boot herunterladen
Versuchen Sie es mit Spring JDBC
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Legen Sie den Kontextparameter in Spring Boot fest
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Aufgabenplan für das Spring Boot Tutorial
Spring 5 & Spring Boot 2 Praktisches Vorbereitungsverfahren
Beginnen Sie mit Spring Boot
Probieren Sie Docker unter Windows 10 Home aus
Hallo Welt mit Spring Boot!
Spring Boot 2 Multiprojekt mit Gradle
Führen Sie LIFF mit Spring Boot aus