diff --git a/prepare-vms/lib/commands.sh b/prepare-vms/lib/commands.sh index e409f2f4..f668ced0 100644 --- a/prepare-vms/lib/commands.sh +++ b/prepare-vms/lib/commands.sh @@ -498,12 +498,12 @@ _cmd_helmprom() { if i_am_first_node; then kubectl -n kube-system get serviceaccount helm || kubectl -n kube-system create serviceaccount helm - helm init --service-account helm + sudo -u docker -H helm init --service-account helm kubectl get clusterrolebinding helm-can-do-everything || kubectl create clusterrolebinding helm-can-do-everything \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:helm - helm upgrade --install prometheus stable/prometheus \ + sudo -u docker -H helm upgrade --install prometheus stable/prometheus \ --namespace kube-system \ --set server.service.type=NodePort \ --set server.service.nodePort=30090 \ diff --git a/slides/k8s/prometheus.md b/slides/k8s/prometheus.md index b6777a6c..f0cb2a92 100644 --- a/slides/k8s/prometheus.md +++ b/slides/k8s/prometheus.md @@ -12,7 +12,7 @@ - an *alert manager* to notify us according to metrics values or trends -- We are going to deploy it on our Kubernetes cluster and see how to query it +- We are going to use it to collect and query some metrics on our Kubernetes cluster --- @@ -145,7 +145,28 @@ scrape_configs: (it will even be gentler on the I/O subsystem since it needs to write less) -[Storage in Prometheus 2.0](https://www.youtube.com/watch?v=C4YV-9CrawA) by [Goutham V](https://twitter.com/putadent) at DC17EU +- Would you like to know more? Check this video: + + [Storage in Prometheus 2.0](https://www.youtube.com/watch?v=C4YV-9CrawA) by [Goutham V](https://twitter.com/putadent) at DC17EU + +--- + +## Checking if Prometheus is installed + +- Before trying to install Prometheus, let's check if it's already there + +.exercise[ + +- Look for services with a label `app=prometheus` across all namespaces: + ```bash + kubectl get services --selector=app=prometheus --all-namespaces + ``` + +] + +If we see a `NodePort` service called `prometheus-server`, we're good! + +(We can then skip to "Connecting to the Prometheus web UI".) --- @@ -210,20 +231,41 @@ We need to: - Install Prometheus on our cluster: ```bash - helm install stable/prometheus \ - --set server.service.type=NodePort \ - --set server.persistentVolume.enabled=false + helm upgrade prometheus stable/prometheus \ + --install \ + --namespace kube-system \ + --set server.service.type=NodePort \ + --set server.service.nodePort=30090 \ + --set server.persistentVolume.enabled=false \ + --set alertmanager.enabled=false ``` ] -The provided flags: +Curious about all these flags? They're explained in the next slide. -- expose the server web UI (and API) on a NodePort +--- -- use an ephemeral volume for metrics storage -
- (instead of requesting a Persistent Volume through a Persistent Volume Claim) +class: extra-details + +## Explaining all the Helm flags + +- `helm upgrade prometheus` → upgrade release "prometheus" to the latest version ... + + (a "release" is a unique name given to an app deployed with Helm) + +- `stable/prometheus` → ... of the Chart `prometheus` in repo `stable` + +- `--install` → if the app doesn't exist, create it + +- `--namespace kube-system` → put it in that specific namespace + +- And set the following *values* when rendering the Chart's templates: + + - `server.service.type=NodePort` → expose the Prometheus server with a NodePort + - `server.service.nodePort=30090` → set the specific NodePort number to use + - `server.persistentVolume.enabled=false` → do not use a PersistentVolumeClaim + - `alertmanager.enabled=false` → disable the alert manager entirely --- @@ -235,7 +277,7 @@ The provided flags: - Figure out the NodePort that was allocated to the Prometheus server: ```bash - kubectl get svc | grep prometheus-server + kubectl get svc --all-namespaces | grep prometheus-server ``` - With your browser, connect to that port @@ -292,7 +334,7 @@ This query will show us CPU usage across all containers: container_cpu_usage_seconds_total ``` -- The suffix of the metrics name tells us: +- The suffix of the metrics name tells us: - the unit (seconds of CPU) @@ -486,3 +528,21 @@ class: extra-details - see [this comment](https://github.com/prometheus/prometheus/issues/2204#issuecomment-261515520) for an overview - or [this blog post](https://5pi.de/2017/11/09/use-prometheus-vector-matching-to-get-kubernetes-utilization-across-any-pod-label/) for a complete description of the process + +--- + +## In practice + +- Grafana is a beautiful (and useful) frontend to display all kinds of graphs + +- Not everyone needs to know Prometheus, PromQL, Grafana, etc. + +- But in a team, it is valuable to have at least one person who know them + +- That person can set up queries and dashboards for the rest of the team + +- It's a little bit likeknowing how to optimize SQL queries, Dockerfiles ... + + Don't panic if you don't know these tools! + + ... But make sure at least one person in your team is on it 💯