github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/production/ksonnet/loki-simple-scalable/write.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      write_replicas: 3,
    12    },
    13  
    14    // The writers should persist index files on a persistent
    15    // volume in order to be crash resilient.
    16    write_pvc::
    17      pvc.new('write-data') +
    18      pvc.mixin.spec.resources.withRequests({ storage: '10Gi' }) +
    19      pvc.mixin.spec.withAccessModes(['ReadWriteOnce']) +
    20      pvc.mixin.spec.withStorageClassName('fast'),
    21  
    22    write_args::
    23      $._config.commonArgs {
    24        target: 'write',
    25      },
    26  
    27    write_container::
    28      container.new('write', $._images.write) +
    29      container.withPorts($.util.defaultPorts) +
    30      container.withArgsMixin(k.util.mapToFlags($.write_args)) +
    31      container.withVolumeMountsMixin([volumeMount.new('write-data', '/data')]) +
    32      container.mixin.readinessProbe.httpGet.withPath('/ready') +
    33      container.mixin.readinessProbe.httpGet.withPort($._config.http_listen_port) +
    34      container.mixin.readinessProbe.withInitialDelaySeconds(15) +
    35      container.mixin.readinessProbe.withTimeoutSeconds(1),
    36  
    37    write_statefulset:
    38      statefulSet.new('write', $._config.write_replicas, [$.write_container], $.write_pvc) +
    39      statefulSet.mixin.spec.withServiceName('write') +
    40      statefulSet.mixin.metadata.withLabels({ app: $._config.headless_service_name, name: 'write' }) +
    41      statefulSet.mixin.spec.selector.withMatchLabels({ name: 'write' }) +
    42      statefulSet.mixin.spec.template.metadata.withLabels({ name: 'write', app: $._config.headless_service_name }) +
    43      $._config.config_hash_mixin +
    44      k.util.configVolumeMount('loki', '/etc/loki') +
    45      k.util.antiAffinity +
    46      statefulSet.mixin.spec.updateStrategy.withType('RollingUpdate') +
    47      statefulSet.mixin.spec.template.spec.securityContext.withFsGroup(10001) +  // 10001 is the group ID assigned to Loki in the Dockerfile
    48      statefulSet.mixin.spec.template.spec.withTerminationGracePeriodSeconds(4800) +
    49      statefulSet.mixin.spec.withPodManagementPolicy('Parallel'),
    50  
    51    write_service:
    52      k.util.serviceFor($.write_statefulset) +
    53      service.mixin.spec.withType('ClusterIP') +
    54      service.mixin.spec.withPorts([
    55        k.core.v1.servicePort.newNamed('write-http-metrics', 80, 'http-metrics'),
    56        k.core.v1.servicePort.newNamed('write-grpc', 9095, 'grpc'),
    57      ]),
    58  }