This is an automated email from the ASF dual-hosted git repository.

ronething pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new b274316e chore: log when kubernetes cluster version does not meet 
minimum requirement (#2693)
b274316e is described below

commit b274316e75e2e9bfb21ebde30a9ef61746fb9639
Author: Ashing Zheng <[email protected]>
AuthorDate: Wed Jan 7 11:34:34 2026 +0800

    chore: log when kubernetes cluster version does not meet minimum 
requirement (#2693)
    
    Signed-off-by: Ashing Zheng <[email protected]>
---
 Makefile                        |  4 +++-
 docs/en/latest/install.md       |  2 ++
 go.mod                          |  3 ---
 go.sum                          |  6 ------
 internal/manager/controllers.go |  2 +-
 internal/manager/run.go         | 43 +++++++++++++++++++++++++++++++++++++++++
 6 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index 27a941a6..0b2dbcdc 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,9 @@ CRD_DOCS_TEMPLATE ?= docs/assets/template
 
VERSYM="github.com/apache/apisix-ingress-controller/internal/version._buildVersion"
 
GITSHASYM="github.com/apache/apisix-ingress-controller/internal/version._buildGitRevision"
 
BUILDOSSYM="github.com/apache/apisix-ingress-controller/internal/version._buildOS"
-GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) 
-X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH)"
+MINK8SVERSYM="github.com/apache/apisix-ingress-controller/internal/manager._minK8sVersion"
+MIN_K8S_VERSION ?= 1.26.0
+GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) 
-X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH) -X=$(MINK8SVERSYM)=$(MIN_K8S_VERSION)"
 
 # gateway-api
 GATEAY_API_VERSION ?= v1.3.0
diff --git a/docs/en/latest/install.md b/docs/en/latest/install.md
index 25d56b7b..511bbe61 100644
--- a/docs/en/latest/install.md
+++ b/docs/en/latest/install.md
@@ -37,6 +37,8 @@ Before installing APISIX ingress controller, ensure you have:
 1. A working Kubernetes cluster (version 1.26+)
    - Production: TKE, EKS, AKS, or other cloud-managed clusters
    - Development: minikube, kind, or k3s
