{"id":60810,"date":"2018-11-08T10:57:38","date_gmt":"2018-11-08T10:57:38","guid":{"rendered":"http:\/\/www.sickgaming.net\/blog\/2018\/11\/08\/grpc-load-balancing-on-kubernetes-without-tears\/"},"modified":"2018-11-08T10:57:38","modified_gmt":"2018-11-08T10:57:38","slug":"grpc-load-balancing-on-kubernetes-without-tears","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2018\/11\/08\/grpc-load-balancing-on-kubernetes-without-tears\/","title":{"rendered":"gRPC Load Balancing on Kubernetes without Tears"},"content":{"rendered":"<div class=\"lcom-stacked__main\">\n<div class=\"panel-pane pane-entity-field pane-node-body\">\n<div class=\"field field-name-body field-type-text-with-summary field-label-hidden\">\n<div class=\"field-items\">\n<div class=\"field-item even\">\n<p>Many new gRPC users are surprised to find that Kubernetes\u2019s default load balancing often doesn\u2019t work out of the box with gRPC. For example, here\u2019s what happens when you take a\u00a0<a href=\"https:\/\/github.com\/sourishkrout\/nodevoto\">simple gRPC Node.js microservices app<\/a>\u00a0and deploy it on Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/11\/grpc-load-balancing-on-kubernetes-without-tears.png\" \/><\/p>\n<p>While the\u00a0<code>voting<\/code>\u00a0service displayed here has several pods, it\u2019s clear from Kubernetes\u2019s CPU graphs that only one of the pods is actually doing any work\u2014because only one of the pods is receiving any traffic. Why?<\/p>\n<p>In this blog post, we describe why this happens, and how you can easily fix it by adding gRPC load balancing to any Kubernetes app with\u00a0<a href=\"https:\/\/linkerd.io\/\">Linkerd<\/a>, a\u00a0<a href=\"https:\/\/cncf.io\/\">CNCF<\/a>\u00a0service mesh and service sidecar.<\/p>\n<p>Read more at <a href=\"https:\/\/kubernetes.io\/blog\/\">Kubernetes Blog<\/a><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<p><a href=\"https:\/\/www.linux.com\/popup\/nojs\" class=\"ctools-use-modal ctools-modal-subscription-modal-style element-invisible\" title=\"\">Click Here!<\/a> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many new gRPC users are surprised to find that Kubernetes\u2019s default load balancing often doesn\u2019t work out of the box with gRPC. For example, here\u2019s what happens when you take a\u00a0simple gRPC Node.js microservices app\u00a0and deploy it on Kubernetes: While the\u00a0voting\u00a0service displayed here has several pods, it\u2019s clear from Kubernetes\u2019s CPU graphs that only one [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":60811,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[],"class_list":["post-60810","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-freebsd-unix"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/60810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=60810"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/60810\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/60811"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=60810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=60810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=60810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}