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 }