KubraGen Builder: Prometheus
Project description
KubraGen Builder: Prometheus
kg_prometheus is a builder for KubraGen that deploys a Prometheus server in Kubernetes.
KubraGen is a Kubernetes YAML generator library that makes it possible to generate configurations using the full power of the Python programming language.
- Website: https://github.com/RangelReale/kg_prometheus
- Repository: https://github.com/RangelReale/kg_prometheus.git
- Documentation: https://kg_prometheus.readthedocs.org/
- PyPI: https://pypi.python.org/pypi/kg_prometheus
Example
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_Kubernetes, OutputFile_ShellScript, \
OutputDriver_Print
from kubragen.provider import Provider
from kg_prometheus import PrometheusBuilder, PrometheusOptions, PrometheusConfigFile, PrometheusConfigFileOptions, \
PrometheusConfigFileExt_Kubernetes
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: prometheus
#
prometheus_config_file = PrometheusConfigFile(options=PrometheusConfigFileOptions({
'config': {
'merge_config': {
'global': {
'scrape_interval': '1m',
}
},
},
'scrape': {
'prometheus': {
'enabled': True,
'extra_config': {
'scrape_interval': '15s',
},
}
}
}), extensions=[
PrometheusConfigFileExt_Kubernetes(),
])
prometheus_config = PrometheusBuilder(kubragen=kg, options=PrometheusOptions({
'namespace': OptionRoot('namespaces.mon'),
'basename': 'myprometheus',
'config': {
'prometheus_config': prometheus_config_file,
},
'kubernetes': {
'volumes': {
'data': {
'persistentVolumeClaim': {
'claimName': 'prometheus-storage-claim'
}
}
},
'resources': {
'statefulset': {
'requests': {
'cpu': '150m',
'memory': '300Mi'
},
'limits': {
'cpu': '300m',
'memory': '450Mi'
},
},
},
}
}))
prometheus_config.ensure_build_names(prometheus_config.BUILD_ACCESSCONTROL, prometheus_config.BUILD_CONFIG,
prometheus_config.BUILD_SERVICE)
#
# OUTPUTFILE: prometheus-config.yaml
#
file = OutputFile_Kubernetes('prometheus-config.yaml')
out.append(file)
file.append(prometheus_config.build(prometheus_config.BUILD_ACCESSCONTROL, prometheus_config.BUILD_CONFIG))
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
#
# OUTPUTFILE: prometheus.yaml
#
file = OutputFile_Kubernetes('prometheus.yaml')
out.append(file)
file.append(prometheus_config.build(prometheus_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-prometheus-config.yaml ********
apiVersion: v1
kind: ServiceAccount
metadata:
name: myprometheus
namespace: app-monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: myprometheus
rules:
- apiGroups: ['']
resources: [nodes, nodes/metrics, services, endpoints, pods]
verbs: [get, list, watch]
- apiGroups: [extensions]
resources: [ingresses]
verbs: [get, list, watch]
- nonResourceURLs: [/metrics, /metrics/cadvisor]
verbs: [get]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: myprometheus
subjects:
- kind: ServiceAccount
name: myprometheus
namespace: app-monitoring
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: myprometheus
---
apiVersion: v1
kind: ConfigMap
metadata:
name: myprometheus-config
namespace: app-monitoring
data:
prometheus.yml: |
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
scrape_interval: 15s
- job_name: kubernetes-apiservers
kubernetes_sd_configs:
- {role: endpoints}
<...more...>
****** END FILE: 002-prometheus-config.yaml ********
****** BEGIN FILE: 003-prometheus.yaml ********
kind: Service
apiVersion: v1
metadata:
name: myprometheus
namespace: app-monitoring
spec:
selector:
app: myprometheus
ports:
- protocol: TCP
port: 9090
targetPort: 9090
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myprometheus
namespace: app-monitoring
<...more...>
****** END FILE: 003-prometheus.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-prometheus-config.yaml
kubectl apply -f 003-prometheus.yaml
****** END FILE: create_gke.sh ********
Credits
based on
prometheus-community/helm-charts
Author
Rangel Reale (rangelreale@gmail.com)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
kg_prometheus-0.8.0.tar.gz
(11.4 kB
view details)
Built Distribution
File details
Details for the file kg_prometheus-0.8.0.tar.gz
.
File metadata
- Download URL: kg_prometheus-0.8.0.tar.gz
- Upload date:
- Size: 11.4 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2ab3ea0e5d3a7942f106c659a3a9a49b2b3936d4e7e7aeae195f2620f124446 |
|
MD5 | bb7d200bdafdbcc2fa969f08bf3ff5a7 |
|
BLAKE2b-256 | 2c377d5409eb119041efbcb6912256ef9943f7d55f792aace16f8eaebe5c58e2 |
File details
Details for the file kg_prometheus-0.8.0-py3-none-any.whl
.
File metadata
- Download URL: kg_prometheus-0.8.0-py3-none-any.whl
- Upload date:
- Size: 12.5 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a3b72a5609329054145c73994f6fa25bc4710bfae637a55520158a06e4cfdd9 |
|
MD5 | 317231a021b9c6c9b8ea8a6087f92673 |
|
BLAKE2b-256 | 512915edb9e12de9c8af1faf513f7db3027bbc1a6c80cbf72b9c039d2860b3cb |