local k = import 'ksonnet-util/kausal.libsonnet'; local configMap = k.core.v1.configMap; local container = k.core.v1.container; local containerPort = k.core.v1.containerPort; local deployment = k.apps.v1.deployment; local pvc = k.core.v1.persistentVolumeClaim; local service = k.core.v1.service; local volumeMount = k.core.v1.volumeMount; local volume = k.core.v1.volume; { new(namespace=''):: { local this = self, _images:: { loki: 'grafana/loki:1.4.1', }, _config:: (import './loki-config.libsonnet'), configMap: configMap.new('loki-config') + configMap.mixin.metadata.withNamespace(namespace) + configMap.withData({ 'config.yaml': k.util.manifestYaml(this._config), }), container:: container.new('loki', this._images.loki) + container.withPorts([ containerPort.newNamed(name='http-metrics', containerPort=80), containerPort.newNamed(name='grpc', containerPort=9095), ]) + container.withVolumeMountsMixin( volumeMount.new('loki-data', '/tmp/loki'), ) + container.withArgsMixin( k.util.mapToFlags({ 'config.file': '/etc/loki/config.yaml', }), ), pvc: { apiVersion: 'v1', kind: 'PersistentVolumeClaim' } + pvc.new() + pvc.mixin.metadata.withName('loki-data') + pvc.mixin.metadata.withNamespace(namespace) + pvc.mixin.spec.withAccessModes('ReadWriteOnce') + pvc.mixin.spec.resources.withRequests({ storage: '10Gi' }), deployment: deployment.new('loki', 1, [this.container]) + deployment.mixin.metadata.withNamespace(namespace) + deployment.mixin.spec.template.spec.withVolumesMixin([ volume.fromPersistentVolumeClaim('loki-data', 'loki-data'), ]) + k.util.configMapVolumeMount(this.configMap, '/etc/loki') + deployment.mixin.spec.template.spec.withTerminationGracePeriodSeconds(4800), service: k.util.serviceFor(this.deployment) + service.mixin.metadata.withNamespace(namespace), }, }