Files
cluster-knaster/platform/proxmox/ansible/playbooks/monitoring-k3s.yml
T
Robert RappandClaude Opus 5.5 4ac251715e
ci / test (push) Failing after 23s
k3s: Pod-Monitoring in Grafana (Task 6.5)
kube-state-metrics (NodePort 30808) und ServiceAccount prometheus-infra (nur
nodes/metrics) im Cluster; Prometheus auf infra liest kubelet/cAdvisor per TLS
gegen die k3s-CA. Ziele per file_sd aus kubectl get nodes, cAdvisor auf die
nötigen Reihen begrenzt. Dashboard "k3s – Pods" (Vorgabe nex), Alerts K3s*
nur mit notify. Playbook monitoring-k3s.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 16:31:03 +02:00

75 lines
3.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Pod-Monitoring (Task 6.5): kube-state-metrics und Lesezugang für Prometheus in k3s, danach der Infra-Stack
# (Prometheus-Jobs kubelet/cadvisor/kube-state-metrics, file_sd-Ziele, Dashboard „k3s – Pods“). Läuft auf ops:
# ansible-playbook playbooks/monitoring-k3s.yml
# Token und CA landen auf ops unter /root/.config/knaster (0600), die Rolle infra-stack kopiert sie nach infra.
- name: k3s – kube-state-metrics und Zugang für Prometheus
hosts: localhost
connection: local
gather_facts: false
vars:
manifests: "{{ playbook_dir }}/../../../../deploy/k8s/monitoring"
token_file: /root/.config/knaster/k3s-prometheus.token
ca_file: /root/.config/knaster/k3s-ca.crt
tasks:
- name: Manifeste anwenden
ansible.builtin.command: kubectl apply -f {{ manifests }}/{{ item }}
loop: [prometheus-access.yaml, kube-state-metrics.yaml]
register: apply
changed_when: "'configured' in apply.stdout or 'created' in apply.stdout"
- name: Warten, bis kube-state-metrics bereit ist
ansible.builtin.command: kubectl -n kube-system rollout status deployment/kube-state-metrics --timeout=180s
changed_when: false
- name: Token des ServiceAccounts prometheus-infra lesen (Secret wird vom Controller befüllt)
ansible.builtin.shell: >
set -o pipefail;
kubectl -n kube-system get secret prometheus-infra-token -o go-template='{{ "{{" }}.data.token{{ "}}" }}' | base64 -d
args: {executable: /bin/bash}
register: token
until: token.stdout | length > 0
retries: 10
delay: 2
changed_when: false
no_log: true
- name: Token als Datei auf ops ablegen (600, nie ausgeben)
ansible.builtin.copy:
content: "{{ token.stdout }}"
dest: "{{ token_file }}"
mode: "0600"
no_log: true
# Die kubelet-Zertifikate sind von k3s-server-ca signiert und tragen die Knoten-IP (19.10. geprüft).
- name: CA des Clusters lesen
ansible.builtin.shell: >
set -o pipefail;
kubectl -n kube-system get secret prometheus-infra-token -o go-template='{{ "{{" }}index .data "ca.crt"{{ "}}" }}' | base64 -d
args: {executable: /bin/bash}
register: ca
changed_when: false
- name: CA als Datei auf ops ablegen
ansible.builtin.copy:
content: "{{ ca.stdout }}\n"
dest: "{{ ca_file }}"
mode: "0600"
- name: Zugang prüfen (cAdvisor eines Knotens mit Token und CA)
ansible.builtin.shell: >
set -o pipefail;
ip=$(kubectl get node k3s -o jsonpath='{.status.addresses[?(@.type=="InternalIP")].address}');
curl -fsS -m 10 --cacert {{ ca_file }} -H "Authorization: Bearer $(cat {{ token_file }})"
https://$ip:10250/metrics/cadvisor | grep -c '^container_memory_working_set_bytes'
args: {executable: /bin/bash}
register: probe
changed_when: false
- name: Ergebnis
ansible.builtin.debug:
msg: "cAdvisor auf k3s erreichbar, {{ probe.stdout }} Reihen container_memory_working_set_bytes"
- name: Infra-LXC – Prometheus, Ziele und Dashboard
hosts: infra
roles: [infra-stack]