From 0116aa61c86fa983ddcbbd5e30a2141d2e89081a Mon Sep 17 00:00:00 2001 From: Owen Diehl Date: Thu, 11 Nov 2021 15:43:28 -0500 Subject: [PATCH] ensures components with required SRV lookups use the correct port (#4737) * ensures components with required SRV lookups use the correct port naming (_grpclb prefix) * Update production/ksonnet/loki/query-frontend.libsonnet Co-authored-by: Ed Welch Co-authored-by: Ed Welch --- production/ksonnet/loki/common.libsonnet | 11 +++++++++++ production/ksonnet/loki/query-frontend.libsonnet | 4 ++-- production/ksonnet/loki/query-scheduler.libsonnet | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/production/ksonnet/loki/common.libsonnet b/production/ksonnet/loki/common.libsonnet index 3dc9d735277f..9b7c606f25a8 100644 --- a/production/ksonnet/loki/common.libsonnet +++ b/production/ksonnet/loki/common.libsonnet @@ -14,6 +14,17 @@ local k = import 'ksonnet-util/kausal.libsonnet'; containerPort.new(name='grpc', port=9095), ], + // We use DNS SRV record for discovering the schedulers or the frontends if schedulers are disabled. + // These expect port names like _grpclb on the services. + grpclbDefaultPorts:: [ + containerPort.new(name='http-metrics', port=$._config.http_listen_port), + containerPort.new(name='grpclb', port=9095), + ], + + // This helps ensure we create SRV records starting with _grpclb + grpclbServiceFor(deployment):: k.util.serviceFor(deployment, nameFormat='%(port)s'), + + readinessProbe:: container.mixin.readinessProbe.httpGet.withPath('/ready') + container.mixin.readinessProbe.httpGet.withPort($._config.http_listen_port) + diff --git a/production/ksonnet/loki/query-frontend.libsonnet b/production/ksonnet/loki/query-frontend.libsonnet index dc8e815bac2d..f2af46c240cc 100644 --- a/production/ksonnet/loki/query-frontend.libsonnet +++ b/production/ksonnet/loki/query-frontend.libsonnet @@ -11,7 +11,7 @@ local k = import 'ksonnet-util/kausal.libsonnet'; query_frontend_container:: container.new('query-frontend', $._images.query_frontend) + - container.withPorts($.util.defaultPorts) + + container.withPorts($.util.grpclbDefaultPorts) + container.withArgsMixin(k.util.mapToFlags($.query_frontend_args)) + container.mixin.readinessProbe.httpGet.withPath('/ready') + container.mixin.readinessProbe.httpGet.withPort($._config.http_listen_port) + @@ -43,7 +43,7 @@ local k = import 'ksonnet-util/kausal.libsonnet'; local service = k.core.v1.service, query_frontend_service: - k.util.serviceFor($.query_frontend_deployment) + + $.util.grpclbServiceFor($.query_frontend_deployment) + // Make sure that query frontend worker, running in the querier, do resolve // each query-frontend pod IP and NOT the service IP. To make it, we do NOT // use the service cluster IP so that when the service DNS is resolved it diff --git a/production/ksonnet/loki/query-scheduler.libsonnet b/production/ksonnet/loki/query-scheduler.libsonnet index 970d434de767..7b15ee4d583a 100644 --- a/production/ksonnet/loki/query-scheduler.libsonnet +++ b/production/ksonnet/loki/query-scheduler.libsonnet @@ -35,7 +35,7 @@ local k = import 'ksonnet-util/kausal.libsonnet'; local container = k.core.v1.container, query_scheduler_container:: if $._config.query_scheduler_enabled then container.new('query-scheduler', $._images.query_scheduler) + - container.withPorts($.util.defaultPorts) + + container.withPorts($.util.grpclbDefaultPorts) + container.withArgsMixin(k.util.mapToFlags($.query_scheduler_args)) + $.jaeger_mixin + k.util.resourcesRequests('2', '600Mi') + @@ -58,7 +58,7 @@ local k = import 'ksonnet-util/kausal.libsonnet'; // Headless to make sure resolution gets IP address of target pods, and not service IP. query_scheduler_discovery_service: if !$._config.query_scheduler_enabled then {} else - k.util.serviceFor($.query_scheduler_deployment) + + $.util.grpclbServiceFor($.query_scheduler_deployment) + service.mixin.spec.withPublishNotReadyAddresses(true) + service.mixin.spec.withClusterIp('None') + service.mixin.metadata.withName('query-scheduler-discovery'),