From 876d4f966f842facdf00a8640ab6e06e3f0337fe Mon Sep 17 00:00:00 2001 From: Kalyana Chadalavada Date: Wed, 8 May 2019 19:31:33 -0700 Subject: [PATCH 1/5] Add Stackdriver Profiler Java agent to adservice (#210) * Add Stackdriver Profiler Java agent to adservice. * Add Stackdriver Profiler Java agent to adservice. --- src/adservice/Dockerfile | 11 +++++++++-- src/adservice/build.gradle | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/adservice/Dockerfile b/src/adservice/Dockerfile index 34c6e33..95fb32c 100644 --- a/src/adservice/Dockerfile +++ b/src/adservice/Dockerfile @@ -11,9 +11,16 @@ COPY . . RUN chmod +x gradlew RUN ./gradlew installDist -FROM openjdk:8-alpine +FROM openjdk:8-slim -RUN apk add --no-cache libc6-compat +# Download Stackdriver Profiler Java agent +RUN apt-get -y update && apt-get install -qqy \ + wget \ + && rm -rf /var/lib/apt/lists/* +RUN mkdir -p /opt/cprof && \ + wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \ + | tar xzv -C /opt/cprof && \ + rm -rf profiler_java_agent.tar.gz RUN GRPC_HEALTH_PROBE_VERSION=v0.2.1 && \ wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ diff --git a/src/adservice/build.gradle b/src/adservice/build.gradle index dde9248..2341951 100644 --- a/src/adservice/build.gradle +++ b/src/adservice/build.gradle @@ -118,7 +118,8 @@ task adService(type: CreateStartScripts) { outputDir = new File(project.buildDir, 'tmp') classpath = jar.outputs.files + project.configurations.runtime defaultJvmOpts = - ["-Dlog4j2.contextDataInjector=io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector"] + ["-Dlog4j2.contextDataInjector=io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector", + "-agentpath:/opt/cprof/profiler_java_agent.so=-cprof_service=adservice,-cprof_service_version=1.0.0"] } task adServiceClient(type: CreateStartScripts) { @@ -127,7 +128,8 @@ task adServiceClient(type: CreateStartScripts) { outputDir = new File(project.buildDir, 'tmp') classpath = jar.outputs.files + project.configurations.runtime defaultJvmOpts = - ["-Dlog4j2.contextDataInjector=io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector"] + ["-Dlog4j2.contextDataInjector=io.opencensus.contrib.logcorrelation.log4j2.OpenCensusTraceContextDataInjector", + "-agentpath:/opt/cprof/profiler_java_agent.so=-cprof_service=adserviceclient,-cprof_service_version=1.0.0"] } applicationDistribution.into('bin') { From 55f5061532798b9730b33b46401989c7115f742d Mon Sep 17 00:00:00 2001 From: Abhilash Gnan Date: Thu, 9 May 2019 04:39:14 +0200 Subject: [PATCH 2/5] Use env in service manifests for PORT (#212) * fix shipping service ports * fix product catalog servicde ports * fix paymentservice ports * fix currenservice ports * fix checkoutservice ports * fix emailservice ports * fix frontend app ports * fix recommendationservice ports * fix indentation in service yaml files --- kubernetes-manifests/checkoutservice.yaml | 2 ++ kubernetes-manifests/currencyservice.yaml | 3 +++ kubernetes-manifests/emailservice.yaml | 3 +++ kubernetes-manifests/frontend.yaml | 2 ++ kubernetes-manifests/paymentservice.yaml | 3 +++ kubernetes-manifests/productcatalogservice.yaml | 3 +++ kubernetes-manifests/recommendationservice.yaml | 2 ++ kubernetes-manifests/shippingservice.yaml | 3 +++ src/currencyservice/server.js | 2 +- src/paymentservice/server.js | 4 ++-- src/productcatalogservice/server.go | 13 ++++++++----- src/shippingservice/main.go | 2 +- 12 files changed, 33 insertions(+), 9 deletions(-) diff --git a/kubernetes-manifests/checkoutservice.yaml b/kubernetes-manifests/checkoutservice.yaml index 6b99656..501210a 100644 --- a/kubernetes-manifests/checkoutservice.yaml +++ b/kubernetes-manifests/checkoutservice.yaml @@ -37,6 +37,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 diff --git a/kubernetes-manifests/currencyservice.yaml b/kubernetes-manifests/currencyservice.yaml index 2d6d76a..6d1b21a 100644 --- a/kubernetes-manifests/currencyservice.yaml +++ b/kubernetes-manifests/currencyservice.yaml @@ -32,6 +32,9 @@ spec: ports: - name: grpc containerPort: 7000 + env: + - name: PORT + value: "7000" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:7000"] diff --git a/kubernetes-manifests/emailservice.yaml b/kubernetes-manifests/emailservice.yaml index 179db0e..2ae3823 100644 --- a/kubernetes-manifests/emailservice.yaml +++ b/kubernetes-manifests/emailservice.yaml @@ -31,6 +31,9 @@ spec: image: emailservice ports: - containerPort: 8080 + env: + - name: PORT + value: "8080" readinessProbe: periodSeconds: 5 exec: diff --git a/kubernetes-manifests/frontend.yaml b/kubernetes-manifests/frontend.yaml index cc7b1cc..5c5cd32 100644 --- a/kubernetes-manifests/frontend.yaml +++ b/kubernetes-manifests/frontend.yaml @@ -47,6 +47,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 diff --git a/kubernetes-manifests/paymentservice.yaml b/kubernetes-manifests/paymentservice.yaml index 47523a9..fa62c08 100644 --- a/kubernetes-manifests/paymentservice.yaml +++ b/kubernetes-manifests/paymentservice.yaml @@ -31,6 +31,9 @@ spec: image: paymentservice ports: - containerPort: 50051 + env: + - name: PORT + value: "50051" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:50051"] diff --git a/kubernetes-manifests/productcatalogservice.yaml b/kubernetes-manifests/productcatalogservice.yaml index 9161a54..b175856 100644 --- a/kubernetes-manifests/productcatalogservice.yaml +++ b/kubernetes-manifests/productcatalogservice.yaml @@ -31,6 +31,9 @@ spec: image: productcatalogservice ports: - containerPort: 3550 + env: + - name: PORT + value: "3550" readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:3550"] diff --git a/kubernetes-manifests/recommendationservice.yaml b/kubernetes-manifests/recommendationservice.yaml index eeb7782..1ccc4ab 100644 --- a/kubernetes-manifests/recommendationservice.yaml +++ b/kubernetes-manifests/recommendationservice.yaml @@ -40,6 +40,8 @@ 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 diff --git a/kubernetes-manifests/shippingservice.yaml b/kubernetes-manifests/shippingservice.yaml index 5daf5ef..d4049ad 100644 --- a/kubernetes-manifests/shippingservice.yaml +++ b/kubernetes-manifests/shippingservice.yaml @@ -30,6 +30,9 @@ spec: image: shippingservice ports: - containerPort: 50051 + env: + - name: PORT + value: "50051" readinessProbe: periodSeconds: 5 exec: diff --git a/src/currencyservice/server.js b/src/currencyservice/server.js index 0b231b0..d3e9ad1 100644 --- a/src/currencyservice/server.js +++ b/src/currencyservice/server.js @@ -36,7 +36,7 @@ const protoLoader = require('@grpc/proto-loader'); const MAIN_PROTO_PATH = path.join(__dirname, './proto/demo.proto'); const HEALTH_PROTO_PATH = path.join(__dirname, './proto/grpc/health/v1/health.proto'); -const PORT = 7000; +const PORT = process.env.PORT; const shopProto = _loadProto(MAIN_PROTO_PATH).hipstershop; const healthProto = _loadProto(HEALTH_PROTO_PATH).grpc.health.v1; diff --git a/src/paymentservice/server.js b/src/paymentservice/server.js index 11598b7..152a8d1 100644 --- a/src/paymentservice/server.js +++ b/src/paymentservice/server.js @@ -27,7 +27,7 @@ const logger = pino({ }); class HipsterShopServer { - constructor (protoRoot, port = HipsterShopServer.DEFAULT_PORT) { + constructor (protoRoot, port = HipsterShopServer.PORT) { this.port = port; this.packages = { @@ -99,6 +99,6 @@ class HipsterShopServer { } } -HipsterShopServer.DEFAULT_PORT = 50051; +HipsterShopServer.PORT = process.env.PORT; module.exports = HipsterShopServer; diff --git a/src/productcatalogservice/server.go b/src/productcatalogservice/server.go index c55e0af..60b0f3a 100644 --- a/src/productcatalogservice/server.go +++ b/src/productcatalogservice/server.go @@ -50,7 +50,7 @@ var ( log *logrus.Logger extraLatency time.Duration - port = flag.Int("port", 3550, "port to listen at") + port = "3550" reloadCatalog bool ) @@ -106,13 +106,16 @@ func main() { } }() - log.Infof("starting grpc server at :%d", *port) - run(*port) + if os.Getenv("PORT") != "" { + port = os.Getenv("PORT") + } + log.Infof("starting grpc server at :%s", port) + run(port) select {} } -func run(port int) string { - l, err := net.Listen("tcp", fmt.Sprintf(":%d", port)) +func run(port string) string { + l, err := net.Listen("tcp", fmt.Sprintf(":%s", port)) if err != nil { log.Fatal(err) } diff --git a/src/shippingservice/main.go b/src/shippingservice/main.go index ea324fe..6360cd8 100644 --- a/src/shippingservice/main.go +++ b/src/shippingservice/main.go @@ -60,7 +60,7 @@ func main() { go initProfiling("shippingservice", "1.0.0") port := defaultPort - if value, ok := os.LookupEnv("APP_PORT"); ok { + if value, ok := os.LookupEnv("PORT"); ok { port = value } port = fmt.Sprintf(":%s", port) From 27df445fc20f048c1c31e429f6c29075119fe454 Mon Sep 17 00:00:00 2001 From: askmeegs Date: Tue, 14 May 2019 10:02:35 -0400 Subject: [PATCH 3/5] 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 4/5] 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 5/5] 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) ---