Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/production/ksonnet/loki/ingester.libsonnet

68 lines
2.9 KiB

local k = import 'ksonnet-util/kausal.libsonnet';
{
local container = k.core.v1.container,
local pvc = k.core.v1.persistentVolumeClaim,
local volumeMount = k.core.v1.volumeMount,
local statefulSet = k.apps.v1.statefulSet,
local podDisruptionBudget = k.policy.v1.podDisruptionBudget,
local name = 'ingester',
// The ingesters should persist TSDB blocks and WAL on a persistent
// volume in order to be crash resilient.
ingester_data_pvc::
pvc.new('ingester-data') +
pvc.mixin.spec.resources.withRequests({ storage: $._config.ingester_data_disk_size }) +
pvc.mixin.spec.withAccessModes(['ReadWriteOnce']) +
pvc.mixin.spec.withStorageClassName($._config.ingester_data_disk_class),
ingester_wal_pvc::
pvc.new('ingester-wal') +
pvc.mixin.spec.resources.withRequests({ storage: $._config.ingester_wal_disk_size }) +
pvc.mixin.spec.withAccessModes(['ReadWriteOnce']) +
pvc.mixin.spec.withStorageClassName($._config.ingester_wal_disk_class),
newIngesterStatefulSet(name, container, with_anti_affinity=true)::
$.newLokiStatefulSet(name, 3, container, [self.ingester_data_pvc, self.ingester_wal_pvc]) +
// When the ingester needs to flush blocks to the storage, it may take quite a lot of time.
// For this reason, we grant an high termination period (80 minutes).
statefulSet.mixin.spec.template.spec.withTerminationGracePeriodSeconds(4800) +
// $.lokiVolumeMounts +
$.util.podPriority('high') +
(if with_anti_affinity then $.util.antiAffinity else {}),
ingester_args::
$._config.commonArgs {
target: 'ingester',
},
ingester_ports: $.util.defaultPorts,
ingester_container::
container.new('ingester', $._images.ingester) +
container.withPorts($.ingester_ports) +
container.withArgsMixin(k.util.mapToFlags($.ingester_args)) +
container.mixin.readinessProbe.httpGet.withPath('/ready') +
container.mixin.readinessProbe.httpGet.withPort($._config.http_listen_port) +
container.mixin.readinessProbe.withInitialDelaySeconds(15) +
container.mixin.readinessProbe.withTimeoutSeconds(1) +
k.util.resourcesRequests('1', '7Gi') +
k.util.resourcesLimits('2', '14Gi') +
container.withEnvMixin($._config.commonEnvs) +
container.withVolumeMountsMixin([
volumeMount.new('ingester-data', '/data'),
volumeMount.new('ingester-wal', $._config.loki.ingester.wal.dir),
]),
ingester_statefulset:
self.newIngesterStatefulSet('ingester', $.ingester_container, !$._config.ingester_allow_multiple_replicas_on_same_node),
ingester_service:
k.util.serviceFor($.ingester_statefulset, $._config.service_ignored_labels),
ingester_pdb:
podDisruptionBudget.new('loki-ingester-pdb') +
podDisruptionBudget.mixin.metadata.withLabels({ name: 'loki-ingester-pdb' }) +
podDisruptionBudget.mixin.spec.selector.withMatchLabels({ name: name }) +
podDisruptionBudget.mixin.spec.withMaxUnavailable(1),
}