--- # Create StorageClass for manual monitoring volumes - name: Create Manual Monitoring StorageClass kubernetes.core.k8s: definition: apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: manual-monitoring provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer # Create monitoring data directories - name: Create Monitoring Data Directories file: path: "{{ item }}" state: directory mode: '0777' owner: root group: root loop: - /data/monitoring/prometheus - /data/monitoring/grafana - /data/monitoring/alertmanager # Create Prometheus PV - name: Create Prometheus Persistent Volume kubernetes.core.k8s: definition: apiVersion: v1 kind: PersistentVolume metadata: name: prometheus-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteOnce hostPath: path: /data/monitoring/prometheus storageClassName: manual-monitoring # Create Grafana PV - name: Create Grafana Persistent Volume kubernetes.core.k8s: definition: apiVersion: v1 kind: PersistentVolume metadata: name: grafana-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /data/monitoring/grafana storageClassName: manual-monitoring # Create Alertmanager PV - name: Create Alertmanager Persistent Volume kubernetes.core.k8s: definition: apiVersion: v1 kind: PersistentVolume metadata: name: alertmanager-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /data/monitoring/alertmanager storageClassName: manual-monitoring # Create monitoring namespace - name: Create Monitoring Namespace kubernetes.core.k8s: definition: apiVersion: v1 kind: Namespace metadata: name: monitoring # Create Grafana PVC (needed before Helm chart runs) - name: Create Grafana Persistent Volume Claim kubernetes.core.k8s: definition: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-data namespace: monitoring spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: manual-monitoring volumeName: grafana-pv # Create HTTPRoute for Grafana - name: Create Grafana HTTPRoute kubernetes.core.k8s: definition: apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: grafana-route namespace: monitoring spec: parentRefs: - name: main-gateway namespace: traefik sectionName: grafana-https hostnames: - "grafana.svc.pguia.com" rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: monitoring-grafana port: 80