Skip to content

Instantly share code, notes, and snippets.

@metalmatze
Last active March 6, 2019 00:10
Show Gist options
  • Save metalmatze/c69561a76c57aa867abc6dbc03b58a62 to your computer and use it in GitHub Desktop.
Save metalmatze/c69561a76c57aa867abc6dbc03b58a62 to your computer and use it in GitHub Desktop.
kube-prometheus-demo
.demo-last-step
#!/usr/bin/env bash
# Only requirement upfront is a running Kubernetes cluster.
# I am using https://github.com/kubernetes-sigs/kind to start a local cluster inside of Docker.
# Make sure to have the correct KUBECONFIG:
# export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
DEMO=`pwd`
# Setting up our dependencies in the cluster
. setup.sh --source-only
# make sure to have this in your $PATH. I actually have it in my $GOPATH
. ~/src/github.com/bwplotka/demo-nav/demo-nav.sh
clear
# Show the current setup
r "kubectl version --short"
r "kubectl get namespaces"
r "kubectl get pods --all-namespaces"
# kube-prometheus
r "kube-prometheus" "clear && figlet -w 132 kube-prometheus"
r "cd ~/src/github.com/coreos/prometheus-operator && pwd && ls -lh"
r "tree -L 1 contrib/"
r "cd contrib/kube-prometheus && pwd && ls -lh"
# Deploy the default stack to Kubernetes
r "ls ./manifests"
r "kubectl apply -f ./manifests"
r "watch kubectl get pods --all-namespaces"
r "# Let's check Prometheus, Alertmanager and Grafana"
# Setting up an application
r "User Apps" "clear && figlet -w 132 User App"
r "cat sample-app/manifests/deployment.yaml" "bat ~/src/github.com/mxinden/self-service-monitoring-workshop/sample-app/manifests/deployment.yaml"
r "cat sample-app/manifests/service.yaml" "bat ~/src/github.com/mxinden/self-service-monitoring-workshop/sample-app/manifests/service.yaml"
r "cat sample-app/manifests/service-monitor.yaml" "bat ~/src/github.com/mxinden/self-service-monitoring-workshop/sample-app/manifests/service-monitor.yaml"
r "cat sample-app/manifests/prometheus-rule.yaml" "bat ~/src/github.com/mxinden/self-service-monitoring-workshop/sample-app/manifests/prometheus-rule.yaml"
r "kubectl -n default apply -f sample-app/manifests/" "kubectl -n default apply -f ~/src/github.com/mxinden/self-service-monitoring-workshop/sample-app/manifests"
r "watch kubectl -n default get pods"
r "open http://localhost:9090" "xdg-open 'http://localhost:9090/graph?g0.range_input=1h&g0.expr=container_cpu_usage_seconds_total%7Bcontainer_name%3D%22sample-app%22%7D&g0.tab=0' &> /dev/null"
r "open http://localhost:9090" "xdg-open 'http://localhost:9090/graph?g0.range_input=1h&g0.expr=container_memory_usage_bytes%7Bcontainer_name%3D%22sample-app%22%7D&g0.tab=0' &> /dev/null"
# Thanos
r "Thanos" "clear && figlet -w 132 Thanos"
r "cd ~/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus"
r "cp example-thanos.jsonnet contrib/kube-prometheus/example.jsonnet" "cp ${DEMO}/example-thanos.jsonnet ~/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus/example.jsonnet"
r "git diff example.jsonnet"
r "Generate manifests with jsonnet" "cd ~/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus && bash build.sh && echo done"
r "git status manifests/"
r "git diff manifests/prometheus-prometheus.yaml"
r "bat ${DEMO}/thanos-config.yaml"
r "kubectl -n monitoring create secret generic thanos-objstore-config --from-file=thanos.yaml=${DEMO}/thanos-config.yaml"
r "kubectl apply -f ./manifests"
r "watch kubectl get pods --all-namespaces"
navigate true
local kp =
(import 'kube-prometheus/kube-prometheus.libsonnet') +
(import 'kube-prometheus/kube-prometheus-thanos.libsonnet') + {
_config+:: {
namespace: 'monitoring',
},
} + {
prometheus+: {
prometheus+: {
spec+: {
evaluationInterval: '1s',
scrapeInterval: '1s',
replicas: 1,
ruleNamespaceSelector: {},
},
},
},
};
{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } +
{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } +
{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } +
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }
local kp =
(import 'kube-prometheus/kube-prometheus.libsonnet') + {
_config+:: {
namespace: 'monitoring',
},
} + {
prometheus+: {
prometheus+: {
spec+: {
evaluationInterval: '1s',
scrapeInterval: '1s',
replicas: 1,
ruleNamespaceSelector: {},
},
},
},
};
{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } +
{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } +
{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } +
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: minio
namespace: minio
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: minio/minio
args:
- server
- /storage
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
---
apiVersion: v1
kind: Service
metadata:
name: minio
namespace: minio
spec:
type: ClusterIP
ports:
- port: 9000
targetPort: 9000
protocol: TCP
selector:
app: minio
#!/usr/bin/env bash
DEMO=$(pwd)
cp example.jsonnet ~/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus/example.jsonnet
cd ~/src/github.com/coreos/prometheus-operator/contrib/kube-prometheus
bash build.sh
kubectl create namespace minio
kubectl apply -f $DEMO/minio.yaml
#!/usr/bin/env bash
# Clean the Kubernetes cluster from everything done in the demo
kubectl delete deployment sample-app
kubectl delete service sample-app
kubectl delete servicemonitors sample-app
kubectl delete prometheusrules sample-app-rules
kubectl -n monitoring delete prometheus k8s
kubectl -n monitoring delete alertmanager main
kubectl -n monitoring delete ds node-exporter
kubectl -n monitoring delete deployment grafana
kubectl -n monitoring delete deployment kube-state-metrics
kubectl -n monitoring delete deployment prometheus-adapter
kubectl -n monitoring delete deployment prometheus-operator
kubectl -n monitoring delete deployment thanos-query
kubectl -n monitoring delete statefulset thanos-compactor
kubectl -n monitoring delete statefulset thanos-store
kubectl -n monitoring delete secrets thanos-objstore-config
kubectl -n minio delete deployment minio
kubectl -n minio delete service minio
type: s3
config:
bucket: thanos
endpoint: minio.minio.svc.cluster.local:9090
access_key: minio
secret_key: minio123
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment