From 27df445fc20f048c1c31e429f6c29075119fe454 Mon Sep 17 00:00:00 2001 From: askmeegs Date: Tue, 14 May 2019 10:02:35 -0400 Subject: [PATCH 01/12] Release v0.1.1 --- release/istio-manifests.yaml | 15 ---------- release/kubernetes-manifests.yaml | 48 ++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/release/istio-manifests.yaml b/release/istio-manifests.yaml index 284131d..57d669d 100644 --- a/release/istio-manifests.yaml +++ b/release/istio-manifests.yaml @@ -48,21 +48,6 @@ spec: number: 80 --- apiVersion: networking.istio.io/v1alpha3 -kind: ServiceEntry -metadata: - name: currency-provider-external -spec: - hosts: - - www.ecb.europa.eu - ports: - - number: 80 - name: http - protocol: HTTP - - number: 443 - name: https - protocol: HTTPS ---- -apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: frontend diff --git a/release/kubernetes-manifests.yaml b/release/kubernetes-manifests.yaml index 6fd20cd..64c1b10 100644 --- a/release/kubernetes-manifests.yaml +++ b/release/kubernetes-manifests.yaml @@ -32,9 +32,12 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/emailservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/emailservice:v0.1.1 ports: - containerPort: 8080 + env: + - name: PORT + value: "8080" readinessProbe: periodSeconds: 5 exec: @@ -43,6 +46,9 @@ spec: periodSeconds: 5 exec: command: ["/bin/grpc_health_probe", "-addr=:8080"] + env: + - name: ENABLE_PROFILER + value: "0" resources: requests: cpu: 100m @@ -79,7 +85,7 @@ spec: spec: containers: - name: server - image: gcr.io/google-samples/microservices-demo/checkoutservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/checkoutservice:v0.1.1 ports: - containerPort: 5050 readinessProbe: @@ -89,6 +95,8 @@ spec: exec: command: ["/bin/grpc_health_probe", "-addr=:5050"] env: + - name: PORT + value: "5050" - name: PRODUCT_CATALOG_SERVICE_ADDR value: "productcatalogservice:3550" - name: SHIPPING_SERVICE_ADDR @@ -140,7 +148,7 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/recommendationservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/recommendationservice:v0.1.1 ports: - containerPort: 8080 readinessProbe: @@ -152,8 +160,12 @@ spec: exec: command: ["/bin/grpc_health_probe", "-addr=:8080"] env: + - name: PORT + value: "8080" - name: PRODUCT_CATALOG_SERVICE_ADDR value: "productcatalogservice:3550" + - name: ENABLE_PROFILER + value: "0" resources: requests: cpu: 100m @@ -190,7 +202,7 @@ spec: spec: containers: - name: server - image: gcr.io/google-samples/microservices-demo/frontend:v0.1.0 + image: gcr.io/google-samples/microservices-demo/frontend:v0.1.1 ports: - containerPort: 8080 readinessProbe: @@ -210,6 +222,8 @@ spec: - name: "Cookie" value: "shop_session-id=x-liveness-probe" env: + - name: PORT + value: "8080" - name: PRODUCT_CATALOG_SERVICE_ADDR value: "productcatalogservice:3550" - name: CURRENCY_SERVICE_ADDR @@ -276,9 +290,12 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/paymentservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/paymentservice:v0.1.1 ports: - containerPort: 50051 + env: + - name: PORT + value: "50051" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:50051"] @@ -322,9 +339,12 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/productcatalogservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/productcatalogservice:v0.1.1 ports: - containerPort: 3550 + env: + - name: PORT + value: "3550" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:3550"] @@ -371,7 +391,7 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/cartservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/cartservice:v0.1.1 ports: - containerPort: 7070 env: @@ -440,7 +460,7 @@ spec: value: "frontend:80" containers: - name: main - image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.0 + image: gcr.io/google-samples/microservices-demo/loadgenerator:v0.1.1 env: - name: FRONTEND_ADDR value: "frontend:80" @@ -470,10 +490,13 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/currencyservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/currencyservice:v0.1.1 ports: - name: grpc containerPort: 7000 + env: + - name: PORT + value: "7000" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:7000"] @@ -516,9 +539,12 @@ spec: spec: containers: - name: server - image: gcr.io/google-samples/microservices-demo/shippingservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/shippingservice:v0.1.1 ports: - containerPort: 50051 + env: + - name: PORT + value: "50051" readinessProbe: periodSeconds: 5 exec: @@ -619,7 +645,7 @@ spec: terminationGracePeriodSeconds: 5 containers: - name: server - image: gcr.io/google-samples/microservices-demo/adservice:v0.1.0 + image: gcr.io/google-samples/microservices-demo/adservice:v0.1.1 ports: - containerPort: 9555 env: From ce03eb3c36ae712cd378ad7c3dfc6b059363b8d7 Mon Sep 17 00:00:00 2001 From: Dinesh Nagar Date: Wed, 22 May 2019 13:46:09 +0530 Subject: [PATCH 02/12] removed left-pad module (#218) --- src/currencyservice/client.js | 2 +- src/currencyservice/package.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/currencyservice/client.js b/src/currencyservice/client.js index f381dc8..51e7f23 100644 --- a/src/currencyservice/client.js +++ b/src/currencyservice/client.js @@ -46,7 +46,7 @@ const request = { }; function _moneyToString (m) { - return `${m.units}.${leftPad(m.nanos, 9, '0')} ${m.currency_code}`; + return `${m.units}.${m.nanos.toString().padStart(9,'0')} ${m.currency_code}`; } client.getSupportedCurrencies({}, (err, response) => { diff --git a/src/currencyservice/package.json b/src/currencyservice/package.json index 7a21752..3f45984 100644 --- a/src/currencyservice/package.json +++ b/src/currencyservice/package.json @@ -16,7 +16,6 @@ "async": "^1.5.2", "google-protobuf": "^3.0.0", "grpc": "^1.0.0", - "left-pad": "^1.3.0", "pino": "^5.6.2", "request": "^2.87.0", "xml2js": "^0.4.19" From dc98b16a4df81dd4678a3771941f6fe6a73517d3 Mon Sep 17 00:00:00 2001 From: Steven Dake Date: Mon, 27 May 2019 00:35:56 +0200 Subject: [PATCH 03/12] Add a demo of Hipster Shop + Istio across 3 clouds (#219) Hipster Shop was demonstrated in front of rougly 700 individuals at Kubecon EU. The demo itself was shown on 3 cloud providers (Azure, Google, On-prem). The full speaking engagement recording: https://www.youtube.com/watch?v=-t2BfT59zJA --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d375fb..d59e7e5 100644 --- a/README.md +++ b/README.md @@ -272,6 +272,7 @@ resources. - [Day 3 – Keynote](https://youtu.be/JQPOPV_VH5w?t=815) showing Stackdriver APM (Tracing, Code Search, Profiler, Google Cloud Build) - [Introduction to Service Management with Istio](https://www.youtube.com/watch?v=wCJrdKdD6UM&feature=youtu.be&t=586) +- [KubeCon EU 2019 - Reinventing Networking: A Deep Dive into Istio's Multicluster Gateways - Steve Dake, Independent](https://youtu.be/-t2BfT59zJA?t=982) --- From 1c057fcbd84a838de46d2d9a31269a298f56422e Mon Sep 17 00:00:00 2001 From: Yoshi Yamaguchi <145104+ymotongpoo@users.noreply.github.com> Date: Thu, 13 Jun 2019 15:46:33 +0800 Subject: [PATCH 04/12] aligning function name and log message to the official product name (#229) * log: change log format to JSON payload for better log in Stackdriver change the log format in Go written service from text payload to JSON payload using 3rd party logging library (logrus). https://cloud.google.com/logging/docs/structured-logging https://github.com/sirupsen/logrus/blob/33a1e118e113c7d1dd24a80f80670864cd598519/json_formatter.go#L40-L49 Effected services are frontend, productcatalogservice, checkoutservice, and shippinservice. Also change target container registry and locust scenario for testing. * revert kubernetes manifests to point to the original container registry URLs * revert skaffold.yaml to point to the original registry * loadgenerator: revert locust settings * align all function names and messages to the official product name "Stackdriver" --- .../src/main/java/hipstershop/AdService.java | 4 ++-- src/checkoutservice/main.go | 16 ++++++++-------- src/frontend/main.go | 14 +++++++------- src/productcatalogservice/server.go | 18 +++++++++--------- src/shippingservice/main.go | 18 +++++++++--------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/adservice/src/main/java/hipstershop/AdService.java b/src/adservice/src/main/java/hipstershop/AdService.java index 3c63c98..4817e1b 100644 --- a/src/adservice/src/main/java/hipstershop/AdService.java +++ b/src/adservice/src/main/java/hipstershop/AdService.java @@ -214,7 +214,7 @@ public final class AdService { } private static void initStackdriver() { - logger.info("Initialize StackDriver"); + logger.info("Initialize Stackdriver"); long sleepTime = 10; /* seconds */ int maxAttempts = 5; @@ -252,7 +252,7 @@ public final class AdService { } } } - logger.info("StackDriver initialization complete."); + logger.info("Stackdriver initialization complete."); } private static void initJaeger() { diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index fdf1c83..42a6783 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -131,7 +131,7 @@ func initStats(exporter *stackdriver.Exporter) { } } -func initStackDriverTracing() { +func initStackdriverTracing() { // TODO(ahmetb) this method is duplicated in other microservices using Go // since they are not sharing packages. for i := 1; i <= 3; i++ { @@ -140,22 +140,22 @@ func initStackDriverTracing() { log.Infof("failed to initialize stackdriver exporter: %+v", err) } else { trace.RegisterExporter(exporter) - log.Info("registered stackdriver tracing") + log.Info("registered Stackdriver tracing") // Register the views to collect server stats. initStats(exporter) return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver exporter", d) + log.Infof("sleeping %v to retry initializing Stackdriver exporter", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver exporter after retrying, giving up") + log.Warn("could not initialize Stackdriver exporter after retrying, giving up") } func initTracing() { initJaegerTracing() - initStackDriverTracing() + initStackdriverTracing() } func initProfiling(service, version string) { @@ -170,14 +170,14 @@ func initProfiling(service, version string) { }); err != nil { log.Warnf("failed to start profiler: %+v", err) } else { - log.Info("started stackdriver profiler") + log.Info("started Stackdriver profiler") return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver profiler", d) + log.Infof("sleeping %v to retry initializing Stackdriver profiler", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver profiler after retrying, giving up") + log.Warn("could not initialize Stackdriver profiler after retrying, giving up") } func mustMapEnv(target *string, envKey string) { diff --git a/src/frontend/main.go b/src/frontend/main.go index a6bccda..5ba9577 100644 --- a/src/frontend/main.go +++ b/src/frontend/main.go @@ -191,20 +191,20 @@ func initStackdriverTracing(log logrus.FieldLogger) { // log.Warnf is used since there are multiple backends (stackdriver & jaeger) // to store the traces. In production setup most likely you would use only one backend. // In that case you should use log.Fatalf. - log.Warnf("failed to initialize stackdriver exporter: %+v", err) + log.Warnf("failed to initialize Stackdriver exporter: %+v", err) } else { trace.RegisterExporter(exporter) - log.Info("registered stackdriver tracing") + log.Info("registered Stackdriver tracing") // Register the views to collect server stats. initStats(log, exporter) return } d := time.Second * 20 * time.Duration(i) - log.Debugf("sleeping %v to retry initializing stackdriver exporter", d) + log.Debugf("sleeping %v to retry initializing Stackdriver exporter", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver exporter after retrying, giving up") + log.Warn("could not initialize Stackdriver exporter after retrying, giving up") } func initTracing(log logrus.FieldLogger) { @@ -232,14 +232,14 @@ func initProfiling(log logrus.FieldLogger, service, version string) { }); err != nil { log.Warnf("warn: failed to start profiler: %+v", err) } else { - log.Info("started stackdriver profiler") + log.Info("started Stackdriver profiler") return } d := time.Second * 10 * time.Duration(i) - log.Debugf("sleeping %v to retry initializing stackdriver profiler", d) + log.Debugf("sleeping %v to retry initializing Stackdriver profiler", d) time.Sleep(d) } - log.Warn("warning: could not initialize stackdriver profiler after retrying, giving up") + log.Warn("warning: could not initialize Stackdriver profiler after retrying, giving up") } func mustMapEnv(target *string, envKey string) { diff --git a/src/productcatalogservice/server.go b/src/productcatalogservice/server.go index 60b0f3a..c76eafc 100644 --- a/src/productcatalogservice/server.go +++ b/src/productcatalogservice/server.go @@ -158,32 +158,32 @@ func initStats(exporter *stackdriver.Exporter) { } } -func initStackDriverTracing() { +func initStackdriverTracing() { // TODO(ahmetb) this method is duplicated in other microservices using Go // since they are not sharing packages. for i := 1; i <= 3; i++ { exporter, err := stackdriver.NewExporter(stackdriver.Options{}) if err != nil { - log.Warnf("failed to initialize stackdriver exporter: %+v", err) + log.Warnf("failed to initialize Stackdriver exporter: %+v", err) } else { trace.RegisterExporter(exporter) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) - log.Info("registered stackdriver tracing") + log.Info("registered Stackdriver tracing") // Register the views to collect server stats. initStats(exporter) return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver exporter", d) + log.Infof("sleeping %v to retry initializing Stackdriver exporter", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver exporter after retrying, giving up") + log.Warn("could not initialize Stackdriver exporter after retrying, giving up") } func initTracing() { initJaegerTracing() - initStackDriverTracing() + initStackdriverTracing() } func initProfiling(service, version string) { @@ -198,14 +198,14 @@ func initProfiling(service, version string) { }); err != nil { log.Warnf("failed to start profiler: %+v", err) } else { - log.Info("started stackdriver profiler") + log.Info("started Stackdriver profiler") return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver profiler", d) + log.Infof("sleeping %v to retry initializing Stackdriver profiler", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver profiler after retrying, giving up") + log.Warn("could not initialize Stackdriver profiler after retrying, giving up") } type productCatalog struct{} diff --git a/src/shippingservice/main.go b/src/shippingservice/main.go index 6360cd8..a203318 100644 --- a/src/shippingservice/main.go +++ b/src/shippingservice/main.go @@ -161,32 +161,32 @@ func initStats(exporter *stackdriver.Exporter) { } } -func initStackDriverTracing() { +func initStackdriverTracing() { // TODO(ahmetb) this method is duplicated in other microservices using Go // since they are not sharing packages. for i := 1; i <= 3; i++ { exporter, err := stackdriver.NewExporter(stackdriver.Options{}) if err != nil { - log.Warnf("failed to initialize stackdriver exporter: %+v", err) + log.Warnf("failed to initialize Stackdriver exporter: %+v", err) } else { trace.RegisterExporter(exporter) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) - log.Info("registered stackdriver tracing") + log.Info("registered Stackdriver tracing") // Register the views to collect server stats. initStats(exporter) return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver exporter", d) + log.Infof("sleeping %v to retry initializing Stackdriver exporter", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver exporter after retrying, giving up") + log.Warn("could not initialize Stackdriver exporter after retrying, giving up") } func initTracing() { initJaegerTracing() - initStackDriverTracing() + initStackdriverTracing() } func initProfiling(service, version string) { @@ -201,12 +201,12 @@ func initProfiling(service, version string) { }); err != nil { log.Warnf("failed to start profiler: %+v", err) } else { - log.Info("started stackdriver profiler") + log.Info("started Stackdriver profiler") return } d := time.Second * 10 * time.Duration(i) - log.Infof("sleeping %v to retry initializing stackdriver profiler", d) + log.Infof("sleeping %v to retry initializing Stackdriver profiler", d) time.Sleep(d) } - log.Warn("could not initialize stackdriver profiler after retrying, giving up") + log.Warn("could not initialize Stackdriver profiler after retrying, giving up") } From 0b5c802e660dc3d5e31274aa5b63a396776fda9b Mon Sep 17 00:00:00 2001 From: asamanta Date: Mon, 17 Jun 2019 15:06:57 -0400 Subject: [PATCH 05/12] add revision history --- kubernetes-manifests/adservice.yaml | 1 + kubernetes-manifests/cartservice.yaml | 1 + kubernetes-manifests/checkoutservice.yaml | 1 + kubernetes-manifests/currencyservice.yaml | 1 + kubernetes-manifests/emailservice.yaml | 1 + kubernetes-manifests/frontend.yaml | 1 + kubernetes-manifests/loadgenerator.yaml | 1 + kubernetes-manifests/paymentservice.yaml | 1 + kubernetes-manifests/productcatalogservice.yaml | 1 + kubernetes-manifests/recommendationservice.yaml | 1 + kubernetes-manifests/redis.yaml | 1 + kubernetes-manifests/shippingservice.yaml | 1 + 12 files changed, 12 insertions(+) diff --git a/kubernetes-manifests/adservice.yaml b/kubernetes-manifests/adservice.yaml index 47f14a6..2f5e67e 100644 --- a/kubernetes-manifests/adservice.yaml +++ b/kubernetes-manifests/adservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: adservice spec: + revisionHistoryLimit: 1 replicas: 5 selector: matchLabels: diff --git a/kubernetes-manifests/cartservice.yaml b/kubernetes-manifests/cartservice.yaml index fcfe0f5..e8a5a52 100644 --- a/kubernetes-manifests/cartservice.yaml +++ b/kubernetes-manifests/cartservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: cartservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: cartservice diff --git a/kubernetes-manifests/checkoutservice.yaml b/kubernetes-manifests/checkoutservice.yaml index 501210a..c5c5bde 100644 --- a/kubernetes-manifests/checkoutservice.yaml +++ b/kubernetes-manifests/checkoutservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: checkoutservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: checkoutservice diff --git a/kubernetes-manifests/currencyservice.yaml b/kubernetes-manifests/currencyservice.yaml index 6d1b21a..b185721 100644 --- a/kubernetes-manifests/currencyservice.yaml +++ b/kubernetes-manifests/currencyservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: currencyservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: currencyservice diff --git a/kubernetes-manifests/emailservice.yaml b/kubernetes-manifests/emailservice.yaml index 2ae3823..67c7010 100644 --- a/kubernetes-manifests/emailservice.yaml +++ b/kubernetes-manifests/emailservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: emailservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: emailservice diff --git a/kubernetes-manifests/frontend.yaml b/kubernetes-manifests/frontend.yaml index 4cea9bc..c72f63b 100644 --- a/kubernetes-manifests/frontend.yaml +++ b/kubernetes-manifests/frontend.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: frontend-a spec: + revisionHistoryLimit: 1 selector: matchLabels: app: frontend diff --git a/kubernetes-manifests/loadgenerator.yaml b/kubernetes-manifests/loadgenerator.yaml index 3385337..f08e649 100644 --- a/kubernetes-manifests/loadgenerator.yaml +++ b/kubernetes-manifests/loadgenerator.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: loadgenerator spec: + revisionHistoryLimit: 1 selector: matchLabels: app: loadgenerator diff --git a/kubernetes-manifests/paymentservice.yaml b/kubernetes-manifests/paymentservice.yaml index fa62c08..15685b2 100644 --- a/kubernetes-manifests/paymentservice.yaml +++ b/kubernetes-manifests/paymentservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: paymentservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: paymentservice diff --git a/kubernetes-manifests/productcatalogservice.yaml b/kubernetes-manifests/productcatalogservice.yaml index b175856..0f8fd37 100644 --- a/kubernetes-manifests/productcatalogservice.yaml +++ b/kubernetes-manifests/productcatalogservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: productcatalogservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: productcatalogservice diff --git a/kubernetes-manifests/recommendationservice.yaml b/kubernetes-manifests/recommendationservice.yaml index 9a5aee3..4d29cbc 100644 --- a/kubernetes-manifests/recommendationservice.yaml +++ b/kubernetes-manifests/recommendationservice.yaml @@ -99,6 +99,7 @@ spec: limits: cpu: 200m memory: 450Mi + revisionHistoryLimit: 1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService diff --git a/kubernetes-manifests/redis.yaml b/kubernetes-manifests/redis.yaml index b67649b..bb0d2e4 100644 --- a/kubernetes-manifests/redis.yaml +++ b/kubernetes-manifests/redis.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: redis-cart spec: + revisionHistoryLimit: 1 selector: matchLabels: app: redis-cart diff --git a/kubernetes-manifests/shippingservice.yaml b/kubernetes-manifests/shippingservice.yaml index d4049ad..8b3b780 100644 --- a/kubernetes-manifests/shippingservice.yaml +++ b/kubernetes-manifests/shippingservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: shippingservice spec: + revisionHistoryLimit: 1 selector: matchLabels: app: shippingservice From 6c890dfe6743d63c247067f90a198887b2129577 Mon Sep 17 00:00:00 2001 From: asamanta Date: Tue, 18 Jun 2019 13:37:21 -0400 Subject: [PATCH 06/12] add revision history to missed deployments --- kubernetes-manifests/frontend.yaml | 1 + kubernetes-manifests/recommendationservice.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/kubernetes-manifests/frontend.yaml b/kubernetes-manifests/frontend.yaml index c72f63b..2662aa6 100644 --- a/kubernetes-manifests/frontend.yaml +++ b/kubernetes-manifests/frontend.yaml @@ -81,6 +81,7 @@ kind: Deployment metadata: name: frontend-b spec: + revisionHistoryLimit: 1 selector: matchLabels: app: frontend diff --git a/kubernetes-manifests/recommendationservice.yaml b/kubernetes-manifests/recommendationservice.yaml index 4d29cbc..8c49c84 100644 --- a/kubernetes-manifests/recommendationservice.yaml +++ b/kubernetes-manifests/recommendationservice.yaml @@ -17,6 +17,7 @@ kind: Deployment metadata: name: recommendationservice-v1 spec: + revisionHistoryLimit: 1 selector: matchLabels: app: recommendationservice From cc5943cac968f3248609e608cad45661e096354d Mon Sep 17 00:00:00 2001 From: asamanta Date: Mon, 1 Jul 2019 14:46:13 -0400 Subject: [PATCH 07/12] Adding a cron job and a new workload for it. --- src/pingjob/Dockerfile | 18 ++++++++ src/pingjob/pinger.py | 86 ++++++++++++++++++++++++++++++++++++ src/pingjob/pinger.sh | 27 +++++++++++ src/pingjob/requirements.in | 1 + src/pingjob/requirements.txt | 11 +++++ 5 files changed, 143 insertions(+) create mode 100644 src/pingjob/Dockerfile create mode 100644 src/pingjob/pinger.py create mode 100755 src/pingjob/pinger.sh create mode 100644 src/pingjob/requirements.in create mode 100644 src/pingjob/requirements.txt diff --git a/src/pingjob/Dockerfile b/src/pingjob/Dockerfile new file mode 100644 index 0000000..4942b0e --- /dev/null +++ b/src/pingjob/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3-slim as base + +FROM base as builder + +RUN apt-get -qq update \ + && apt-get install -y --no-install-recommends \ + g++ + +COPY requirements.txt . + +RUN pip install --install-option="--prefix=/install" -r requirements.txt + +FROM base +COPY --from=builder /install /usr/local + +COPY . . +ENTRYPOINT ["./pinger.sh"] + diff --git a/src/pingjob/pinger.py b/src/pingjob/pinger.py new file mode 100644 index 0000000..fb9b8e7 --- /dev/null +++ b/src/pingjob/pinger.py @@ -0,0 +1,86 @@ +#!/usr/bin/python +# +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import random + +import requests +import sys + +BASE = sys.argv[1] + +products = [ + '0PUK6V6EV0', + '1YMWWN1N4O', + '2ZYFJ3GM2N', + '66VCHSJNUP', + '6E92ZMYYFZ', + '9SIQT8TOJO', + 'L9ECAV7KIM', + 'LS4PSXUNUM', + 'OLJCESPC7Z'] + + +def index(): + requests.get(BASE + "/") + + +def setCurrency(): + currencies = ['EUR', 'USD', 'JPY', 'CAD'] + requests.post(BASE + "/setCurrency", + {'currency_code': random.choice(currencies)}) + + +def browseProduct(): + requests.get(BASE + "/product/" + random.choice(products)) + + +def viewCart(): + requests.get(BASE + "/cart") + + +def addToCart(): + product = random.choice(products) + requests.get(BASE + "/product/" + product) + requests.post(BASE + "/cart", { + 'product_id': product, + 'quantity': random.choice([1, 2, 3, 4, 5, 10])}) + + +def checkout(): + addToCart() + requests.post(BASE + "/cart/checkout", { + 'email': 'someone@example.com', + 'street_address': '1600 Amphitheatre Parkway', + 'zip_code': '94043', + 'city': 'Mountain View', + 'state': 'CA', + 'country': 'United States', + 'credit_card_number': '4432-8015-6152-0454', + 'credit_card_expiration_month': '1', + 'credit_card_expiration_year': '2039', + 'credit_card_cvv': '672', + }) + + +if not BASE: + print("ERROR: no frontend address") +else: + print("pinging" + BASE) +index() +browseProduct() +addToCart() +viewCart() +checkout() diff --git a/src/pingjob/pinger.sh b/src/pingjob/pinger.sh new file mode 100755 index 0000000..9e799ae --- /dev/null +++ b/src/pingjob/pinger.sh @@ -0,0 +1,27 @@ +#!/bin/sh -eu +# +# Copyright 2018 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash +set -e +trap "exit" TERM + +if [ -z "${FRONTEND_ADDR}" ]; then + echo >&2 "FRONTEND_ADDR not specified" + exit 1 +fi + +set -x +python pinger.py "${FRONTEND_ADDR}" diff --git a/src/pingjob/requirements.in b/src/pingjob/requirements.in new file mode 100644 index 0000000..f229360 --- /dev/null +++ b/src/pingjob/requirements.in @@ -0,0 +1 @@ +requests diff --git a/src/pingjob/requirements.txt b/src/pingjob/requirements.txt new file mode 100644 index 0000000..59b8df2 --- /dev/null +++ b/src/pingjob/requirements.txt @@ -0,0 +1,11 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --output-file=requirements.txt requirements.in +# +certifi==2018.11.29 # via requests +chardet==3.0.4 # via requests +idna==2.8 # via requests +requests==2.21.0 +urllib3==1.24.1 # via requests From 6c11f132652aee3e87ef86dc07ef56f181f1b28c Mon Sep 17 00:00:00 2001 From: asamanta Date: Mon, 1 Jul 2019 14:55:34 -0400 Subject: [PATCH 08/12] add pinger.yaml which should set up the job --- kubernetes-manifests/pinger.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 kubernetes-manifests/pinger.yaml diff --git a/kubernetes-manifests/pinger.yaml b/kubernetes-manifests/pinger.yaml new file mode 100644 index 0000000..e4e233c --- /dev/null +++ b/kubernetes-manifests/pinger.yaml @@ -0,0 +1,18 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: pinger-job +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: main + image: pingjob + env: + - name: FRONTEND_ADDR + value: "frontend:80" + restartPolicy: OnFailure + From 60a1fc4ad54c9de62bda06f13a6e848ff252321a Mon Sep 17 00:00:00 2001 From: asamanta Date: Mon, 1 Jul 2019 15:20:37 -0400 Subject: [PATCH 09/12] updated build.out --- build.out | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.out b/build.out index eefcc8a..36fecc6 100644 --- a/build.out +++ b/build.out @@ -1 +1 @@ -{"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-33-g6e6db3b@sha256:593de0cc94b95fa033838a3d3f3dc0168cc35f736b01ace2954b3648771e1027"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-33-g6e6db3b@sha256:29dc89ac7aa66dcb70fd1c9e84f422a5e0c4bcb117ed0cb29c7cd6282ab13bbe"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-33-g6e6db3b@sha256:de6cddba59ea40a879baf25b2ae58dd06b64532d0ca52dda4c4b6d22e577f0d6"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-33-g6e6db3b@sha256:0ee734d45b10760c0d01bf3ca27a85b56296337adfe540f344860b2de1eb0277"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-33-g6e6db3b@sha256:d9b7a695508b8df8d894d4b1ea24ebc8f651c069daab64df4acb2556c72ace1d"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-33-g6e6db3b@sha256:93d422fe681b9ac2aed353b5b22f447dcd305bb297980edb0dfd68719e9dde65"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-33-g6e6db3b@sha256:5dd9f85c65b0ab000f759ea37d78ff06643ea800220e9e34c251f3c1e33ab2b9"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-33-g6e6db3b@sha256:6cc3baab0bdf2eda1ec9da076a102007c851a665c9fd8ee99d741c734c8a85fe"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-33-g6e6db3b@sha256:43d6cbbfb02cb9a4435063c63127f1f4e22a8954f38cc78159c1ae7e44700bdd"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-33-g6e6db3b@sha256:88ece337b51771e0a10cc09d8db31dd474d93fcbc47b145a9d9f6a27e24a5fb4"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-33-g6e6db3b@sha256:dcb2c1644648b9c18c6fc48ad7fc1a15f4dc890ad3fca531b9892d6cfdf1a305"}]} \ No newline at end of file +{"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-49-g6c11f13@sha256:b5642298862ce0852e6038cf029ed75df6a08530c3ca9b86cd2ad4b50d5cff00"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-49-g6c11f13@sha256:74288be0207731ee0f846273da3486638777cf8d4077bddd45e0aeac75bb3559"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-49-g6c11f13-dirty@sha256:761fcf9065618d1edf9739c5a99e0b85e85a00ea79831d9cd14ceef281bfcb96"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-49-g6c11f13@sha256:6625a1e45b63c32585248a51d32b1b5137c16c7fb0f622ee9efbd08ef0cfed42"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-49-g6c11f13@sha256:cab8d517f524609837c7c70d357d7ba4aeb836dc417414d726079ed811928804"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-49-g6c11f13@sha256:1d65c32c95fbf5fe7348e8d4975bf15a305279f78264f342734afc3d1273a7cb"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-49-g6c11f13@sha256:dcbf4a09a2b7961ad00496c70ebb33b125d40b3a2c28e92dc18e44ad15ff9139"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-49-g6c11f13@sha256:2d6b7b6422669a0850f3743c734d300cbcf247fe850127ea99f695e831e32374"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-49-g6c11f13@sha256:119a11554f457f3a4df05672de4f51050f305fba67482b242543ec6fb4ed1f05"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-49-g6c11f13@sha256:de90c5ce3bef7e118183a82b6a5de5f994045727b66462c2bffd4f57749f40c1"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-49-g6c11f13@sha256:39a383bafca249864cd67a8eac66e67a19dc107b46566d7e16501c4f15ee0935"}]} \ No newline at end of file From e1e15533767ba1d2e5354dc5b332800bb328be76 Mon Sep 17 00:00:00 2001 From: asamanta Date: Mon, 1 Jul 2019 16:46:31 -0400 Subject: [PATCH 10/12] fixed some bugs with the pinger job --- build.out | 2 +- kubernetes-manifests/pinger.yaml | 7 ++++++- skaffold.yaml | 2 ++ src/pingjob/pinger.py | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.out b/build.out index 36fecc6..c02c410 100644 --- a/build.out +++ b/build.out @@ -1 +1 @@ -{"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-49-g6c11f13@sha256:b5642298862ce0852e6038cf029ed75df6a08530c3ca9b86cd2ad4b50d5cff00"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-49-g6c11f13@sha256:74288be0207731ee0f846273da3486638777cf8d4077bddd45e0aeac75bb3559"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-49-g6c11f13-dirty@sha256:761fcf9065618d1edf9739c5a99e0b85e85a00ea79831d9cd14ceef281bfcb96"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-49-g6c11f13@sha256:6625a1e45b63c32585248a51d32b1b5137c16c7fb0f622ee9efbd08ef0cfed42"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-49-g6c11f13@sha256:cab8d517f524609837c7c70d357d7ba4aeb836dc417414d726079ed811928804"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-49-g6c11f13@sha256:1d65c32c95fbf5fe7348e8d4975bf15a305279f78264f342734afc3d1273a7cb"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-49-g6c11f13@sha256:dcbf4a09a2b7961ad00496c70ebb33b125d40b3a2c28e92dc18e44ad15ff9139"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-49-g6c11f13@sha256:2d6b7b6422669a0850f3743c734d300cbcf247fe850127ea99f695e831e32374"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-49-g6c11f13@sha256:119a11554f457f3a4df05672de4f51050f305fba67482b242543ec6fb4ed1f05"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-49-g6c11f13@sha256:de90c5ce3bef7e118183a82b6a5de5f994045727b66462c2bffd4f57749f40c1"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-49-g6c11f13@sha256:39a383bafca249864cd67a8eac66e67a19dc107b46566d7e16501c4f15ee0935"}]} \ No newline at end of file +{"builds":[{"imageName":"gcr.io/lesser-weevil/emailservice","tag":"gcr.io/lesser-weevil/emailservice:v0.1.0-50-g60a1fc4@sha256:b5642298862ce0852e6038cf029ed75df6a08530c3ca9b86cd2ad4b50d5cff00"},{"imageName":"gcr.io/lesser-weevil/productcatalogservice","tag":"gcr.io/lesser-weevil/productcatalogservice:v0.1.0-50-g60a1fc4@sha256:74288be0207731ee0f846273da3486638777cf8d4077bddd45e0aeac75bb3559"},{"imageName":"gcr.io/lesser-weevil/recommendationservice","tag":"gcr.io/lesser-weevil/recommendationservice:v0.1.0-50-g60a1fc4-dirty@sha256:761fcf9065618d1edf9739c5a99e0b85e85a00ea79831d9cd14ceef281bfcb96"},{"imageName":"gcr.io/lesser-weevil/shippingservice","tag":"gcr.io/lesser-weevil/shippingservice:v0.1.0-50-g60a1fc4@sha256:6625a1e45b63c32585248a51d32b1b5137c16c7fb0f622ee9efbd08ef0cfed42"},{"imageName":"gcr.io/lesser-weevil/checkoutservice","tag":"gcr.io/lesser-weevil/checkoutservice:v0.1.0-50-g60a1fc4@sha256:cab8d517f524609837c7c70d357d7ba4aeb836dc417414d726079ed811928804"},{"imageName":"gcr.io/lesser-weevil/paymentservice","tag":"gcr.io/lesser-weevil/paymentservice:v0.1.0-50-g60a1fc4@sha256:1d65c32c95fbf5fe7348e8d4975bf15a305279f78264f342734afc3d1273a7cb"},{"imageName":"gcr.io/lesser-weevil/currencyservice","tag":"gcr.io/lesser-weevil/currencyservice:v0.1.0-50-g60a1fc4@sha256:dcbf4a09a2b7961ad00496c70ebb33b125d40b3a2c28e92dc18e44ad15ff9139"},{"imageName":"gcr.io/lesser-weevil/cartservice","tag":"gcr.io/lesser-weevil/cartservice:v0.1.0-50-g60a1fc4@sha256:2d6b7b6422669a0850f3743c734d300cbcf247fe850127ea99f695e831e32374"},{"imageName":"gcr.io/lesser-weevil/frontend","tag":"gcr.io/lesser-weevil/frontend:v0.1.0-50-g60a1fc4@sha256:119a11554f457f3a4df05672de4f51050f305fba67482b242543ec6fb4ed1f05"},{"imageName":"gcr.io/lesser-weevil/loadgenerator","tag":"gcr.io/lesser-weevil/loadgenerator:v0.1.0-50-g60a1fc4@sha256:de90c5ce3bef7e118183a82b6a5de5f994045727b66462c2bffd4f57749f40c1"},{"imageName":"gcr.io/lesser-weevil/adservice","tag":"gcr.io/lesser-weevil/adservice:v0.1.0-50-g60a1fc4@sha256:39a383bafca249864cd67a8eac66e67a19dc107b46566d7e16501c4f15ee0935"},{"imageName":"gcr.io/lesser-weevil/pingjob","tag":"gcr.io/lesser-weevil/pingjob:v0.1.0-50-g60a1fc4-dirty@sha256:708fc0f27f2c950c9f5a3478c1b7d4d32b82165f5b323acca9b53abba8409ca5"}]} \ No newline at end of file diff --git a/kubernetes-manifests/pinger.yaml b/kubernetes-manifests/pinger.yaml index e4e233c..a9c56c4 100644 --- a/kubernetes-manifests/pinger.yaml +++ b/kubernetes-manifests/pinger.yaml @@ -13,6 +13,11 @@ spec: image: pingjob env: - name: FRONTEND_ADDR - value: "frontend:80" + value: "http://35.202.74.89" restartPolicy: OnFailure + metadata: + labels: + custom-job: pinger + + diff --git a/skaffold.yaml b/skaffold.yaml index 665f80a..682957d 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -42,6 +42,8 @@ build: context: src/loadgenerator - image: adservice context: src/adservice + - image: pingjob + context: src/pingjob tagPolicy: gitCommit: {} deploy: diff --git a/src/pingjob/pinger.py b/src/pingjob/pinger.py index fb9b8e7..915ae85 100644 --- a/src/pingjob/pinger.py +++ b/src/pingjob/pinger.py @@ -84,3 +84,4 @@ browseProduct() addToCart() viewCart() checkout() +print("pinging complete") From f575b76f33b550b9f0f402ee814d5e17d385f210 Mon Sep 17 00:00:00 2001 From: iasinDev Date: Mon, 1 Jul 2019 23:49:31 +0200 Subject: [PATCH 11/12] Fix https://github.com/GoogleCloudPlatform/microservices-demo/issues/222 (#224) --- src/loadgenerator/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/loadgenerator/Dockerfile b/src/loadgenerator/Dockerfile index cebb98c..af7fa10 100644 --- a/src/loadgenerator/Dockerfile +++ b/src/loadgenerator/Dockerfile @@ -14,4 +14,5 @@ FROM base COPY --from=builder /install /usr/local COPY . . +RUN chmod +x ./loadgen.sh ENTRYPOINT ./loadgen.sh From f6933f3ebcbe79dc3aa02517a4c14154c464c201 Mon Sep 17 00:00:00 2001 From: asamanta Date: Tue, 9 Jul 2019 17:53:06 -0400 Subject: [PATCH 12/12] Updated cartservice.yaml to have more replicas and more memory --- kubernetes-manifests/cartservice.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kubernetes-manifests/cartservice.yaml b/kubernetes-manifests/cartservice.yaml index e8a5a52..0f2e711 100644 --- a/kubernetes-manifests/cartservice.yaml +++ b/kubernetes-manifests/cartservice.yaml @@ -18,6 +18,7 @@ metadata: name: cartservice spec: revisionHistoryLimit: 1 + replicas: 10 selector: matchLabels: app: cartservice @@ -42,10 +43,10 @@ spec: resources: requests: cpu: 200m - memory: 64Mi + memory: 128Mi limits: cpu: 300m - memory: 128Mi + memory: 256Mi readinessProbe: initialDelaySeconds: 15 exec: