Útmutató a tavaszi felhő Kuberneteshez

1. Áttekintés

Amikor mikroszolgáltatási megoldást építünk, a Spring Cloud és a Kubernetes egyaránt optimális megoldás, mivel komponenseket nyújtanak a leggyakoribb kihívások megoldásához. Ha azonban úgy döntünk, hogy Kubernetes-t választjuk megoldásunk fő tároló-kezelőjének és telepítési platformjának, akkor is használhatjuk a Spring Cloud érdekes szolgáltatásait, elsősorban a Spring Cloud Kubernetes projekt révén.

Ez a viszonylag új projekt kétségtelenül egyszerű integrációt biztosít a Kubernetes alkalmazással a Spring Boot alkalmazásokhoz. Indulás előtt hasznos lehet megvizsgálni, hogyan telepítsünk egy Spring Boot alkalmazást a Minikube-ba, egy helyi Kubernetes-környezetbe..

Ebben az oktatóanyagban:

  • Telepítse a Minikube-ot a helyi gépünkre
  • Készítsen mikroszolgáltatások architektúra-példáját két független Spring Boot alkalmazással, amelyek a REST-en keresztül kommunikálnak
  • Állítsa be az alkalmazást egy csomópontú fürtön a Minikube használatával
  • Telepítse az alkalmazást a YAML konfigurációs fájlok

2. Forgatókönyv

Példánkban azt az esetet használjuk, amikor az utazási irodák különféle ajánlatokat kínálnak az ügyfeleknek, akik időről időre megkérdezik az utazási irodák szolgáltatásait. Fel fogjuk használni, hogy bemutassuk:

  • szolgáltatás felfedezése a Tavaszi Felhő Kubernetesen keresztül
  • konfiguráció-menedzsment és a Kubernetes ConfigMaps és titkok injekciózása az alkalmazás hüvelyébe a Spring Cloud Kubernetes Config használatával
  • terhelés elosztás a Spring Cloud Kubernetes szalag használatával

3. Környezet beállítása

Először is nekünk kell telepítse a Minikube-ot a helyi gépünkre és előnyösen egy virtuális gép-illesztőprogram, például a VirtualBox. Javasoljuk, hogy a környezeti beállítások követése előtt tekintse át a Kubernetes-t és annak főbb jellemzőit.

Indítsuk el a helyi egycsomópontos Kubernetes-fürtöt:

minikube start --vm-driver = virtualbox

Ez a parancs létrehoz egy virtuális gépet, amely egy Minikube-fürtöt futtat a VirtualBox illesztőprogram segítségével. Az alapértelmezett kontextus a kubectl most lesz minikube. A kontextus közötti váltáshoz azonban a következőket használjuk:

kubectl config use-context minikube

A Minikube elindítása után megtehetjük csatlakozzon a Kubernetes irányítópultjához a naplók elérése és a szolgáltatásaink, podok, ConfigMaps és Titkok egyszerű figyelése:

minikube műszerfal 

3.1. Telepítés

Először is kapjuk meg példánkat a GitHub-tól.

Ezen a ponton vagy futtathatjuk az „deployment-travel-client.sh” parancsfájlt a szülő mappából, vagy pedig végrehajthatjuk az egyes utasításokat egyenként, hogy jól megértsük az eljárást:

### build the repository mvn clean install ### set docker env eval $ (minikube docker-env) ### build the docker images on minikube cd travel-agency-service docker build -t travel-agency-service. cd ../client-service docker build -t kliens-szolgáltatás. cd .. ### titkos és mongodb kubectl törlés -f utazási iroda-szolgáltatás / titkos.yaml kubectl törlés -f utazási iroda-szolgáltatás / mongo-telepítés.yaml kubectl létrehoz -f utazási iroda-szolgáltatás / titkos.yaml kubectl create -f utazási iroda-szolgáltatás / mongo-deployment.yaml ### utazási iroda-szolgáltatás kubectl töröl -f utazási iroda-szolgáltatás / utazási iroda-telepítés.yaml kubectl létrehoz -f utazási iroda-szolgáltatás / utazási ügynökség-telepítés.yaml ### kliens-szolgáltatás kubectl törlés configmap kliens-szolgáltatás kubectl törlés -f kliens-szolgáltatás / kliens-szolgáltatás-telepítés.yaml kubectl létrehozás -f kliens-szolgáltatás / kliens-konfiguráció. f kliens-szolgáltatás / kliens-szolgáltatás-telepítés.yaml # Ellenőrizze, hogy a hüvelyek futnak-e a kubectl get pods

4. Szolgáltatás felfedezése

Ez a projekt megvalósítást nyújt számunkra a ServiceDiscovery felület Kubernetesben. Mikroszolgáltatási környezetben általában több hüvelyk futtatják ugyanazt a szolgáltatást. A Kubernetes a szolgáltatást végpontok gyűjteményeként tárja fel amelyet egy ugyanazon Kubernetes-fürt podban futó Spring Boot alkalmazásából lehet letölteni és elérni.

