Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/example/k3d/lib/loki/main.libsonnet
4096 views
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),
  },
}