github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/production/ksonnet/loki-simple-scalable/read.libsonnet (about) 1 local k = import 'ksonnet-util/kausal.libsonnet'; 2 3 { 4 local container = k.core.v1.container, 5 local pvc = k.core.v1.persistentVolumeClaim, 6 local statefulSet = k.apps.v1.statefulSet, 7 local volumeMount = k.core.v1.volumeMount, 8 local service = k.core.v1.service, 9 10 _config+:: { 11 read_replicas: 3, 12 }, 13 14 // Use PVC for queriers instead of node disk. 15 read_pvc:: 16 pvc.new('read-data') + 17 pvc.mixin.spec.resources.withRequests({ storage: '10Gi' }) + 18 pvc.mixin.spec.withAccessModes(['ReadWriteOnce']), 19 20 read_args:: 21 $._config.commonArgs { 22 target: 'read', 23 }, 24 25 read_container:: 26 container.new('read', $._images.read) + 27 container.withPorts($.util.defaultPorts) + 28 container.withArgsMixin(k.util.mapToFlags($.read_args)) + 29 container.withVolumeMountsMixin([volumeMount.new('read-data', '/data')]) + 30 container.mixin.readinessProbe.httpGet.withPath('/ready') + 31 container.mixin.readinessProbe.httpGet.withPort($._config.http_listen_port) + 32 container.mixin.readinessProbe.withInitialDelaySeconds(15) + 33 container.mixin.readinessProbe.withTimeoutSeconds(1), 34 35 read_statefulset: 36 statefulSet.new('read', $._config.read_replicas, [$.read_container], $.read_pvc) + 37 statefulSet.mixin.spec.withServiceName('read') + 38 statefulSet.mixin.metadata.withLabels({ app: $._config.headless_service_name, name: 'read' }) + 39 statefulSet.mixin.spec.selector.withMatchLabels({ name: 'read' }) + 40 statefulSet.mixin.spec.template.metadata.withLabels({ name: 'read', app: $._config.headless_service_name }) + 41 $._config.config_hash_mixin + 42 k.util.configVolumeMount('loki', '/etc/loki') + 43 k.util.antiAffinity + 44 statefulSet.mixin.spec.updateStrategy.withType('RollingUpdate') + 45 statefulSet.mixin.spec.template.spec.securityContext.withFsGroup(10001) + // 10001 is the group ID assigned to Loki in the Dockerfile 46 statefulSet.mixin.spec.template.spec.withTerminationGracePeriodSeconds(4800) + 47 statefulSet.mixin.spec.withPodManagementPolicy('Parallel'), 48 49 read_service: 50 k.util.serviceFor($.read_statefulset) + 51 service.mixin.spec.withType('ClusterIP') + 52 service.mixin.spec.withPorts([ 53 k.core.v1.servicePort.newNamed('read-http-metrics', 80, 'http-metrics'), 54 k.core.v1.servicePort.newNamed('read-grpc', 9095, 'grpc'), 55 ]), 56 }