Például a példánkban az utazási irodai szolgáltatás többszörözött példánya van, amelyet az ügyfélszolgálatunkról a címen érünk el // utazási iroda-szolgáltatás: 8080. Ez azonban belsőleg különböző podok elérését jelentené, mint pl utazási iroda-szolgáltatás-7c9cfff655-4hxnp.

A Spring Cloud Kubernetes szalag ezt a szolgáltatást használja a szolgáltatás különböző végpontjai közötti egyensúly betöltése érdekében.

Könnyen használhatjuk a Service Discovery szolgáltatást, ha hozzáadjuk a spring-cloud-starter-kubernetes függőséget az ügyfélalkalmazásunkhoz:

 org.springframework.cloud spring-cloud-starter-kubernetes 

Emellett hozzá kell tennünk @EnableDiscoveryClient és beadja a DiscoveryClient ba,-be ClientController használva @Autowired osztályunkban:

@SpringBootApplication @EnableDiscoveryClient public class Application {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}
@RestController public class ClientController {@Autowired private DiscoveryClient discoveryClient; }

5. ConfigMaps

Általában a mikroszolgáltatások valamilyen konfigurációkezelést igényelnek. Például a Spring Cloud alkalmazásokban egy Spring Cloud Config szervert használnánk.

Ezt azonban a Kubernetes által biztosított ConfigMaps használatával érhetjük el - feltéve, hogy csak nem érzékeny, titkosítatlan információkhoz kívánjuk használni. Alternatív megoldásként, ha a megosztani kívánt információk érzékenyek, akkor inkább a Titkok használatát kell választanunk.

Példánkban a ConfigMaps alkalmazást használjuk a ügyfélszolgálat Spring Boot alkalmazás. Hozzunk létre egy client-config.yaml fájl a. ConfigMap meghatározásához ügyfélszolgálat:

apiVersion: v1 by d fajta: ConfigMap metaadatok: név: kliens-szolgáltatás adatai: application.properties: | - bean.message = Újratöltés tesztelése! A háttérprogram üzenete:% s

Szolgáltatások:% s

Fontos, hogy a ConfigMap neve megegyezzen az alkalmazás nevével az „application.properties” fájlunkban meghatározottak szerint. Ebben az esetben az ügyfélszolgálat. Ezután létre kell hoznunk a ConfigMap alkalmazást ügyfélszolgálat a Kubernetesen:

kubectl create -f kliens-config.yaml

Most hozzunk létre egy konfigurációs osztályt ClientConfig a ... val @ Konfiguráció és @ConfigurationProperties és beadja a ClientController:

