KubraGen Builder: EFK
Project description
KubraGen Builder: EFK (Elasticsearch, Fluentd, Kibana)
kg_efk is a builder for KubraGen that deploys a EFK stack in Kubernetes. (Elasticsearch, Fluentd, Kibana)
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_efk
- Repository: https://github.com/RangelReale/kg_efk.git
- Documentation: https://kg_efk.readthedocs.org/
- PyPI: https://pypi.python.org/pypi/kg_efk
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_ShellScript, OutputFile_Kubernetes, \
OutputDriver_Print
from kubragen.provider import Provider
from kg_efk import EFKBuilder, EFKOptions
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: efk
#
efk_config = EFKBuilder(kubragen=kg, options=EFKOptions({
'namespace': OptionRoot('namespaces.mon'),
'basename': 'myefk',
'kubernetes': {
'volumes': {
'elasticsearch-data': {
'persistentVolumeClaim': {
'claimName': 'efk-storage-claim'
}
}
},
}
}))
efk_config.ensure_build_names(efk_config.BUILD_ACCESSCONTROL, efk_config.BUILD_SERVICE)
#
# OUTPUTFILE: efk-config.yaml
#
file = OutputFile_Kubernetes('efk-config.yaml')
out.append(file)
file.append(efk_config.build(efk_config.BUILD_ACCESSCONTROL))
shell_script.append(OD_FileTemplate(f'kubectl apply -f ${{FILE_{file.fileid}}}'))
#
# OUTPUTFILE: efk.yaml
#
file = OutputFile_Kubernetes('efk.yaml')
out.append(file)
file.append(efk_config.build(efk_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-efk-config.yaml ********
apiVersion: v1
kind: ServiceAccount
metadata:
name: myefk
namespace: app-monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: myefk-fluentd
rules:
- apiGroups: ['']
resources: [pods, namespaces]
verbs: [get, list, watch]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: myefk-fluentd
roleRef:
kind: ClusterRole
name: myefk-fluentd
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: myefk
namespace: app-monitoring
****** END FILE: 002-efk-config.yaml ********
****** BEGIN FILE: 003-efk.yaml ********
kind: Service
apiVersion: v1
metadata:
name: myefkelasticsearch-service
namespace: app-monitoring
labels:
app: myefkelasticsearch-pod-label-app
spec:
selector:
app: myefkelasticsearch-pod-label-app
clusterIP: None
ports:
- port: 9200
name: rest
- port: 9300
name: inter-node
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myefk-elasticsearch
namespace: app-monitoring
spec:
serviceName: myefk-elasticsearch
replicas: 3
selector:
matchLabels:
app: myefk-elasticsearch
template:
metadata:
labels:
app: myefk-elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
<...more...>
****** END FILE: 003-efk.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-efk-config.yaml
kubectl apply -f 003-efk.yaml
****** END FILE: create_gke.sh ********
Credits
based on
How To Set Up an Elasticsearch, Fluentd and Kibana (EFK) Logging Stack on Kubernetes
Author
Rangel Reale (rangelreale@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_efk-0.8.1.tar.gz
(10.6 kB
view details)
Built Distribution
kg_efk-0.8.1-py3-none-any.whl
(10.2 kB
view details)
File details
Details for the file kg_efk-0.8.1.tar.gz
.
File metadata
- Download URL: kg_efk-0.8.1.tar.gz
- Upload date:
- Size: 10.6 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 | fe7328156e3aa1cdcbb31d338d0811a9cc9fb429540b32909226e3b969aa9ae7 |
|
MD5 | d731a2d69789eab58d3f52089c2d0567 |
|
BLAKE2b-256 | 3736d7a95b79821d17fc37d02aa08278aa473949e7453f9ca7a7cda0b5215240 |
File details
Details for the file kg_efk-0.8.1-py3-none-any.whl
.
File metadata
- Download URL: kg_efk-0.8.1-py3-none-any.whl
- Upload date:
- Size: 10.2 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 | 010e0f7494b6d1e6bdf46e0b32b5064b8f3b162b3b0b9f04f262a3c13d3d706e |
|
MD5 | 97d08e563cfaa7e9e7445772403e68c8 |
|
BLAKE2b-256 | cbd5dcd5b117fc62387f8b53a049894ed4034a6950747f49e8941ede55f226de |