Ceph observability gaps: no toolbox / no admin path, plus osd.2 endurance clock to confirm #434
Closed
opened 2026-07-27 19:33:28 +00:00 by claude-bot
·
9 comments
No Branch/Tag Specified
main
claude/ma-pocketcasts-up-next-top-pick
claude/outpost-image-flux
claude/outpost-image-literal
claude/date-image-tag
docs/mosquitto-shelly-manager-settings-comment
review-bot-token-read-issue
alert-fix/issue-1505
t_1bc87417/konairius-registry
review-bot-on-request
review-bot-efficiency
ci-ansible-netbird
worktree-crowdsec-ma-imageproxy-whitelist
ci-image/claude-2.1.311
worktree-openbao-oidc-authentik
alert-fix/issue-1461
claude/authentik-2026.8.4
fix/ma-sendspin-mdns-net1
claude/ma-pocketcasts-up-next-mark-played
claude/ma-pocketcasts-up-next-playlist
revert/ma-po-token-server
alert-fix/issue-1453
claude/gitea-mcp-imagerepo
feat/ma-youtube-music-po-token-v2
feat/ma-youtube-music-po-token
claude/coredns-talos-owned-2
claude/coredns-talos-owned
claude/k8s-gateway-ingress-resolver
claude/egress-followups
feat/wiki-cronjobs
renovate/hermes-image
renovate/ci-minor-patch
renovate/all-minor-patch
claude/mqtt-admin-register
claude/shelly-manager-mdns
feat/wiki-encyclopedia-pilot
ci-image/claude-2.1.310
claude/mosquitto-legacy-auth-removal
claude/egress-lockdown
fix/gate-embedded-refresh-interval
fix/gate-embedded-browser-host
feat/authentik-gate-forwardauth
docs/drop-wildcard-references
fix/netbird-controller-disable-dns
feat/dns-labels-split-2
feat/dns-labels-split-1
fix/cloudflare-lb-sync-image-tag
feat/cloudflare-lb-sync
fix/wordpress-php85-php2shell
feat/update-os
chore/talos-1.13.12
atlas/talos-v1.13.12-cve-2026-99999
fix/gitea-webhook-sync-org-scope
atlas/kuma-mcb-www-retries
feat/hermes-gitea-pr-review-loop
atlas/traefik-chart-42
fix/monitoring-k8s-gateway-probe
alert-fix/issue-1081-rotator
ci-image/claude-2.1.306
alert-fix/issue-1084-v2
atlas/flux-2.9.6
alert-fix/issue-1082
feat/hermes-gitea-issues-kanban
worktree-restore-test-real
fix/hermes-multiplex-env
feat/hermes-experts
feat/hermes-ha-mcp
feat/kuma-status-page
fix/hermes-ha-updates-review
feat/hermes-alert-monitor
feat/hermes-ha-updates
fix/turn-tcp-router
fix/crowdsec-own-ca
fix/livekit-service-links
fix/crowdsec-lapi-transport-ca
feat/matrix-element-call
feat/kuma-public-coverage
feat/ha-matrix-nabu-secret
feat/hermes-matrix-cross-signing
feat/hermes-matrix
fix/wiki-basic-auth-in-service
proposal/traefik-vip-maglev-dsr
fix/hermes-dashboard-ws-ping-timeout
fix/hermes-dashboard-ws-ping-interval
fix/hermes-dashboard-refresh-token
feat/wiki-drop-gate
feat/wiki-oidc-provider
fix/hermes-soul-talos-node-names
claude/docs-konairius-main
claude/drop-k-renner-org-secrets
claude/prompts-main
claude/default-branch-main
feat/hermes-cli-logins
claude/plan-step0-claude-bot
alert-fix/issue-1363
claude/homelab-konairius
claude/konairius-org-secrets
fix/hermes-image-registry-bot
feat/hermes-use-custom-image
feat/hermes-image
feat/kuma-task5-monitors
feat/hermes-gitea
fix/hermes-configmap-namespace
feat/hermes-homelab-context
fix/uptime-kuma-script-mount
feat/kuma-task4-bootstrap
feat/kuma-task4-cluster
feat/kuma-sync-default-notifications
fix/hermes-image-policy
fix/kuma-sync-foreign-key-create
feat/hermes-agent
chore/kuma-sync-smoke-remove
feat/kuma-sync-smoke
feat/kuma-sync-deploy
ci-image/claude-2.1.303
renovate/authentik
feat/kuma-sync
docs/uptime-kuma-plan
chore/remove-autokuma
fix/uptime-kuma-ipv6
feat/autokuma-pilot-update
fix/drop-flux-image-automation-alert
feat/autokuma-pilot
feat/autokuma
fix/uptime-kuma-fail-guard
fix/uptime-kuma-setup-diagnostics
feat/uptime-kuma-vps
ci/ansible-image-hvac
claude/plan-homelab-konairius-main
fix/kubejobfailed-resolve-on-later-success
claude/homeassistant-konairius
claude/ha-config-sync-identity
feat/site-base-domain
claude/review-bot-repos-konairius
claude/authentik-konairius-images
claude/notes-renovate-konairius
claude/vsftpd-konairius-image
claude/registry-bot-read-scope
claude/registry-bot
ci-image/claude-2.1.302
claude/review-bot-approved
claude/review-bot-backends
fix/wp-pg-recovery-source
feat/review-bot-status
worktree-hcloud-wg-site
node-dns-via-k8s-gateway
chore/remove-paperclip
worktree-k8s-gateway-chart-4
fix/review-bot-approve-with-unverified
chore/remove-wiki-maintenance-ci
fix/review-bot-unique-tag
fix/review-bot-rereview
fix/review-bot-build-trigger
fix/review-bot-backoff-cap
fix/review-bot-rate-limit
chore/disable-old-pr-review
feat/review-bot-deploy
feat/review-bot-service
feat/pr-review-mistral
fix/gitea-mcp-public-gitea-url
alert-fix/issue-1242
alert-fix/issue-1241
fix/gitea-mcp-command
feat/gitea-mcp
claude/netbird-service-sync-pin
claude/gitea-public
feat/embed-knn-bench
claude/pr-review-latest-cli
ci-image/claude-2.1.296
chore/decommission-openproject
claude/pr-review-central
feat/openproject-authentik-oidc
fix/alloy-syslog-udm-cef-regex
alert-fix/issue-1217
alert-fix/issue-1214
atlas/ren-1363-openproject-seeder-order
atlas/ren-1367-gitea-1.27
atlas/ren-1367-gitea-pre-upgrade-snapshot
atlas/ren-1363-openproject
atlas/ren-1345-ops-image-jq
atlas/ren-1345-hermes-prometheus-read
atlas/ren-1345-bridge-agent-secrets
atlas/ren-802-retire-sml2mqtt
atlas/ren-953-remove-legacy-users
atlas/ren-1307-edge1-register
atlas/ren-1307-edge1-cred-receiver
atlas/ren-953-controller-ha-cert
atlas/ren-1256-prune-shellies-secret
atlas/ren-953-ha-mqtt-cert-sync
atlas/ren-1256-adopt-shellies-secret
atlas/ren-1203-eso-gitea-namespace
atlas/ren-1203-gitea-package-retention
atlas/ren-1196-agent-runtime-tzdata
atlas/ren-1017-remove-legacy-shellies
atlas/ren-1017-ht-wake-reland
atlas/ren-1017-shelly-30
atlas/ren-1167-revert-1183
alert-fix/issue-1184
atlas/ren-1017-ht-wake
atlas/ren-1017-shelly-group5c
atlas/ren-1017-shelly-group5b
atlas/ren-1080-controller-1d03144-rotate-hold
atlas/ren-1017-shelly-group5
atlas/ren-1017-shelly-group4
atlas/ren-1053-controller-a307693
atlas/ren-1017-shelly-group3
atlas/ren-1017-shelly-group2
atlas/ren-1017-shelly-group1
atlas/ren-1017-device-list
atlas/ren-1017-shelly-accounts
atlas/ren-953-agents-read-paperclip-pod
atlas/ren-953-agents-read
atlas/ren-953-ha-mqtt-tls
atlas/ren-953-ha-account
atlas/ren-953-evcc-cert
atlas/ren-953-evcc-account
atlas/ren-953-z2m-cert
atlas/ren-953-z2m-account
atlas/ren-953-health-probe-cert
atlas/ren-931-agent-shelly-manager
atlas/ren-900-controller-bump
atlas/ren-900-mosquitto-dynsec
atlas/ren-888-revoke-test-account
atlas/ren-888-mqtt-account-controller
atlas/ren-841-remove-repair-job
atlas/ren-841-k8s-plugin-termination-receipt
atlas/ren-841-lease-receipt-repair
atlas/ren-802-suspend-open3e-int-rotator
atlas/ren-826-remove-read-job
atlas/ren-826-room-setpoint-read
atlas/ren-809-remove-capture
atlas/ren-809-open3e-fbh-capture
atlas/ren-723-authentik-2026.8.3
atlas/ren-772-remove-rekey-job
atlas/ren-772-wp-repo4-rekey
atlas/ren-722-mdns-relay-v191-attach
atlas/ren-723-openbao-rolling
atlas/ren-722-dhcp-lease-renew
atlas/ren-722-cni-plugins-installer-v1.9.1
atlas/ren-723-influxdb-snapshot
atlas/ren-722-cni-plugins-v1.9.1
atlas/ren-722-job-force-annotations
atlas/ren-717-matrix-bridge-1791195981
atlas/ren-702-paperclip-cap-kill
atlas/ren-691-matrix-bridge-1791179547
atlas/ren-685-matrix-bridge-1791177680
ci-image/claude-2.1.289
atlas/ren-671-matrix-bridge-1791152484
atlas/ren-663-matrix-public
atlas/ren-587-matrix-bridge
atlas/ren-567-authentik-grant-types
atlas/ren-567-mas
atlas/ren-627-edge1-ssh-egress
atlas/ren-621-loki-read-gateway
atlas/ren-603-pclp-pg-memory
atlas/ren-583-gitea-pvc-volumename
atlas/ren-583-gitea-volume-60gi
atlas/ren-563-claude-session-resume
atlas/ren-563-revert-1111
atlas/ren-567-matrix
atlas/ren-563-acpx-session-resume
atlas/ren-544-argus-token-v3
atlas/ren-539-atlas-token-v3
atlas/ren-541-claude-auto-memory
atlas/ren-540-hestia-token-v3
atlas/ren-528-review-bot-verify-repo
atlas/ren-533-shelly-manager-probe
atlas/ren-525-rotate-argus-token
atlas/ren-509-rotate-agent-tokens
atlas/ren-487-hubble-relay
atlas/ren-488-govulncheck
atlas/ren-487-agent-pod-egress
atlas/ren-453-retire-immich-library
atlas/ren-451-restore-abort
atlas/ren-451-restore-test-skip-cnpg
alert-fix/issue-1095
atlas/ren-442-restore-capacity-gate
z2m-ws90-converter
alert-fix/issue-1089
atlas/ren-419-ephemeral-wear-alert
alert-fix/issue-1084
alert-fix/issue-1081
atlas/ren-414-agent-kubectl-sa
atlas/ren-411-agent-gitea-egress
atlas/ren-409-paperclip-14769
atlas/ren-405-k8s-plugin-dist
atlas/ren-401-kaniko-oom
atlas/ren-401-paperclip-patched-image
z2m-memory-limit
atlas/ren-350-beets-write-retry
fix/navidrome-native-api
atlas/ren-350-paperclip-lidarr-cnp
atlas/ren-350-beets-retry-skips
atlas/ren-350-beets-write
atlas/ren-350-beets-phase2
atlas/ren-350-beets-cronjob
atlas/ren-339-restore-test-teardown
atlas/ren-339-restore-roll
atlas/ren-339-restore-plugin
atlas/ren-339-ha-backup-cleanup
atlas/ren-339-ha-restore-test
atlas/ren-315-renovate-groups
atlas/ren-315-renovate-tool-install
atlas/ren-107-retention-divergence-alert
atlas/ren-159-remove-ren28-negative-probes
atlas/ren-302-claude-agent-acp
atlas/ren-298-agent-sandbox-v0.5.6
atlas/ren-294-ical-proxy-926ead0
atlas/ren-286-agent-runtime-own-workflow
atlas/ren-285-agent-sandbox-labels
atlas/ren-286-agent-runtime-images
atlas/ren-285-agent-sandbox
atlas/ren-148-paperless-ingress-scoping
atlas/ren-93-promql-gate
atlas/ren-268-ha-hacs-proxy
atlas/ren-266-hacs-versions
atlas/ren-245-ha-critical-alerts
atlas/ren-243-ha-window
feat/openbao-secret-exists-check
atlas/ren-239-ical-proxy-main-73b5d97
atlas/ren-238-ical-proxy-main-4783abe
atlas/ren-201-ical-proxy-gitea-image
atlas/ren-216-renovate
atlas/ren-152-wal-backlog-retune
atlas/ren-198-pin-kps-chart
atlas/ren-176-ha-pg-walstorage
atlas/ren-166-cilium-verdict-metric
atlas/ren-7-alert-contacts
atlas/ren-177-velero-cephfs-readonly-backuppvc
feat/paperclip-api-door
atlas/ren-186-cost-ledger-sync
atlas/ren-183-yaml-anchors
atlas/ren-161-promtool-ci
atlas/ren-163-ceph-nearfull-headroom
atlas/ren-7-restore-audiobooks
atlas/ren-127-podmonitor-comment
atlas/ren-165-wal-maxparallel-stage
atlas/ren-141-ha-pg-32gi
atlas/ren-147-cilium-agent-metrics-service
atlas/ren-142-negative-control-probe
atlas/ren-140-negative-test-probes
atlas/ren-102-flux-ksm-crs
atlas/ren-7-pilot-endpointmonitors
atlas/ren-131-openbao-unavailable-for
atlas/ren-106-narrow-eso-failed
atlas/ren-116-probe-citation-path
atlas/ren-103-scrape-doc-gaps
atlas/ren-6-imc-deploy
atlas/ren-100-externalsecret-healthcheck
atlas/ren-91-imagepolicy-total-order
atlas/ren-88-ceph-ec-pool-false-page
atlas/ren-86-paperclip-dependson-monitoring
atlas/ren-36-prometheus-read-path
docs/probe-egress-dependency-and-revert-recipe
docs/paperclip-claude-token
fix/paperclip-memory
docs/probe-cnp-egress-and-status-caveats
feat/ren-21-paperless-app-health-probe
feat/ren-21-navidrome-app-health-probes
alert-fix/issue-968
feat/paperclip-wiki-key
feat/lidarr
feat/wiki-api-key-paperclip
feat/paperclip-signup-off
feat/paperclip
feat/netbird-retire-vps-proxy
feat/navidrome
feat/immich-bulk-cutover
feat/immich-bulk-pvcs
feat/wiki-image-automation
chore/wiki-image-fact-drafter
chore/wiki-image-facts-page
chore/abs-drop-old-books-pvc
chore/wiki-image-judge-one-request
feat/abs-books-bulk
feat/libation-strip-branding
feat/cephfs-ec-bulk
feat/open3e-int-broker-user
feat/wiki-reloader
chore/wiki-image-phases-4-6
feat/wiki-anthropic-key
feat/wiki-service-write-token
chore/retire-python-wiki-index
feat/wiki-machine-door
chore/wiki-phase3-image
chore/wiki-phase2-image
chore/wiki-build-1790250017
feat/wiki-gate
fix/gitea-egress-wiki
feat/wiki-service-manifests
docs/proposal-wiki-web-api
alert-fix/issue-937
fix/alertmanager-info-inhibitor
feat/cephx-allowed-ciphers-aes256k
feat/cephx-drop-prior-csi-keys
ci/wiki-consolidate-tilde-paths
feat/cephx-csi-aes256k
ci/wiki-consolidate-in-ci
chore/talos-1.13.10
feat/drain-tolerant-singletons
ci/wiki-distill-skip-empty
ci/wiki-audit-script
fix/k8s-gateway-oci-chart
docs/network-traffic-classes-as-built
feat/node-ip-vlan-46
alert-fix/issue-920
feat/bird-attached-node0
feat/node-vlan-46-link
chore/cni-drop-stage-labels
feat/cni-sole-writer-converge-b2
feat/cni-sole-writer-converge-b1
chore/cni-stage-k8s-1
fix/whereabouts-reconciler-cordon
chore/cni-stage-k8s-2
chore/cni-stage-k8s-3
feat/cni-staged-sole-writer
feat/netbird-service-sync-phase2
feat/netbird-service-sync-phase1
chore/gitea-namespace-phase3
feat/gitea-namespace-phase2
feat/gitea-namespace-phase1
ci-image/claude-2.1.280
fix/ci-claude-refresh-mixed-pins
fix/align-ci-claude-pins
fix/ci-claude-bump-token-newline
worktree-fix-paperless-memory-limit
alert-fix/issue-897
alert-fix/issue-896
fix/wiki-maintenance-merge-verify
feat/pick-model-newest-among-comparable
feat/pick-model-typesafe
fix/wiki-maintenance-rebase-push
fix/wiki-maintenance-strip-secrets
fix/wiki-maintenance-image-2.1.278
feat/wiki-maintenance-ci
fix/wiki-index-commit-tags
fix/wiki-index-pin-digest-2
alert-fix/issue-880
fix/wiki-index-tree-paging
fix/wiki-index-pin-digest
fix/wiki-index-strip-credentials
fix/gitea-webhook-egress-wiki-index
fix/wiki-index-openbao-ingress
feat/wiki-index-deploy
feat/wiki-index-image
fix/eso-allow-ai
feat/wiki-embed
fix/multus-only-cni-writer
fix/cilium-cni-uninstall
feat/onebase-room-telemetry
fix/external-dns-scrape-policy
feat/dns-monitoring
fix/external-dns-annotation-prefix
fix/ftp-scanner-probe
fix/libation-accounts-persistence
fix/libation-pin-14.2.1
feat/ceph-read-affinity
fix/bird-local-cidr
feat/single-pod-table
docs/traffic-classes
feat/podpod-rules
fix/bird-static
fix/bird-digest
feat/bird-mesh2
feat/bird-kubectl
feat/bird-mesh
feat/bird-image-api
feat/bird-daemonset
alert-fix/issue-844
feat/bird-image
alert-fix/issue-843
feat/pod-egress-vlan47
docs/576-rejected-options
feat/antrea-eval
feat/nodeip-pod0
feat/cilium-native-pod0
feat/bgp-peer-ingress
feat/bgp-listen-ingress
feat/ingress-static-addressing
feat/k8s-net-split-phase-a
feat/cilium-pin-devices
chore/ci-k8s-2026-09-08
feat/flux-2.9.5
feat/ci-tool-pins
feat/openbao-seal-key-bootstrap
feat/openbao-static-seal
fix/openbao-alerts-immediate
feat/intel-gpu-dashboard
feat/intel-gpu-exporter
feat/intel-gpu-monitoring-resource
fix/reloader-configmap-annotations
netbird-proxy-protocol-digest
netbird-proxy-protocol-deploy
netbird-proxy-protocol
netbird-proxy-services-uid
netbird-proxy-services-deploy
netbird-proxy-services
proxy-watchdog-cooldown
proposal-node-roll-downtime
alert-fix/issue-808
lapi-transport-phase-2
ceph-address-ranges
fix/arp-flux-second-nic
rehearsal-san
osd-partlabel-no-ceph
lapi-transport-post-crds
san-host-device-nad
san-rollout
san-role-rename
ceph-20-cutover
rebuild-tooling
apply-set-hygiene
rebuild-image-resilience
cold-rebuild-ordering
fix/bootstrap-honour-vm-state
chore/remove-paperless-eval
issue-fix/789-cilium-node-ula
issue-fix/787-mdns-relay-supervisor
trmnl-firmware-sync-off
trmnl-device-tls
vmtest-flux
eval-script-fixes
alert-fix/issue-780
worktree-eval-script-fixes
eval-out-of-iac
paperless-eval-jobs
paperless-eval-fixes
paperless-eval-instance
crowdsec-tailer-polling
crowdsec-alerting
llama-single-slot
llama-ctx-revert
arm-crowdsec-proxy-1
fix-proxy-deploy-triggers
llama-ctx-fix
arm-crowdsec-proxy-2
llama-ctx-assist
crowdsec-metrics-dashboard
alert-fix/issue-761
embed-batch-fix
crowdsec-lapi-service-annotations
ha-llm-agent
paperless-eval
crowdsec-bouncer-unpack-on-host
embed-bgem3
crowdsec-bouncer-fetch-controller
crowdsec-edge-lapi
alert-fix/issue-750
embed-pvc
immich-drop-pgvectors
fix-stale-migration-docs
embed-oom
embed-eval
paperless-reloader
close-paperless-data-migration
paperless-llm
paperless-3x
llama-gate-flow
llama-authentik-gate
alert-fix/issue-726
llama-single-alias
llama-alias-order
llama-model-alias
ai-eval
remove-netbird-backup
llama-thinking-alias
llama-split-embed
netbird-backup-vacuum-into
llama-server
intel-gpu-device-plugin
ceph-osd-by-label
alert-fix/issue-714
alert-fix/issue-712
cilium-track-untracked-settings
proposal-cilium-single-owner
fix-cilium-bootstrap-seed
woodpecker-agent-probe
add-missing-probes
paperless-http-probes
gatus-hardening
gatus-drop-file-check
gatus-config-reload
drop-pbs2-gatus
generic-blackbox-alert
probe-ci-openbao
cleanup-nas-1-remnants
ci-image/claude-2.1.250
woodpecker-deployment-dispatch-rest
woodpecker-deployment-dispatch-pilot
fix-monitor-selector-comments
fix-wear-alert-design
trim-comments-authentik
trim-comments-apps
trim-comments-helm
trim-comments-netpol
trim-comments-infra
trim-comments-talos
alert-fix/issue-675
trim-manifest-comments
drop-unused-barman-creds
hetzner-creds-shared-path
ephemeral-framing
disk-dashboard-smart
smartctl-privileged
smartctl-seccomp
smartctl-exporter
disk-dashboard-status
disk-dashboard
ci-image/claude-2.1.247
kaniko-fork-rest
kaniko-replacement
proposal-traffic-classes
runbook-remote-rebuild-possible
runbook-cold-rebuild-baremetal
alert-fix/issue-657
velero-stale-60h
talos-1-13-9
ceph-mon-disk-warn-default
ceph-san-pool-widen
no-ipv6-on-vlan-parents
alert-fix/issue-649
alert-fix/issue-645
openbao-alerting
openbao-ha-3-replicas
alert-fix/issue-635
ceph-san-cleanup
ceph-san-nad
whereabouts-ipam
talos-1-12-11
mdns-relay
netbird-rotate-migration
runbook-stale-sockets
drop-monitoring-agent
ansible-drop-dead-plays
ansible-rotate-netbird
ansible-drop-pve
tofu-state-verify
alert-fix/issue-603
drop-decommissioned-dns
tofu-drop-proxmox-vm
drop-pve-monitoring
talos-factory-installer
cilium-reloader
drop-talos-image-seeding
cilium-vlan-bypass
restore-replicapool-size
restore-cephfs-metadata-size
alert-fix/issue-592
ceph-readd-neptune
k8s-3-baremetal
ceph-drop-neptune
alert-fix/issue-591
ceph-readd-saturn
alert-fix/issue-590
remove-vm-605
remove-vm-151
k8s-2-baremetal
ceph-remove-k8s-2
baremetal-conversion-runbook
restore-after-jupiter
alert-fix/issue-579
ceph-readd-k8s-1
k8s-1-network-fix
alert-fix/issue-573
k8s-1-ephemeral-on-crucial
alert-fix/issue-571
alert-fix/issue-569
immich-window-scaledown
ceph-exclude-k8s-1
crowdsec-cpu-requests
jupiter-baremetal-u2
velero-restore-test-monthly
ws90-reporting-config
alert-fix/issue-562
fix-ws90-merge-overclaim
fix-ws90-debounce-rationale
worktree-z2m-2.13.0-ws90-debounce
kaniko-no-debug-image
alert-fix/issue-557
alert-fix/issue-554
alert-fix/issue-550
bump-stale-ci-images
document-pool-no-redundancy-meaning
fix-ci-pool-blocks-osd-maintenance
rotate-cephx-daemon-keys
fix-ceph-health-alert
repoint-ci-workspaces
ci-throwaway-cephfs
rollout-archive-timeout
archive-timeout-gf-pg
reduce-pg-wal-fpi
reduce-wal-segment-padding
fix-prometheus-cardinality
fix-barman-sidecar-visible
feat-paperless-data-repoint
feat-paperless-data-block
fix-cnpg-write-tuning
fix-emptydir-tmpfs
fix-trmnl-renderer-tmpfs
feat-ha-recorder-db-url
alert-fix/issue-525
fix-cnpg-backup-alerting
feat-ha-recorder-postgres
fix-ceph-mon-write-amplification
fix-ceph-replica-size-2
fix-ceph-deferred-write-amplification
fix-326-noise-log-suppression
fix-381-z2m-discovery
decommission-rustfs-lxc
document-hairpin-id-diff
fix-rustfs-shim-replace
fix-rotator-woodpecker-url
alert-fix/issue-510
bump-woodpecker-cli
migrate-woodpecker-stage3
migrate-woodpecker-stage2
fix-eso-woodpecker-namespace
migrate-woodpecker-namespace
ceph-mon-data-avail-warn
revert-image-gc-thresholds
fix-ceph-toolbox-and-gc-thresholds
fix-cilium-policy-map-exhaustion
drop-stale-hetzner-dns
fix-outpost-callback-path
bump-ci-k8s-pins
fix-wordpress-config-extra
wordpress-renner-uno
fix-authentik-double-passkey-touch
pin-ical-proxy-image
fix-trmnl-renderer-reloader
fix-trmnl-render-lang
fix-trmnl-session-expiry
fix-trmnl-graphite-theme
fix-trmnl-token-lifetime
fix-trmnl-renderer-runtime
feat-trmnl-renderer
fix-trmnl-lb-address
feat-trmnl-terminus
retire-dead-monitoring
heating-can-supervisorctl
fix-native-teardown
edge-capability-groups
heating-can-image
edge-bootstrap-selfcontained
prometheus-pve-hostnames
inventory-pve-hostnames
chrony-allow-ipv6
ntp-vrrp-linklocal-and-dad-sequencing
ntp-service-address-health-gated
ntp-anycast-capture-drift
ntp-health-clock-correctness
chrony-comment-correction
worktree-chrony-makestep
ci-k8s-validate
rotator-repin
mosquitto-rotate-health
alert-fix/issue-454
alert-fix/issue-452
mosquitto-rotation-proposal
mosquitto-openbao
mosquitto-drop-apk
paperless-drop-apk
cni-plugins-image
multus-drop-apk
fix-jq-comment
rename-alpine-jq
fix-ci-yaml
z2m-seed-drop-apk
z2m-interview-watchdog
alert-fix/issue-439
before-k8s-migration
latest
Labels
Clear labels
apollo
atlas
clio
daedalus
hestia
Hermes expert: Immich, Audiobookshelf, Libation, Navidrome, Music Assistant
Hermes expert: Talos, Flux, network, Authentik, Matrix, monitoring
Hermes expert: Paperless, wiki, ical-proxy, TRMNL, websites
Hermes expert: Gitea, Woodpecker, Renovate, review-bot, Hermes
Hermes expert: Home Assistant, IoT, MQTT, ESPHome, voice
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: konairius/homelab#434
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Found during the 2026-07-27 issue round. The triggering warning is gone; what remains are two durable gaps and one hardware clock worth tracking.
The triggering event — resolved, benign
CephClusterreportedHEALTH_WARN / BLUESTORE_SLOW_OP_ALERT: 1 OSD(s) experiencing slow operations in BlueStoreearlier today. It has since cleared on its own:Investigation concluded it was a self-limiting tail-latency event driven by the Sunday
restore-testsweep, which cleared at 12:04:47Z. Redundancy was never at risk and the affected OSD's hardware is fine. No action needed for the warning itself — this issue is about what the investigation could not do.Gap 1 — Ceph has never been scraped (fix already up as PR #432)
Verified: zero
ceph_*series in Prometheus, and zero activerook-cephscrape targets — for all 79 days of the cluster's life.Rook creates those ServiceMonitors at runtime with its own label, so nothing in this repo can relabel them. 12 of 30 ServiceMonitors were being dropped cluster-wide (the 2 rook ones plus 10 authentik outposts).
PR #432 fixes the scrape side. Two follow-ups belong here rather than there:
ceph_*series actually appear, add a CephPrometheusRule(carryingrelease: kube-prometheus-stack) alerting onceph_health_status == 1 for: 6h, plus a device-wear rule. Adding one before #432 lands would silently never fire.Gap 2 — there is no read-only path to Ceph internals at all
There is no
rook-ceph-toolsdeployment, and no other route works. Verified by attempting each:kubectl -n rook-ceph get deploy rook-ceph-toolsexecintorook-ceph-osd-2, runceph device lsauth: unable to find a keyring on /etc/ceph/..., cephx disabled,handle_auth_bad_methodexecintorook-ceph-mon-aexecintorook-ceph-operator/etc/ceph/empty;ceph -s→ObjectNotFound('RADOS object not found (error calling conf_read_file)')execintorook-ceph-mgrSo
ceph status,ceph health detail,ceph osd df tree,ceph osd perfandceph device lsare all unreachable during an incident. Combined with Gap 1, the storage layer had neither live introspection nor metric history — the two independent ways you would normally diagnose it.Deploying the toolbox (or mounting a read-only client keyring somewhere reachable) would close this cheaply. If it is deliberately omitted, that reasoning should be written down where the next investigation will find it — I could not locate any comment explaining its absence.
Item 3 — drive endurance clock (needs confirmation)
The investigation reported osd.2's drive at 83% endurance used, projecting replacement around Dec 2026, sourced from Ceph's
devicehealthmodule (which stores SMART history to RADOS — which is why that series survived despite Gap 1).⚠️ I could not independently confirm this figure, precisely because of Gap 2. Flagging it rather than asserting it. Confirm once a toolbox exists:
or read SMART directly on the Proxmox host backing osd.2. If 83% is accurate this is not urgent but it is a real, dated hardware clock and deserves tracking rather than rediscovery. (Note: SSH to homelab hosts must be serial — parallel connections trip UDM rate-limiting and produce spurious "host down" faults.)
Status check on both gaps, plus a live HEALTH_WARN that turns out to be structural.
Gap 1 — closed. Ceph is scraped now.
PR #432 landed and worked.
ceph_health_statusreturns a value from Prometheus today, against "zeroceph_*series for all 79 days" when this was filed.Gap 2 — still open, unchanged.
kubectl get deploy -n rook-cephlists 19 deployments;rook-ceph-toolsis not among them. No admin path exists.New: the cluster is in HEALTH_WARN right now, and the threshold collides with kubelet's by construction
mon b runs on k8s-2. Mons are on
hostPath(no PVCs exist inrook-ceph), so this is the node's/var:k8s-2's
/varis a single 59.93 GiB/dev/vda5. 29.81% free is 70.19% used.Now the two relevant thresholds:
mon_data_avail_warn— 30% free (upstream default; warn),mon_data_avail_crit5% (err).imageGCHighThresholdPercent— 70% used, set inkubernetes/talos/patches/cluster.yaml:40and confirmed live via/api/v1/nodes/k8s-2/proxy/configz.imageGCLowThresholdPercent: 60.70% used is 30% free. kubelet is configured to let the image cache grow to precisely the point where Ceph starts warning. This is not a runaway — it is the steady-state behaviour of the current configuration, and it will recur on whichever node currently holds the most images. That also makes MON_DISK_LOW useless as a signal, because it fires as a matter of routine.
Not urgent:
mon_data_avail_critis 5% free, and kubelet reclaims at 70% used, so the disk should not approach the error threshold.Proposed fix
Lower the kubelet image-GC thresholds in
kubernetes/talos/patches/cluster.yamlso reclaim happens before Ceph's warn point — e.g.imageGCHighThresholdPercent: 60/imageGCLowThresholdPercent: 50, leaving ≥40% free at worst against Ceph's 30% floor. Cost is a smaller image cache and more re-pulls; this cluster runs Spegel, which blunts that.Two caveats before anyone acts:
talosctl patch machineconfig. Same trap as the Cilium inline manifest in #495.mon_data_avail_warnis still the 30% default, because doing so needsceph config get mon mon_data_avail_warn— which requires exactly the admin path Gap 2 says does not exist. The gap this issue was filed about is what blocks closing out the finding.Leaving open for Gap 2 and the threshold decision.
Applied the kubelet threshold change to k8s-2 only. It did not work, and the reasoning in #500 was wrong. Recording the measurement.
What happened
talosctl patch machineconfigapplied cleanly without a reboot; kubelet picked upimageGCHigh=60 imageGCLow=50; node stayed Ready, 50 pods running, no ImagePull or CrashLoop fallout. GC then fired as intended:GC deleted 28 images and freed ~1.3 GB of blobs — and free space did not move at all.
Why
/var/lib/containerdbreaks down as:The dominant consumer is overlayfs snapshots, not image blobs. Those are unpacked layers belonging to in-use images plus container writable layers, and image GC cannot reclaim them. #500 assumed the ~19 GB of snapshots would be freed alongside their images at roughly 2.9x the compressed size; that is wrong, because unused images share most of their layers with in-use ones. Deleting the unused image references freed only their unshared blobs.
Remaining headroom for GC is now ~0.7 GB (8.62 GB content minus 7.92 GB in use). Further sweeps will free essentially nothing. k8s-2 will keep hovering at ~31% free and dip under Ceph's 30% line on any growth.
The actual shape of the problem
Confirmed with the toolbox this PR added — its first useful act:
So the threshold really is the 30% default, which I could not verify before. And the mon's own data is 106 MB (
/var/lib/rook).A 106 MB database is being judged against a 60 GB filesystem it shares with 29 GB of container storage. No amount of image-cache tuning fixes that; the mon's free-space check is measuring something that has nothing to do with Ceph.
Options, best first
mon.volumeClaimTemplate. The mon then measures its own filesystem, and MON_DISK_LOW becomes a real signal again instead of a proxy for image churn. Structural fix; needs a mon migration, so it wants care.cluster.yamlnotes the VM disk was already raised once.mon_data_avail_warn. Now settable via the toolbox, but it is silencing a check rather than fixing it, and it is cluster-global.On the merged change
60/50 is harmless but no longer justified: it keeps the image cache near minimum and buys more re-pulls for ~1.3 GB. Worth reverting to 70/60 unless someone wants the leaner cache for its own sake. k8s-1 and k8s-3 are untouched — I stopped after one node, which is what surfaced this.
Threshold change is live and verified end to end.
Propagation went CR spec -> Rook -> Ceph as expected;
spec.cephConfig.monlanded first via Flux, then the operator pushed it into the mon config store. Reconciled from git, so no liveceph config setdrift.Margin it buys, at the moment of writing:
k8s-2 previously sat ~1.5 points above the old 30% line and crossed it on ordinary image-cache growth. It now has ~11 points, which is roughly 7 GB of
/var— against a mon database of ~106 MB.mon_data_avail_critis untouched at 5%, andCephMonDiskLowstill watches/vardirectly at the 30% mark, so the node-filling risk is still surfaced independently of what Ceph thinks. The change narrows a misfiring alert; it does not remove the signal.Status of this issue
ceph_*series confirmed present.mon_data_avail_warn,mon_data_avail_critand the 106 MB mon size were established, none of which were knowable before.release: kube-prometheus-stackselector) — untouched, still open.Leaving open for the endurance clock and the ServiceMonitor audit.
Status update after the toolbox landed — all gaps except the hardware clock are now closed, and the endurance figure needed correcting.
Gap 1 — scraping: CLOSED
ceph_*series present, includingceph_health_status.serviceMonitorSelectoris now{}, so all 32 ServiceMonitors are selected, not just the 18 carryingrelease: kube-prometheus-stack. Nothing can be label-dropped any more.Gap 1 — Ceph PrometheusRule: DONE, except the wear rule
kubernetes/apps/monitoring-rules/prometheusrule-ceph.yamlexists and carries the right label:CephHealthWarn(ceph_health_status == 1for 6h, exactly as specified),CephHealthError(== 2for 5m),CephMonDiskLow.The device-wear rule is NOT possible as written. There is no wear metric exported:
ceph_device_*/ SMART / percentage-used series exists.ceph_health_detailexposes named checks, butDEVICE_HEALTHis not among them.ceph device lsshows an EMPTYLIFE EXPECTANCYcolumn — Ceph is not making predictions, so the health check that would drive such an alert never fires.Writing a wear rule today would silently never fire, which is the exact failure mode this issue warned about. It needs either Ceph devicehealth prediction enabled, or a SMART exporter (node-exporter textfile collector). Flagging rather than shipping a dead rule.
Gap 2 — toolbox: CLOSED
rook-ceph-toolsis deployed and 1/1.Item 3 — endurance clock: CONFIRMED, and the numbers were wrong
The reported 83% for osd.2 is now 87%, and more importantly this is not one drive. All three OSDs are the same model wearing in lockstep:
Derived from Ceph devicehealth SMART history (
ceph device get-health-metrics), using the measured 102-day trend rather than a lifetime average.osd.2 detail:
percentage_used87,available_spare100% (threshold 5%),data_units_written298,713,850 (~153 TB),media_errors18,power_on_hours19,967 (~2.3 y).Why this matters more than a single drive
The wear rates are near-identical because Ceph replicates every write to all three OSDs. They therefore wear in lockstep by design, and all three exhaust rated endurance within roughly two months of each other. Replication protects against independent failure; it does not help when three identical drives of the same age and same write load reach end-of-rated-life together.
Calibration
percentage_used100% means the manufacturer TBW rating is consumed, not that the drive dies — andavailable_spareis still 100%, which is the better near-term health signal. So this is a procurement clock, not an imminent outage. But it is dated, it is correlated across the whole storage tier, and the first date is ~3 months out.Suggest staggering replacement (e.g. osd.2 well before late November) so the three do not age back into lockstep afterwards.
🤖 Generated with Claude Code
Root cause of the drive wear found and fixed. It was not client traffic.
The finding: the monitors were a quarter of all cluster writes
The three Ceph mons were writing 240 GB/day between them — 80 GB/day each — for a ~106 MB database. That was ~62% of all OS-disk writes and roughly a quarter of everything the cluster wrote, more than every client workload combined.
Mechanism.
mon_compact_on_trim(upstream defaulttrue) compacts the RocksDB prefix including paxos on every trim. Withpaxos_trim_minat 250 and ~99k transactions/day, that is hundreds of forced range compactions per day, each rewriting the store.The churn is not cluster activity. 99% of paxos versions are cluster log and mgr stats:
Every Rook-operator poll (
mgr stat,versions,status,report,osd dump— 23 audit entries/min/mon) becomes a cluster-log entry, hence a paxos transaction, replicated to all three mons.Fixes and MEASURED results
#520 —
mon_compact_on_trim: false, plusmon_compact_on_start: trueas a compensating control.#519 —
replicapoolandcephfs-data0tosize 2 / min_size 1; cephfs metadata deliberately left at 3.Combined, at the device layer:
vda(OS disks)nvme(Ceph OSDs)The
vdadrop (-259 GB/day) independently matches the predicted mon saving (~228 GB/day).Effect on the endurance clock
Remaining life roughly doubles, and with
size 2the three drives no longer wear in perfect lockstep.Correction
#518 (
bluestore_prefer_deferred_size_ssd65536 -> 0) produced no measurable improvement. BlueStore counters showwrite_smallis only 0.4% of write volume (4 GB vs 1,015 GBwrite_big), so that setting could never have mattered at this scale. It remains correct — HDD tuning on SSD — but it was not the cause and should not be credited as the fix.Also: cAdvisor
container_fs_writes_bytes_totalroughly double-counts here (425 GB/day for OSDs wherenvme0n1shows 212; 155 GB/day for mons where cgroupio.statshows 80). Useful for ranking writers, not for absolute figures. Every number above comes from cgroupio.stat, kernel diskstats, or SMART.Pending verification (24 h)
Device figures above are a 10-minute window. Baselines for a clean re-check:
20260819-000812:percentage_used=87,data_units_written=298713850. Compare20260820->20260821for a pure post-change 24 h delta (the change landed 2026-08-19T13:00:23Z, so the 08-20 sample straddles it).rate(node_disk_written_bytes_total[24h])is entirely post-change.Remaining
ROOK_CEPH_STATUS_CHECK_INTERVALet al., unset in repo so defaults apply). #520 removed the amplification; this would remove the churn. Much smaller win now that mons are at 4 GB/day.size=3on exactly 3 OSDs was the structural error — every drive absorbed 100% of cluster writes, so wear was correlated by construction. Build the new cluster with enough OSDs that replication actually spreads load.🤖 Generated with Claude Code
Verified result of the trmnl renderer fix (#529) and the emptyDir survey (#530).
trmnl-renderer: 34 GB/day -> ~18 MB/day
/tmpis nowtmpfs 512M(27M used) instead of/dev/vda5. Renderer confirmed still working:Completed: Entrance e-ink panel in 8788ms | webhook: 200 OK.Cluster-wide OS-disk writes: 215 GB/day -> 123 GB/day (-43%) for a one-line change.
What it was
Not volume — cadence.
schedules.template.jsonrenders on"* * * * *", so Chrome launched 1440x/day and each launch created, filled and deleted a/tmp/puppeteer_dev_chrome_profile-*. At rest/tmpheld under 8 MB. Pure churn onto the node filesystem, for data that never outlived the render.The trap:
emptyDir: {}withoutmedium: Memoryis node storage. Easy to read as "ephemeral, therefore free".Survey (#530)
23 emptyDir declarations in the repo, only 2 RAM-backed. 12 more converted — but honestly, only trmnl mattered. Ranking every pod by OS-disk writes shows nothing emptyDir-driven after it; each converted volume measured 8.0K in the running pod. The remaining value is correctness plus keeping
mosquitto/auth(generated passwd/acl) off the node filesystem.Running total for the day
Roughly a 58% reduction in total cluster disk writes.
Correction on the recorder migration
The Home Assistant SQLite -> Postgres move (#521/#524) did NOT deliver a cluster-level reduction, contrary to what I projected when proposing it. Measured over 8h+:
HA own writes genuinely fell 4.4x, and 2.4 years of statistics survived intact, so the migration stands on its own merits. But it was not the lever I claimed. The real levers were the Ceph mon compaction fix (240 GB/day) and this renderer (34 GB/day) — both found by looking at where writes actually landed rather than where they were assumed to.
Endurance clock
Worth re-deriving once these settle. At ~432 GB/day across 3 drives with size=2, per-drive load is well down from the 210 GB/day that produced the ~0.137 points/day wear rate behind the Nov 2026 projection.
🤖 Generated with Claude Code
24h verification of #519 (pool size 2) and #520 (mon_compact_on_trim=false)
Both landed 2026-08-19T13:00:23Z. Measured 2026-08-20T13:07Z, so every
[24h]window below sits entirely after the change.Device write rates — held
Mon writes — held, but my earlier estimate was optimistic
Baseline 80 GB/day/mon. The 10-minute-window estimate posted earlier said 4 GB/day. The sustained figure over the mon container lifetime (started 2026-08-19T15:45:34Z, i.e. entirely post-change) is:
A 90% reduction — and a correction: the real rate is 2x the short-window estimate. The 600s sample undercounted.
Mon store size — no regression
145 MB, against a ~125 MB baseline and the 1 GB investigation threshold. Disabling compact_on_trim has not produced unbounded store growth after 24h. Worth re-checking at 7d, since that is the failure mode this parameter guards against.
Health and settings
mon_compact_on_trim = false— confirmed appliedreplicapoolsize 2,cephfs-data0size 2,cephfs-metadatasize 3 — confirmedceph health: HEALTH_WARN, but only the CVE-2025-30156 insecure-key-type warnings tracked in #527 (mute expires 2026-09-02). No PG, data, or redundancy warnings arising from size 2.SMART wear — methodology correction
The 20260819 to 20260820 SMART interval is not a clean post-change window. Ceph samples device health at ~00:08 daily and the change landed at 13:00, so that interval is ~13h pre-change and ~11h post-change. It reads 326,586 data units = 167 GB/day, which is a blend rather than a result.
The clean measure for the same drive is the device counter: osd.2 (k8s-1 nvme0n1) sits at 99 GB/day over a full post-change 24h.
Historical baseline from the 104 retained samples:
Projection for the 13 points osd.2 has remaining:
This corrects an earlier estimate of roughly May 2027, which assumed a larger reduction than was actually measured. March 2027 is the defensible figure.
percentage_usedis still 87% on osd.2, unchanged since 2026-08-18. The first fully clean SMART interval will be 20260820 to 20260821; pts/day should be recomputed then to confirm the projection against observed wear rather than against host writes.Summary
The improvement held: roughly half the cluster write volume is gone, and the mon fix delivered 90%. Two figures need correcting from the earlier short-window estimates — mon writes are 8 GB/day rather than 4, and the endurance projection is March 2027 rather than May 2027.
Verified all three items against the live cluster. Two closed, one confirmed, one follow-up split out.
Gap 1 — Ceph scraping: CLOSED
PR #432 landed.
ceph_*series are present and in active use —ceph_health_detail,ceph_pool_bytes_used,ceph_pool_stored,ceph_pool_metadataall back live alert rules today. The root cause is structurally gone: PrometheusserviceMonitorSelectoris now{}(selects all), so operator-created ServiceMonitors carrying their own labels are no longer dropped. 32 ServiceMonitors are selected. That also answers the follow-up asking whether other operators were affected — nothing can be dropped by label mismatch now.The requested PrometheusRule exists (
kubernetes/apps/monitoring-rules/prometheusrule-ceph.yaml):CephHealthWarn,CephHealthError,CephPoolLostRedundancy,CephMonDiskLow.The device-wear rule from that same follow-up was never written, and cannot be as specified. Split out below.
Gap 2 — no read-only path to Ceph: CLOSED
rook-ceph-toolsis deployed (kubernetes/infrastructure/rook-ceph-cluster/toolbox.yaml).ceph -s,ceph health detail,ceph osd df,ceph device ls,ceph osd pool ls detailandceph osd ok-to-stopall work. It carried the entire #545/#547 investigation.One operational caveat found while using it: CephX key rotation invalidates a running toolbox's keyring — the pod holds the pre-rotation admin key and returns
[errno 13] RADOS permission denieduntil restarted. The toolbox is defined in this repo, not managed by Rook, so nothing repairs it automatically.Item 3 — endurance clock: CONFIRMED, and worse than the estimate
The 83% figure was right in kind but the projection was optimistic. Measured from
ceph device get-health-metrics:All three are Crucial CT1000P3PSSD8. Current write rate on osd.2 is 152 GB/day (867,429 data units over 70 h). Remaining 13% projects two ways: ~150 days linear-on-bytes, or ~75 days on the observed wear cadence (a steady ~140 h per 1%; 86->87% took 140 h). Wear is accelerating per byte written, normal for aging QLC —
available_spareis still 100%, so this is not spare-block exhaustion.So 2.5-5 months from 2026-08-21, not December. Tracked with a replacement plan (Samsung PM983, slot shuffle, one-node-at-a-time procedure). Note the wiki recorded these as "Crucial P2" —
lspcimislabels them because the P3 reuses the P2's PCI IDc0a9:540a; the model string is CT1000P3PSSD8. Corrected.Closing. The device-wear alerting gap continues separately.
Correction to the endurance projection in my previous comment. I wrote "2.5-5 months". The 2.5 was derived wrongly and the range needs a stated denominator.
Method error. I took the observed calendar cadence of ~140 h per 1% of wear — measured while the drives were writing 400+ GB/day — and projected it onto a future writing less, after the write-reduction work. Calendar cadence is not portable across a change in write rate. Recomputed from bytes:
Two denominators, ~3x apart:
percentage_usedis the controller's own estimate and includes the drive's internal write amplification; TBW is a host-bytes warranty figure. They do not measure the same thing.Write rate is not a single number either — 152 GB/day over the last 70 h, 231 GB/day over the last 210 h, with one 24 h window alone at 576 GB.
Plan on 3-5 months (drive indicator, conservative). Wear is also accelerating per byte written — 1% cost 2.22 TB at the 73->74% step versus 1.58 TB at 86->87% — so the remaining 13% likely costs under 20.5 TB, favouring the low end.
This does not change the conclusion that replacement is needed well before the drives are a year older, but the earlier "projecting replacement around Dec 2026" in the issue body and my "2.5 months" were both wrong, in opposite directions and for different reasons.