@Configuration @ConfigurationProperties (prefix = "bab") public class ClientConfig {private String message = "A háttérüzenet üzenete:% s

Szolgáltatások:% s "; // getters and setters}

@RestController public class ClientController {@Autowired private ClientConfig config; @GetMapping public String load () {return String.format (config.getMessage (), "", ""); }}

Ha nem adunk meg egy ConfigMap-ot, akkor várhatóan meglátjuk az alapértelmezett üzenetet, amelyet az osztályban állítottunk be. A ConfigMap létrehozásakor azonban ezt az alapértelmezett üzenetet felülírja az adott tulajdonság.

Ezenkívül minden alkalommal, amikor a ConfigMap frissítéséről döntünk, az oldalon lévő üzenet ennek megfelelően változik:

kubectl edit configmap kliens-szolgáltatás

6. Titkok

Nézzük meg, hogyan működnek a Titkok, ha megnézzük a példánkban szereplő MongoDB kapcsolati beállítások specifikációját. Környezeti változókat fogunk létrehozni a Kubernetesen, amelyeket aztán a Spring Boot alkalmazásba injektálunk.

6.1. Hozz létre egy titkot

Az első lépés a titok.yaml fájl, kódolja a felhasználónév és Jelszó nak nek 64. bázis:

apiVersion: v1 fajta: Titkos metaadatok: név: db-titkos adatok: felhasználónév: dXNlcg == jelszó: cDQ1NXcwcmQ =

Alkalmazzuk a Titkos konfigurációt a Kubernetes fürtön:

kubectl alkalmazni -f titkos.yaml

6.2. Hozzon létre egy MongoDB szolgáltatást

Most létre kell hoznunk a MongoDB szolgáltatást és a telepítést utazási iroda-telepítés.yaml fájl. Különösen a telepítési részben fogjuk használni a Titkot felhasználónév és Jelszó amit korábban definiáltunk:

apiVersion: extensions / v1beta1 fajta: Telepítési metaadatok: név: mongo spec: replikák: 1 sablon: metaadatok: feliratok: szolgáltatás: mongo név: mongodb-service spec: konténerek: - args: - mongod - --smallfiles kép: mongo: legújabb név: mongo env: - név: MONGO_INITDB_ROOT_USERNAME valueFrom: secretKeyRef: név: db-titkos kulcs: felhasználónév - név: MONGO_INITDB_ROOT_PASSWORD érték: From: secretKeyRef: név: db-titkos kulcs: jelszó

Alapértelmezés szerint a mongo: legújabb kép felhasználót hoz létre a felhasználónév és Jelszó nevű adatbázisban admin.

6.3. A MongoDB beállítása az utazási irodai szolgáltatáson

Fontos az alkalmazás tulajdonságainak frissítése az adatbázissal kapcsolatos információk hozzáadásához. Miközben szabadon megadhatjuk az adatbázis nevét admin, itt elrejtjük a legérzékenyebb információkat, például a felhasználónév és a Jelszó:

spring.cloud.kubernetes.reload.enabled = true spring.cloud.kubernetes.secrets.name = db-secret spring.data.mongodb.host = mongodb-service spring.data.mongodb.port = 27017 spring.data.mongodb. adatbázis = admin spring.data.mongodb.username = $ {MONGO_USERNAME} spring.data.mongodb.password = $ {MONGO_PASSWORD}

Most vessünk egy pillantást a mi utazási iroda-telepítés tulajdonságfájl a szolgáltatások és a telepítések frissítéséhez a felhasználónévvel és jelszóval, amelyre szükség van a mongodb-szolgálat.

Itt található a fájl megfelelő szakasza, a MongoDB kapcsolattal kapcsolatos részével:

env: - név: MONGO_USERNAME érték: innen: secretKeyRef: név: db-titkos kulcs: felhasználónév - név: MONGO_PASSWORD érték: innen: secretKeyRef: név: db-titkos kulcs: jelszó

7. Kommunikáció szalaggal

Mikroszolgáltatási környezetben általában szükség van azoknak a hüvelyeknek a listájára, ahol a szolgáltatásunkat megismételjük a terheléselosztás elvégzéséhez. Ezt a Spring Cloud Kubernetes Ribbon által biztosított mechanizmus segítségével lehet elérni. Ez a mechanizmus képes automatikusan felfedezi és eléri egy adott szolgáltatás összes végpontját, és ezt követően feltölti a szalagot ServerList a végpontokkal kapcsolatos információkkal.

Kezdjük azzal, hogy hozzáadjuk a tavasz-felhő-kezdő-kubernetes-szalag függőség a mi ügyfélszolgálat pom.xml fájl:

 org.springframework.cloud spring-cloud-starter-kubernetes-szalag 

A következő lépés a megjegyzés hozzáadása @RibbonClient a miénknek ügyfélszolgálat Alkalmazás:

@RibbonClient (név = "utazási iroda-szolgáltatás")

Amikor a végpontok listája fel van töltve, a Kubernetes kliens megkeresi az aktuális névtérben / projektben élő regisztrált végpontokat, amelyek megfelelnek a @RibbonClient annotáció.

Engedélyeznünk kell a szalag klienst az alkalmazás tulajdonságaiban is:

ribbon.http.client.enabled = true

8. További jellemzők

8.1. Hystrix

Hystrix segít egy hibatűrő és rugalmas alkalmazás kiépítésében. Fő célja a kudarc gyors és gyors helyreállítás.

Különösen a példánkban a Hystrix-et használjuk a megszakító mintázatának megvalósítására a kliens-szerver azzal, hogy a Spring Boot alkalmazásosztályt annotálta @EnableCircuitBreaker.

Ezenkívül a tartalék funkciót is használjuk a módszer feljegyzésével TravelAgencyService.getDeals () val vel @HystrixCommand (). Ez azt jelenti, hogy tartalék esetén a getFallBackName () hívásra kerül, és a „Fallback” üzenet érkezik:

@HystrixCommand (fallbackMethod = "getFallbackName", commandProperties = {@HystrixProperty (name = "végrehajtás.isolation.thread.timeoutInMilliseconds", value = "1000")}) public String getDeals () {return this.restTemplate.getForObject ("/ / utazási iroda-szolgáltatás: 8080 / ajánlatok ", String.osztály); } privát karakterlánc getFallbackName () {return "Fallback"; }

8.2. Pod Egészségügyi mutató

Kihasználhatjuk a Spring Boot előnyeit HealthIndicator és Spring Boot Actuator, hogy az egészséggel kapcsolatos információkat megismerhesse a felhasználó.

A Kubernetes egészségügyi mutató különösen a következőket írja elő:

  • hüvely neve
  • IP-cím
  • névtér
  • szolgáltatási számla
  • csomópont neve
  • egy olyan jelző, amely jelzi, hogy a Spring Boot alkalmazás belső vagy külső-e a Kubernetesen

9. Következtetés

Ebben a cikkben alapos áttekintést nyújtunk a Spring Cloud Kubernetes projektről.

Akkor miért használnánk? Ha a Kubernetesre, mint mikroszolgáltatási platformra gyökerezünk, de mégis értékeljük a Spring Cloud szolgáltatásait, akkor a Spring Cloud Kubernetes mindkét világ legjobbjait nyújtja számunkra.

A példa teljes forráskódja elérhető a GitHubon.