Upgrade to Pro — share decks privately, control downloads, hide ads and more …

gRPC service development in private Kubernetes ...

gRPC service development in private Kubernetes cluster

Keiichiro Ui
LINE Development Team H Server Side Engineer
https://linedevday.linecorp.com/jp/2019/sessions/E1-1

Avatar for LINE DevDay 2019

LINE DevDay 2019

November 20, 2019
Tweet

More Decks by LINE DevDay 2019

Other Decks in Technology

Transcript

  1. 2019 DevDay gRPC Service Development in Private Kubernetes Cluster >

    Keiichiro Ui > LINE Development Team H Server Side Engineer
  2. About Me > Started with LINE LIVE projects > Developing

    new live commerce service > Leveraging new technology • With LINE development environments
  3. Traffic Spike in Live Cast Service > Requiring large scale

    out • For popular artists, performer, etc.
  4. Scale Out Operations in LINE LIVE > Create VM instances

    > Run some setup scripts/ansible > Register with: • Deployment system • Metrics observer • etc. > Deploy > Register with load balancers
  5. Why Use Kubernetes? With Kubernetes > Pod/Cluster autoscaler > Open

    • Ecosystem for OSS Existing Way > Manual scaling > Developed for LINE devs • Ecosystem for LINE services
  6. Agenda > Kubernetes Service for LINE Services > Our Service

    Architecture Using gRPC > Service Metrics/Observations > Log Aggregation
  7. IaaS/PaaS in LINE: Verda > Kubernetes > OpenStack > MySQL

    > Elasticsearch > Redis > Object Storage > LoadBalancer > etc.
  8. Kubernetes for LINE Dev > Resources (Pod, Deployments, etc...) >

    Namespace > Kubernetes Cluster > OpenStack > Infrastructure + Log + Observation Service Dev Kubernetes Team
  9. Agenda > Kubernetes Service for LINE Services > Our Service

    Architecture Using gRPC > Service Metrics/Observations > Log Aggregation
  10. Overview > Microservices with gRPC > Spring Boot > Using

    Envoy to convert various protocols to gRPC
  11. App Interactions > gRPC over Internet > L7 load balancer

    > NodePort as L4 load balancer > Envoy for L7 load balancer > Server application as headless service
  12. Why Envoy? > Load balancing does not work appropriately •

    External LB cannot identify pod locations > NodePort works as L4 LB • TCP connections are long-lived in
 gRPC/HTTP2
  13. gRPC-Web > For JavaScript on web browsers • Admin system

    • Service landing pages > gRPC-Web supports any HTTP/* • no-dependency on HTTP/2
  14. REST API > For other LINE services • Envoy gRPC-JSON

    transcoding > Protocol Buffers can be serialized into JSON
  15. Why Avoid Istio? > Spring has the same functionalities •

    Metrics for traffics • Distributed tracing • Fault injection, Circuit breaker, Retry > Performance
  16. ACL Manager > API for managing DB ACL > Hooks

    autoscaler to add or delete a node
  17. Agenda > Kubernetes Service for LINE Services > Our Service

    Architecture Using gRPC > Service Metrics/Observations > Log Aggregation
  18. Prometheus > Persistent Volume is hard to use > We

    try using a remote storage instead • Developed TSDB in-house
  19. Too Many Metrics > Too many metrics in Prometheus with

    Kubernetes • How to visualize? • Which metrics should we watch? > Head time series: 240,638 Prometheus With Kubernetes
  20. Too Many Metrics > kubernetes-mixin adds many settings • Grafana

    dashboards • Pod crush loop detection • Node hanging up • Volume usage predication for PersistentVolumes • etc. Prometheus with Kubernetes
  21. Spring Application Metrics > Spring Boot Actuator > OpenCensus •

    Metrics • Distributed traces • Various Language
  22. Agenda > Kubernetes Service for LINE Services > Our Service

    Architecture Using gRPC > Service Metrics/Observations > Log Aggregation
  23. Log Aggregations > Fluentd + Elasticsearch + Kibana • For

    generic logs > IMON • For error log alerts
  24. Log Aggregation in Kubernetes Cluster > Old pod logs may

    be removed > Logs should be stored in external storage
  25. Fluentd > Referred to • knative requirements • kubernetes addon

    • not for production • manifests in Helm Chart > plugins • fluent-plugin-elasticsearch • fluent-plugin-kubernetes_metadata_filter • fluent-plugin-detect-exceptions • fluent-plugin-multi-format-parser
  26. Agenda > Kubernetes Service for LINE Services > Our Service

    Architecture Using gRPC > Service Metrics/Observations > Log Aggregation
  27. Our Booth > Kotlin coroutine > CI/CD with Drone CI

    + Kubernetes + Github > Development flow with sharing proto files with server/client