+
+   Kubernetes 1.26+ is required because the controller uses CEL (Common 
Expression Language) validation rules in CRDs, IngressClass Namespaced Params 
support, and EndpointSlice terminating conditions.
 2. [kubectl](https://kubernetes.io/docs/tasks/tools/) installed and configured 
to access your cluster
 3. [Helm](https://helm.sh/) (version 3.8+) installed
 
diff --git a/go.mod b/go.mod
index 757f8e28..cab91fbc 100644
--- a/go.mod
+++ b/go.mod
@@ -21,7 +21,6 @@ require (
        github.com/olekukonko/tablewriter v1.1.1
        github.com/onsi/ginkgo/v2 v2.22.0
        github.com/onsi/gomega v1.36.1
-       github.com/panjf2000/ants/v2 v2.11.3
        github.com/pkg/errors v0.9.1
        github.com/prometheus/client_golang v1.19.1
        github.com/samber/lo v1.47.0
@@ -35,7 +34,6 @@ require (
        k8s.io/apiextensions-apiserver v0.32.3
        k8s.io/apimachinery v0.32.3
        k8s.io/client-go v0.32.3
-       k8s.io/code-generator v0.32.3
        k8s.io/kubectl v0.30.3
        k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
        sigs.k8s.io/controller-runtime v0.20.4
@@ -213,7 +211,6 @@ require (
        gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
        k8s.io/apiserver v0.32.3 // indirect
        k8s.io/component-base v0.32.3 // indirect
-       k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 // indirect
        k8s.io/klog/v2 v2.130.1 // indirect
        k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
        moul.io/http2curl/v2 v2.3.0 // indirect
diff --git a/go.sum b/go.sum
index eddf72b5..a1c9c8d3 100644
--- a/go.sum
+++ b/go.sum
@@ -333,8 +333,6 @@ github.com/onsi/ginkgo/v2 v2.22.0 
h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg
 github.com/onsi/ginkgo/v2 v2.22.0/go.mod 
h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
 github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
 github.com/onsi/gomega v1.36.1/go.mod 
h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
-github.com/panjf2000/ants/v2 v2.11.3 
h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
-github.com/panjf2000/ants/v2 v2.11.3/go.mod 
h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
 github.com/pelletier/go-toml/v2 v2.0.1/go.mod 
h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
 github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod 
h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28=
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod 
h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
@@ -597,12 +595,8 @@ k8s.io/apiserver v0.32.3 
h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8=
 k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc=
 k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
 k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
-k8s.io/code-generator v0.32.3 h1:31p2TVzC9+hVdSkAFruAk3JY+iSfzrJ83Qij1yZutyw=
-k8s.io/code-generator v0.32.3/go.mod 
h1:+mbiYID5NLsBuqxjQTygKM/DAdKpAjvBzrJd64NU1G8=
 k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
 k8s.io/component-base v0.32.3/go.mod 
h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI=
-k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 
h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4=
-k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod 
h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
 k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f 
h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
diff --git a/internal/manager/controllers.go b/internal/manager/controllers.go
index 38d437ac..a3970566 100644
--- a/internal/manager/controllers.go
+++ b/internal/manager/controllers.go
@@ -20,6 +20,7 @@ package manager
 import (
        "context"
 
+       "github.com/go-logr/logr"
        netv1 "k8s.io/api/networking/v1"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/runtime"
@@ -40,7 +41,6 @@ import (
        "github.com/apache/apisix-ingress-controller/internal/provider"
        types "github.com/apache/apisix-ingress-controller/internal/types"
        "github.com/apache/apisix-ingress-controller/pkg/utils"
-       "github.com/go-logr/logr"
 )
 
 // K8s
diff --git a/internal/manager/run.go b/internal/manager/run.go
index 28a840bb..78bc30e5 100644
--- a/internal/manager/run.go
+++ b/internal/manager/run.go
@@ -26,6 +26,8 @@ import (
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/runtime/schema"
        utilruntime "k8s.io/apimachinery/pkg/util/runtime"
+       "k8s.io/apimachinery/pkg/util/version"
+       "k8s.io/client-go/discovery"
        clientgoscheme "k8s.io/client-go/kubernetes/scheme"
        "k8s.io/utils/ptr"
        ctrl "sigs.k8s.io/controller-runtime"
@@ -53,6 +55,11 @@ var (
        scheme = runtime.NewScheme()
 )
 
+var (
+       // set value during compilation
+       _minK8sVersion string
+)
+
 func init() {
        utilruntime.Must(clientgoscheme.AddToScheme(scheme))
 
@@ -164,6 +171,9 @@ func Run(ctx context.Context, logger logr.Logger) error {
                return err
        }
 
+       // Check Kubernetes cluster version
+       checkK8sVersion(mgr, setupLog)
+
        readier := readiness.NewReadinessManager(mgr.GetClient(), logger)
        registerReadiness(mgr, readier)
 
@@ -254,3 +264,36 @@ func Run(ctx context.Context, logger logr.Logger) error {
        setupLog.Info("starting controller manager")
        return mgr.Start(ctrl.SetupSignalHandler())
 }
+
+func checkK8sVersion(mgr ctrl.Manager, logger logr.Logger) {
+       minV, err := version.ParseSemantic(_minK8sVersion)
+       if err != nil {
+               logger.Info("failed to parse minimum version", "error", err)
+               return
+       }
+
+       discoveryClient, err := 
discovery.NewDiscoveryClientForConfig(mgr.GetConfig())
+       if err != nil {
+               logger.Info("failed to create discovery client for version 
check", "error", err)
+               return
+       }
+
+       serverVersion, err := discoveryClient.ServerVersion()
+       if err != nil {
+               logger.Info("failed to get Kubernetes server version", "error", 
err)
+               return
+       }
+
+       currentVersion, err := version.ParseSemantic(serverVersion.GitVersion)
+       if err != nil {
+               logger.Info("failed to parse server version", "error", err)
+               return
+       }
+
+       if !currentVersion.AtLeast(minV) {
+               logger.Info("WARNING: Kubernetes cluster version does not meet 
minimum requirement",
+                       "currentVersion", currentVersion.String(),
+                       "minimumVersion", minV.String(),
+               )
+       }
+}

Reply via email to