From 9eae8afaa624ce688f6be92162bdd7cc7a8e8d39 Mon Sep 17 00:00:00 2001 From: maciejgz Date: Thu, 5 Oct 2023 16:06:40 +0200 Subject: [PATCH] #11 all custom services deployed in the k8s - api gateway in k8s --- README.md | 11 +++- docker/db.yml | 2 +- docker/{init.sh => init_db_schema.sh} | 0 docker/start.bat | 6 +- docker/start.sh | 5 +- docker/start_3rd_party_components.bat | 5 ++ docker/start_3rd_party_components.sh | 4 ++ ms-api-gateway/k8s/configmap.yml | 8 +++ ms-api-gateway/k8s/deployment.yml | 35 ++++++++++ ms-api-gateway/k8s/service.yml | 14 ++++ .../src/main/resources/application-k8s.yml | 64 +++++++++++++++++++ ms-cms-service/k8s/deployment.yml | 2 +- ms-cms-service/k8s/service.yml | 2 +- ms-cms-service/pom.xml | 2 +- ms-stock-service/k8s/deployment.yml | 2 +- ms-stock-service/k8s/service.yml | 2 +- .../src/main/resources/application.properties | 4 +- 17 files changed, 149 insertions(+), 19 deletions(-) rename docker/{init.sh => init_db_schema.sh} (100%) create mode 100644 docker/start_3rd_party_components.bat create mode 100644 docker/start_3rd_party_components.sh create mode 100644 ms-api-gateway/k8s/configmap.yml create mode 100644 ms-api-gateway/k8s/deployment.yml create mode 100644 ms-api-gateway/k8s/service.yml create mode 100644 ms-api-gateway/src/main/resources/application-k8s.yml diff --git a/README.md b/README.md index 0e8c9f2..4285498 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ Case study of the search problem in the microservice environment when data is st - [x] Dockerize projects - [x] Run projects locally - [x] Run projects in Docker Compose -- [ ] Run all projects in Kubernetes +- [x] Run all projects in Kubernetes - [ ] Run all the 3rd party services in K8S - [ ] Add distributed tracing with Sleuth and Zipkin -- [ ] Enable scaling of the services with load balancing over API Gateway +- [x] Enable scaling of the services with load balancing over API Gateway - [ ] Run Spring Boot Admin in local environment - [ ] Enable K8S ingress to make app available over the internet - [ ] Deploy all the services to the cloud @@ -123,7 +123,7 @@ Linux: ``` ### Kubernetes -K8S scripts shold be runned in the following order from the project root directory: +K8S scripts should be run in the following order from the project root directory: - [k8s](k8s) - directory with global configuration: - special role and privileges - ingress @@ -137,6 +137,11 @@ kubectl apply -f k8s kubectl apply -f ms-admin/k8s ``` +- [ms-api-gateway](ms-api-gateway) - directory with configuration for the admin module [ms-api-gateway](ms-api-gateway/k8s): +```docker +kubectl apply -f ms-api-gateway/k8s +``` + - [ms-cms-service](ms-cms-service) - directory with configuration for the cms module [ms-cms-service](ms-cms-service/k8s): ```docker kubectl apply -f ms-cms-service/k8s diff --git a/docker/db.yml b/docker/db.yml index a47ecf4..262af50 100644 --- a/docker/db.yml +++ b/docker/db.yml @@ -11,7 +11,7 @@ services: - "5432:5432" volumes: - /var/lib/docker/volumes/microservice-search/postgres:/var/lib/postgresql/data - - ./init.sh:/docker-entrypoint-initdb.d/init.sh + - ./init_db_schema.sh:/docker-entrypoint-initdb.d/init.sh networks: - ms-network diff --git a/docker/init.sh b/docker/init_db_schema.sh similarity index 100% rename from docker/init.sh rename to docker/init_db_schema.sh diff --git a/docker/start.bat b/docker/start.bat index 31ed900..ecb777c 100644 --- a/docker/start.bat +++ b/docker/start.bat @@ -1,10 +1,6 @@ @echo off :: docker compose up all sh files in the docker directory -set COMPOSE_PROJECT_NAME=microservice-search -docker-compose -f db.yml -p %COMPOSE_PROJECT_NAME% up -d -docker-compose -f mongodb.yml -p %COMPOSE_PROJECT_NAME% up -d -docker-compose -f kafka.yml -p %COMPOSE_PROJECT_NAME% up -d -docker-compose -f redis.yml -p %COMPOSE_PROJECT_NAME% up -d +call start_3rd_party_components.bat set /a num_replicas=3 set /a delay_seconds=5 diff --git a/docker/start.sh b/docker/start.sh index 02ef1e9..5edb923 100644 --- a/docker/start.sh +++ b/docker/start.sh @@ -1,8 +1,5 @@ ## docker compose up all sh files in the docker directory -docker-compose -f db.yml -p microservice-search up -d -docker-compose -f mongodb.yml -p microservice-search up -d -docker-compose -f kafka.yml -p microservice-search up -d -docker-compose -f redis.yml -p microservice-search up -d +./start_3rd_party_components.sh for i in {1..3}; do docker-compose -f app.yml -p %COMPOSE_PROJECT_NAME% up -d --scale ms-cms-service=$i diff --git a/docker/start_3rd_party_components.bat b/docker/start_3rd_party_components.bat new file mode 100644 index 0000000..992ab49 --- /dev/null +++ b/docker/start_3rd_party_components.bat @@ -0,0 +1,5 @@ +set COMPOSE_PROJECT_NAME=microservice-search +docker-compose -f db.yml -p %COMPOSE_PROJECT_NAME% up -d +docker-compose -f mongodb.yml -p %COMPOSE_PROJECT_NAME% up -d +docker-compose -f kafka.yml -p %COMPOSE_PROJECT_NAME% up -d +docker-compose -f redis.yml -p %COMPOSE_PROJECT_NAME% up -d \ No newline at end of file diff --git a/docker/start_3rd_party_components.sh b/docker/start_3rd_party_components.sh new file mode 100644 index 0000000..67d533d --- /dev/null +++ b/docker/start_3rd_party_components.sh @@ -0,0 +1,4 @@ +docker-compose -f db.yml -p microservice-search up -d +docker-compose -f mongodb.yml -p microservice-search up -d +docker-compose -f kafka.yml -p microservice-search up -d +docker-compose -f redis.yml -p microservice-search up -d \ No newline at end of file diff --git a/ms-api-gateway/k8s/configmap.yml b/ms-api-gateway/k8s/configmap.yml new file mode 100644 index 0000000..f227ff5 --- /dev/null +++ b/ms-api-gateway/k8s/configmap.yml @@ -0,0 +1,8 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: ms-api-gateway +data: + DATA_REDIS_HOST: "192.168.0.129" + application-k8s.properties: |- + spring.profiles.active=k8s \ No newline at end of file diff --git a/ms-api-gateway/k8s/deployment.yml b/ms-api-gateway/k8s/deployment.yml new file mode 100644 index 0000000..bd784a8 --- /dev/null +++ b/ms-api-gateway/k8s/deployment.yml @@ -0,0 +1,35 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ms-api-gateway + labels: + app: ms-api-gateway +spec: + replicas: 1 + selector: + matchLabels: + app: ms-api-gateway + template: + metadata: + labels: + app: ms-api-gateway + spec: + serviceAccountName: spring-cloud-kubernetes + containers: + - name: ms-api-gateway + image: ms-api-gateway:latest + ports: + - containerPort: 8080 + imagePullPolicy: Never + env: + - name: SPRING_CLOUD_BOOTSTRAP_ENABLED + value: "true" + - name: SPRING_CLOUD_KUBERNETES_SECRETS_ENABLEAPI + value: "true" + - name: SPRING_PROFILES_ACTIVE + value: k8s + - name: DATA_REDIS_HOST + valueFrom: + configMapKeyRef: + name: ms-api-gateway + key: DATA_REDIS_HOST \ No newline at end of file diff --git a/ms-api-gateway/k8s/service.yml b/ms-api-gateway/k8s/service.yml new file mode 100644 index 0000000..e66aece --- /dev/null +++ b/ms-api-gateway/k8s/service.yml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: ms-api-gateway + labels: + app: ms-api-gateway + spring-boot: "true" +spec: + ports: + - port: 8080 + protocol: TCP + selector: + app: ms-api-gateway + type: LoadBalancer \ No newline at end of file diff --git a/ms-api-gateway/src/main/resources/application-k8s.yml b/ms-api-gateway/src/main/resources/application-k8s.yml new file mode 100644 index 0000000..a5eca11 --- /dev/null +++ b/ms-api-gateway/src/main/resources/application-k8s.yml @@ -0,0 +1,64 @@ +server: + port: 8080 + +management: + endpoint: + gateway: + enabled: true + endpoints: + web: + exposure: + include: "*" + +## API Gateway routes +spring: + cloud: + gateway: + routes: + - id: stock-service-api-1-route + uri: http://ms-stock-service:8091 + predicates: + - Path=/api/stockProduct/** + - Weight=stock-api-group-1, 5 + filters: + - RewritePath=/api/stockProduct/(?.*), /api/v1/stockProduct/${segment} + - name: CircuitBreaker + args: + name: stock-api-group-1-cb + fallbackUri: forward:/fallback/stock + - id: stock-service-api-2-route + uri: http://ms-stock-service:8091 + predicates: + - Path=/api/stockProduct/** + - Weight=stock-api-group-1, 5 + filters: + - RewritePath=/api/stockProduct/(?.*), /api/v2/stockProduct/${segment} + - name: CircuitBreaker + args: + name: stock-api-group-1-cb + fallbackUri: forward:/fallback/stock + - id: cms-service-api-1-route + uri: http://ms-cms-service:8100 + predicates: + - Path=/api/cmsProduct/** + - Weight=cms-api-group-1, 5 + filters: + - RewritePath=/api/cmsProduct/(?.*), /api/v1/cmsProduct/${segment} + - name: CircuitBreaker + args: + name: cms-api-group-1-cb + fallbackUri: forward:/fallback/cms + - id: cms-service-api-2-route + uri: http://ms-cms-service:8100 + predicates: + - Path=/api/cmsProduct/** + - Weight=cms-api-group-1, 5 + filters: + - RewritePath=/api/cmsProduct/(?.*), /api/v2/cmsProduct/${segment} + - name: CircuitBreaker + args: + name: cms-api-group-1-cb + fallbackUri: forward:/fallback/cms + data: + redis: + host: ${DATA_REDIS_HOST} \ No newline at end of file diff --git a/ms-cms-service/k8s/deployment.yml b/ms-cms-service/k8s/deployment.yml index ed25c9d..447eff7 100644 --- a/ms-cms-service/k8s/deployment.yml +++ b/ms-cms-service/k8s/deployment.yml @@ -5,7 +5,7 @@ metadata: labels: app: ms-cms-service spec: - replicas: 1 + replicas: 3 selector: matchLabels: app: ms-cms-service diff --git a/ms-cms-service/k8s/service.yml b/ms-cms-service/k8s/service.yml index 390cecd..1608787 100644 --- a/ms-cms-service/k8s/service.yml +++ b/ms-cms-service/k8s/service.yml @@ -11,4 +11,4 @@ spec: protocol: TCP selector: app: ms-cms-service - type: ClusterIP \ No newline at end of file + type: LoadBalancer \ No newline at end of file diff --git a/ms-cms-service/pom.xml b/ms-cms-service/pom.xml index 3b414e6..2010a5e 100644 --- a/ms-cms-service/pom.xml +++ b/ms-cms-service/pom.xml @@ -60,7 +60,7 @@ net.datafaker datafaker - 1.7.0 + 1.8.1 org.projectlombok diff --git a/ms-stock-service/k8s/deployment.yml b/ms-stock-service/k8s/deployment.yml index 99b72b0..a4e6979 100644 --- a/ms-stock-service/k8s/deployment.yml +++ b/ms-stock-service/k8s/deployment.yml @@ -5,7 +5,7 @@ metadata: labels: app: ms-stock-service spec: - replicas: 1 + replicas: 3 selector: matchLabels: app: ms-stock-service diff --git a/ms-stock-service/k8s/service.yml b/ms-stock-service/k8s/service.yml index 143ca02..90b7c3f 100644 --- a/ms-stock-service/k8s/service.yml +++ b/ms-stock-service/k8s/service.yml @@ -11,4 +11,4 @@ spec: protocol: TCP selector: app: ms-stock-service - type: ClusterIP \ No newline at end of file + type: LoadBalancer \ No newline at end of file diff --git a/ms-stock-service/src/main/resources/application.properties b/ms-stock-service/src/main/resources/application.properties index ea42587..cb6fd92 100644 --- a/ms-stock-service/src/main/resources/application.properties +++ b/ms-stock-service/src/main/resources/application.properties @@ -21,4 +21,6 @@ spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=stock-service spring.kafka.consumer.properties.spring.json.trusted.packages=* spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer \ No newline at end of file +spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer + +management.endpoints.web.exposure.include=* \ No newline at end of file