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  }