Skip to main content

KubraGen Builder: Loki Stack

Project description

KubraGen Builder: Loki Stack

PyPI version Supported Python versions

kg_lokistack is a builder for KubraGen that deploys a Loki Stack stack in Kubernetes.

The Loki Stack consists of Loki, Promtail and Grafana (optional).

KubraGen is a Kubernetes YAML generator library that makes it possible to generate configurations using the full power of the Python programming language.

Example

from kg_loki import LokiConfigFile, LokiConfigFileOptions
from kubragen import KubraGen
from kubragen.consts import PROVIDER_GOOGLE, PROVIDERSVC_GOOGLE_GKE
from kubragen.object import Object
from kubragen.option import OptionRoot
from kubragen.options import Options
from kubragen.output import OutputProject, OD_FileTemplate, OutputFile_ShellScript, OutputFile_Kubernetes, \
    OutputDriver_Print
from kubragen.provider import Provider

from kg_lokistack import LokiStackBuilder, LokiStackOptions

kg = KubraGen(provider=Provider(PROVIDER_GOOGLE, PROVIDERSVC_GOOGLE_GKE), options=Options({
    'namespaces': {
        'mon': 'app-monitoring',
    },
}))

out = OutputProject(kg)

shell_script = OutputFile_ShellScript('create_gke.sh')
out.append(shell_script)

shell_script.append('set -e')

#
# OUTPUTFILE: app-namespace.yaml
#
file = OutputFile_Kubernetes('app-namespace.yaml')

file.append([
    Object({
        'apiVersion': 'v1',
        'kind': 'Namespace',
        'metadata': {
            'name': 'app-monitoring',
        },
    }, name='ns-monitoring', source='app', instance='app')
])

out.append(file)
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))

shell_script.append(f'kubectl config set-context --current --namespace=app-monitoring')

#
# SETUP: lokistack
#
lokiconfigfile = LokiConfigFile(options=LokiConfigFileOptions({
}))

lokistack_config = LokiStackBuilder(kubragen=kg, options=LokiStackOptions({
    'namespace': OptionRoot('namespaces.mon'),
    'basename': 'mylokistack',
    'config': {
        'loki_config': lokiconfigfile,
    },
    'enable': {
        'grafana': True,
    },
    'kubernetes': {
        'volumes': {
            'loki-data': {
                'persistentVolumeClaim': {
                    'claimName': 'lokistack-storage-claim'
                }
            }
        },
        'resources': {
            'loki-statefulset': {
                'requests': {
                    'cpu': '150m',
                    'memory': '300Mi'
                },
                'limits': {
                    'cpu': '300m',
                    'memory': '450Mi'
                },
            },
        },
    }
}))

lokistack_config.ensure_build_names(lokistack_config.BUILD_ACCESSCONTROL, lokistack_config.BUILD_CONFIG,
                                    lokistack_config.BUILD_SERVICE)

#
# OUTPUTFILE: lokistack-config.yaml
#
file = OutputFile_Kubernetes('lokistack-config.yaml')
out.append(file)

file.append(lokistack_config.build(lokistack_config.BUILD_ACCESSCONTROL, lokistack_config.BUILD_CONFIG))

shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))

#
# OUTPUTFILE: lokistack.yaml
#
file = OutputFile_Kubernetes('lokistack.yaml')
out.append(file)

file.append(lokistack_config.build(lokistack_config.BUILD_SERVICE))

shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))

#
# Write files
#
out.output(OutputDriver_Print())
# out.output(OutputDriver_Directory('/tmp/build-gke'))

Output:

****** BEGIN FILE: 001-app-namespace.yaml ********
apiVersion: v1
kind: Namespace
metadata:
  name: app-monitoring

****** END FILE: 001-app-namespace.yaml ********
****** BEGIN FILE: 002-lokistack-config.yaml ********
apiVersion: v1
kind: ServiceAccount
metadata:
  name: mylokistack
  namespace: app-monitoring
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: mylokistack-promtail
rules:
- apiGroups: ['']
  resources: [nodes, nodes/proxy, services, endpoints, pods]
  verbs: [get, watch, list]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: mylokistack-promtail
subjects:
- kind: ServiceAccount
  name: mylokistack
  namespace: app-monitoring
<...more...>
****** END FILE: 002-lokistack-config.yaml ********
****** BEGIN FILE: 003-lokistack.yaml ********
apiVersion: v1
kind: Service
metadata:
  name: mylokistack-loki-headless
  namespace: app-monitoring
  labels:
    app: mylokistack-loki
spec:
  clusterIP: None
  ports:
  - port: 3100
    protocol: TCP
    name: http-metrics
    targetPort: http-metrics
  selector:
    app: mylokistack-loki
---
apiVersion: v1
kind: Service
metadata:
  name: mylokistack-loki
<...more...>
****** END FILE: 003-lokistack.yaml ********
****** BEGIN FILE: create_gke.sh ********
#!/bin/bash

set -e
kubectl apply -f 001-app-namespace.yaml
kubectl config set-context --current --namespace=app-monitoring
kubectl apply -f 002-lokistack-config.yaml
kubectl apply -f 003-lokistack.yaml

****** END FILE: create_gke.sh ********

Credits

based on

Install Loki with Helm

Author

Rangel Reale (rangelspam@gmail.com)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kg_lokistack-0.7.8.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

kg_lokistack-0.7.8-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file kg_lokistack-0.7.8.tar.gz.

File metadata

  • Download URL: kg_lokistack-0.7.8.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.3

File hashes

Hashes for kg_lokistack-0.7.8.tar.gz
Algorithm Hash digest
SHA256 891cabe1ecc438833377dbb45c5ef133776e003758c5271a22136125283c0cd5
MD5 fe842d63cede4bb0b12b0e48ef45c2d7
BLAKE2b-256 d7571d3ef423517b0888bebad247c7ac3ba02283a1aef136355d7967015d1eac

See more details on using hashes here.

File details

Details for the file kg_lokistack-0.7.8-py3-none-any.whl.

File metadata

  • Download URL: kg_lokistack-0.7.8-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.3

File hashes

Hashes for kg_lokistack-0.7.8-py3-none-any.whl
Algorithm Hash digest
SHA256 4aa2a51e6d73d4c58c15415926d1b793c7c4db6994014070d2a6b2ef181b9cba
MD5 1b75fc72844749f19446d8c788ef616d
BLAKE2b-256 1003e439e2a3f0bbbb087497cb5c9f5dca216e91cea5e06e4c4ae7f04cd47a87

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page