167 lines
5.0 KiB
YAML
167 lines
5.0 KiB
YAML
---
|
|
- name: Check if Helm is installed
|
|
command: helm version --short
|
|
register: helm_check
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Install Helm
|
|
shell: curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
|
when: helm_check.rc != 0
|
|
changed_when: true
|
|
|
|
- name: Ensure observability namespace exists
|
|
command: kubectl create namespace {{ observability_namespace }}
|
|
register: create_observability_ns
|
|
failed_when: create_observability_ns.rc != 0 and "AlreadyExists" not in create_observability_ns.stderr
|
|
changed_when: create_observability_ns.rc == 0
|
|
|
|
- name: Set Grafana admin password
|
|
set_fact:
|
|
grafana_password_effective: "{{ grafana_admin_password if grafana_admin_password | length > 0 else lookup('password', '/dev/null length=32 chars=ascii_letters,digits') }}"
|
|
|
|
- name: Write kube-prometheus-stack values
|
|
copy:
|
|
dest: /tmp/kube-prometheus-stack-values.yaml
|
|
mode: "0644"
|
|
content: |
|
|
grafana:
|
|
enabled: true
|
|
adminPassword: {{ grafana_password_effective }}
|
|
persistence:
|
|
enabled: true
|
|
storageClassName: {{ grafana_storage_class }}
|
|
size: {{ grafana_storage_size }}
|
|
service:
|
|
type: ClusterIP
|
|
prometheus:
|
|
prometheusSpec:
|
|
retention: 7d
|
|
storageSpec:
|
|
volumeClaimTemplate:
|
|
spec:
|
|
storageClassName: {{ prometheus_storage_class }}
|
|
accessModes: ["ReadWriteOnce"]
|
|
resources:
|
|
requests:
|
|
storage: {{ prometheus_storage_size }}
|
|
alertmanager:
|
|
enabled: false
|
|
kubeEtcd:
|
|
enabled: false
|
|
kubeControllerManager:
|
|
enabled: false
|
|
kubeScheduler:
|
|
enabled: false
|
|
|
|
- name: Add Prometheus Helm repo
|
|
command: helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
|
|
register: add_prom_repo
|
|
failed_when: add_prom_repo.rc != 0 and "already exists" not in add_prom_repo.stderr
|
|
changed_when: add_prom_repo.rc == 0
|
|
|
|
- name: Add Grafana Helm repo
|
|
command: helm repo add grafana https://grafana.github.io/helm-charts
|
|
register: add_grafana_repo
|
|
failed_when: add_grafana_repo.rc != 0 and "already exists" not in add_grafana_repo.stderr
|
|
changed_when: add_grafana_repo.rc == 0
|
|
|
|
- name: Update Helm repos
|
|
command: helm repo update
|
|
changed_when: false
|
|
|
|
- name: Install kube-prometheus-stack
|
|
command: >-
|
|
helm upgrade --install kube-prometheus-stack prometheus-community/kube-prometheus-stack
|
|
--namespace {{ observability_namespace }}
|
|
--version {{ prometheus_chart_version }}
|
|
--values /tmp/kube-prometheus-stack-values.yaml
|
|
--wait
|
|
--timeout 10m
|
|
changed_when: true
|
|
|
|
- name: Write Loki values
|
|
copy:
|
|
dest: /tmp/loki-values.yaml
|
|
mode: "0644"
|
|
content: |
|
|
loki:
|
|
auth_enabled: false
|
|
commonConfig:
|
|
replication_factor: 1
|
|
storage:
|
|
type: filesystem
|
|
singleBinary:
|
|
replicas: 1
|
|
persistence:
|
|
enabled: true
|
|
storageClass: {{ loki_storage_class }}
|
|
size: {{ loki_storage_size }}
|
|
test:
|
|
enabled: false
|
|
monitoring:
|
|
selfMonitoring:
|
|
enabled: false
|
|
lokiCanary:
|
|
enabled: false
|
|
|
|
- name: Install Loki
|
|
command: >-
|
|
helm upgrade --install loki grafana/loki
|
|
--namespace {{ observability_namespace }}
|
|
--version {{ loki_chart_version }}
|
|
--values /tmp/loki-values.yaml
|
|
--wait
|
|
--timeout 10m
|
|
changed_when: true
|
|
|
|
- name: Write Promtail values
|
|
copy:
|
|
dest: /tmp/promtail-values.yaml
|
|
mode: "0644"
|
|
content: |
|
|
config:
|
|
clients:
|
|
- url: http://loki-gateway.{{ observability_namespace }}.svc.cluster.local/loki/api/v1/push
|
|
|
|
- name: Install Promtail
|
|
command: >-
|
|
helm upgrade --install promtail grafana/promtail
|
|
--namespace {{ observability_namespace }}
|
|
--version {{ promtail_chart_version }}
|
|
--values /tmp/promtail-values.yaml
|
|
--wait
|
|
--timeout 10m
|
|
changed_when: true
|
|
|
|
- name: Create Grafana Loki datasource
|
|
command: kubectl apply -f -
|
|
args:
|
|
stdin: |
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: grafana-datasource-loki
|
|
namespace: {{ observability_namespace }}
|
|
labels:
|
|
grafana_datasource: "1"
|
|
data:
|
|
loki-datasource.yaml: |
|
|
apiVersion: 1
|
|
datasources:
|
|
- name: Loki
|
|
type: loki
|
|
access: proxy
|
|
url: http://loki-gateway.{{ observability_namespace }}.svc.cluster.local
|
|
isDefault: false
|
|
changed_when: true
|
|
|
|
- name: Show observability access details
|
|
debug:
|
|
msg: |
|
|
Observability stack deployed.
|
|
Namespace: {{ observability_namespace }}
|
|
Grafana (tailnet): kubectl -n {{ observability_namespace }} port-forward svc/kube-prometheus-stack-grafana 3000:80
|
|
Prometheus (tailnet): kubectl -n {{ observability_namespace }} port-forward svc/kube-prometheus-stack-prometheus 9090:9090
|
|
Grafana admin password: {{ grafana_password_effective }}
|