An easy way to add reporting to Elasticsearch Kibana 7.x and Grafana 6.x on Kubernetes with Skedler Reports

Prakash Iyyanarappan
Skedler
Published in
4 min readJun 21, 2019

There is a simple and effective way to add reporting for your Elasticsearch Kibana 7.x (including Open Distro for Elasticsearch) or Grafana 6.x applications that are deployed to Kubernetes. In this part of the article, you are going to learn how to deploy Skedler Reports for Elasticsearch Kibana and Grafana applications to Kubernetes with ease.

What is Kubernetes?

For those that haven’t ventured into container orchestration, you’re probably wondering what Kubernetes is. Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

Kubernetes (“k8s” for short), was a project originally started at, and designed by Google, and is heavily influenced by Google’s large scale cluster management system, Borg. More simply, k8s gives you a platform for managing and running your applications at scale across multiple physical (or virtual) machines.

Kubernetes offers the following benefits:

  • Workload Scalability
  • High Availability
  • Designed for deployment

Deploying Skedler Reports to Kubernetes

If you haven’t already downloaded Skedler Reports, please download it from. Review the www.skedler.com documentation to get started.

Creating a K8s ConfigMap

Kubernetes ConfigMaps allows the containerized applications to become portable without worrying about configurations. Users and system components can store configuration data in ConfigMap. In Skedler Reports ConfigMaps can be used to store database connection string information such as datastore settings, port number, server information, and file locations, log directory, etc.

If Skedler Reports defaults are not enough, one may want to customize reporting.yml through a ConfigMap. Please refer to Reporting.yml and ReportEngineOptions Configuration for all available attributes.

1. Create a file called skedler-configmap.yaml in your project directory and paste the following

skedler-configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
name: skedler-config
labels:
app: skedler
data:
reporting.yml: |
---
#**************BASIC SETTINGS************
#port: 3000
#host: "0.0.0.0"
#*******SKEDLER SECURITY SETTINGS*******
#skedler_anonymous_access: true
#Skedler admin username `skedlerAdmin`
#Allows you to change Skedler admin password. By default the admin password is set to `skedlerAdmin`
#skedler_password: skedlerAdmin
#*******INDEX SETTINGS***********
#skedler_index: ".skedler"
ui_files_location: "/var/lib/skedler/uifiles"
log_dir: "/var/lib/skedler/log"
#****************DATASTORE SETTINGS*************
####### ELASTICSEARCH DATASTORE SETTINGS ########
# The Elasticsearch instance to use for all your queries.
#elasticsearch_url: "http://localhost:9200"
#skedler_elasticsearch_username: user
#skedler_elasticsearch_password: pass
######## DATABASE DATASTORE SETTINGS ############
#You can configure the database connection by specifying type, host, name, user and password
#as separate properties or as on string using the url properties.
#Either "mysql" and "sqlite", it's your choice
#database_type: "mysql"
#For `mysql` database configuration
#database_hostname: 127.0.0.1
#database_port: 3306
#database_name: skedler
#database_history_name: skedlerHistory
#database_username: user
#database_password: pass
#For `sqlite` database configuration only, path relative to data_path setting
#database_path: "/var/lib/skedler/skedler.db"
#database_history_path: "/var/lib/skedler/skedlerHistory.db"

2. To deploy your configmap, execute the following command,

kubectl create -f skedler-configmap.yaml

Creating Deployment and Service

To deploy our Skedler Reports, we’re going to use the “skedler-deployment” pod type. A deployment wraps the functionality of Pods and Replica Sets to allow you to update your application. Now that our Skedler Reports application is deployed, we need a way to expose it to traffic from outside the cluster. To this, we’re going to add a Service inside the skedler-deployment.yaml file. We’re going to open up a NodePort directly to our application on port 30000.

1.Create a file called skedler-deployment.yaml in your project directory and paste the following

skedler-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: skedler-reports
labels:
app: skedler
spec:
replicas: 1
selector:
matchLabels:
app: skedler
template:
metadata:
labels:
app: skedler
spec:
containers:
- name: skedler
image: skedler/reports:latest
imagePullPolicy: Always
command: ["/opt/skedler/bin/skedler"]
ports:
- containerPort: 3000
volumeMounts:
- name: skedler-reports-storage
mountPath: /var/lib/skedler
- name: skedler-config
mountPath: /opt/skedler/config/reporting.yml
subPath: reporting.yml
volumes:
- name: skedler-reports-storage
- name: skedler-config
configMap:
name: skedler-config
---
apiVersion: v1
kind: Service
metadata:
name: skedler
labels:
app: skedler
spec:
selector:
app: skedler
ports:
- port: 3000
protocol: TCP
nodePort: 30000
type: LoadBalancer

2. For deployment, execute the following command,

kubectl create -f skedler-deployment.yaml

3. To get your deployment with kubectl, execute the following command,

kubectl get deployments

4. We can get the service details by executing the following command,

kubectl get services

Now, Skedler will be deployed in 30000 port.

Accessing Skedler

Skedler Reports can be accessed from the following URL, http://<hostIP>:30000

To learn more about creating reports, visit Skedler documentation site.

Summary

This blog was a very quick overview of how to get a Skedler Reports for Elasticsearch Kibana 7.x and Grafana 6.x application up and running on Kubernetes with the least amount of configuration possible. Kubernetes is an incredibly powerful platform that has many more features than we used today. We hope that this article gave a headstart and saved you time.

--

--