Skip to content

etcd 3.5.12 (etcd-operator v0.4.5) breaks consistent watches in k8s 1.35 tenants (RequestWatchProgress unsupported) #3080

Closed

Description

Problem

Cozystack provisions modern Kubernetes tenants (e.g. k8s 1.35 via the Kamaji-backed Kubernetes app) but ships etcd-operator v0.4.5 (etcd.aenix.io/v1alpha1), whose default etcd image is quay.io/coreos/etcd:v3.5.12.

k8s ≥1.31 enables ConsistentListFromCache (GA, and locked-to-true in 1.35), which relies on the storage feature RequestWatchProgress. The apiserver only enables RequestWatchProgress when etcd is ≥3.5.13 (or ≥3.4.31). On etcd 3.5.12 it logs:

feature_support_checker.go: RequestWatchProgress feature is not supported by "https://etcd.<tenant>.svc:2379" endpoint

As a result, any consistent watch (e.g. ?watch=true&allowWatchBookmarks=true) fails with a 500 inside the watch stream:

{"type":"ERROR","object":{"kind":"Status","status":"Failure",
 "message":"a watch stream was requested by the client but the required storage feature RequestWatchProgress is disabled",
 "reason":"InternalError","code":500}}

Clients that watch aggregated/extension APIs (for example the Cozystack dashboard / cozyportal SPA, which lists resources via *.cozystack.io aggregated APIs with bookmarks) then get a continuous 502 storm on resource views.

Why it can't be worked around in the tenant

  • ConsistentListFromCache is GA-locked in k8s 1.35: setting --feature-gates=ConsistentListFromCache=false makes kube-apiserver refuse to start (cannot set feature gate ConsistentListFromCache to false, feature is locked to true).
  • The etcd.aenix.io/v1alpha1 EtcdCluster CRD has no spec.image or spec.version field, and etcd-operator v0.4.5 has no env/flag to override the default etcd image — so the etcd version cannot be raised per-cluster. It is fixed by the operator binary.

Fix

Ship the new etcd-operator (etcd-operator.cozystack.io/v1alpha2, which exposes spec.version and defaults a newer etcd) — tracked in #2859 — or, as a stopgap, bump the v0.4.5 default etcd image to ≥3.5.13.

Environment

  • Cozystack 1.5.x (verified 1.5.0 / 1.5.1 / main all pin etcd-operator chart appVersion v0.4.5)
  • Tenant: Kamaji-backed Kubernetes app, k8s 1.35
  • etcd: quay.io/coreos/etcd:v3.5.12

Related: #2859.

Activity

  1. added
    kind/bugCategorizes issue or PR as related to a bug
    area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)
    area/databaseIssues or PRs related to managed databases (postgres, mariadb, redis, etcd, kafka, clickhouse)
    priority/important-soonMust be staffed and worked on either currently, or very soon, ideally in time for the next release
    triage/acceptedIndicates an issue is ready to be actively worked on
    on Jul 1, 2026
  2. myasnikovdaniil commented on Nov 6, 2026

    @myasnikovdaniil
    Contributor

    Main has etcd 3.6.11 as default now (packages/extra/etcd/values.yaml), the 3.5.12 default was replaced first in #3122.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/databaseIssues or PRs related to managed databases (postgres, mariadb, redis, etcd, kafka, clickhouse)area/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)kind/bugCategorizes issue or PR as related to a bugpriority/important-soonMust be staffed and worked on either currently, or very soon, ideally in time for the next releasetriage/acceptedIndicates an issue is ready to be actively worked on

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions