Skip to content

Commit b274316

Browse files
authored
chore: log when kubernetes cluster version does not meet minimum requirement (#2693)
Signed-off-by: Ashing Zheng <axingfly@gmail.com>
1 parent 01fa72f commit b274316

6 files changed

Lines changed: 49 additions & 11 deletions

File tree

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ CRD_DOCS_TEMPLATE ?= docs/assets/template
4747
VERSYM="github.com/apache/apisix-ingress-controller/internal/version._buildVersion"
4848
GITSHASYM="github.com/apache/apisix-ingress-controller/internal/version._buildGitRevision"
4949
BUILDOSSYM="github.com/apache/apisix-ingress-controller/internal/version._buildOS"
50-
GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) -X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH)"
50+
MINK8SVERSYM="github.com/apache/apisix-ingress-controller/internal/manager._minK8sVersion"
51+
MIN_K8S_VERSION ?= 1.26.0
52+
GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) -X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH) -X=$(MINK8SVERSYM)=$(MIN_K8S_VERSION)"
5153

5254
# gateway-api
5355
GATEAY_API_VERSION ?= v1.3.0

docs/en/latest/install.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Before installing APISIX ingress controller, ensure you have:
3737
1. A working Kubernetes cluster (version 1.26+)
3838
- Production: TKE, EKS, AKS, or other cloud-managed clusters
3939
- Development: minikube, kind, or k3s
40+
41+
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.
4042
2. [kubectl](https://kubernetes.io/docs/tasks/tools/) installed and configured to access your cluster
4143
3. [Helm](https://helm.sh/) (version 3.8+) installed
4244

go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ require (
2121
github.com/olekukonko/tablewriter v1.1.1
2222
github.com/onsi/ginkgo/v2 v2.22.0
2323
github.com/onsi/gomega v1.36.1
24-
github.com/panjf2000/ants/v2 v2.11.3
2524
github.com/pkg/errors v0.9.1
2625
github.com/prometheus/client_golang v1.19.1
2726
github.com/samber/lo v1.47.0
@@ -35,7 +34,6 @@ require (
3534
k8s.io/apiextensions-apiserver v0.32.3
3635
k8s.io/apimachinery v0.32.3
3736
k8s.io/client-go v0.32.3
38-
k8s.io/code-generator v0.32.3
3937
k8s.io/kubectl v0.30.3
4038
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
4139
sigs.k8s.io/controller-runtime v0.20.4
@@ -213,7 +211,6 @@ require (
213211
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
214212
k8s.io/apiserver v0.32.3 // indirect
215213
k8s.io/component-base v0.32.3 // indirect
216-
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 // indirect
217214
k8s.io/klog/v2 v2.130.1 // indirect
218215
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
219216
moul.io/http2curl/v2 v2.3.0 // indirect

go.sum

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,6 @@ github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg
333333
github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
334334
github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
335335
github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
336-
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
337-
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
338336
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
339337
github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28=
340338
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=
597595
k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc=
598596
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
599597
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
600-
k8s.io/code-generator v0.32.3 h1:31p2TVzC9+hVdSkAFruAk3JY+iSfzrJ83Qij1yZutyw=
601-
k8s.io/code-generator v0.32.3/go.mod h1:+mbiYID5NLsBuqxjQTygKM/DAdKpAjvBzrJd64NU1G8=
602598
k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
603599
k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI=
604-
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4=
605-
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
606600
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
607601
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
608602
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=

internal/manager/controllers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package manager
2020
import (
2121
"context"
2222

23+
"github.com/go-logr/logr"
2324
netv1 "k8s.io/api/networking/v1"
2425
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2526
"k8s.io/apimachinery/pkg/runtime"
@@ -40,7 +41,6 @@ import (
4041
"github.com/apache/apisix-ingress-controller/internal/provider"
4142
types "github.com/apache/apisix-ingress-controller/internal/types"
4243
"github.com/apache/apisix-ingress-controller/pkg/utils"
43-
"github.com/go-logr/logr"
4444
)
4545

4646
// K8s

internal/manager/run.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"k8s.io/apimachinery/pkg/runtime"
2727
"k8s.io/apimachinery/pkg/runtime/schema"
2828
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
29+
"k8s.io/apimachinery/pkg/util/version"
30+
"k8s.io/client-go/discovery"
2931
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3032
"k8s.io/utils/ptr"
3133
ctrl "sigs.k8s.io/controller-runtime"
@@ -53,6 +55,11 @@ var (
5355
scheme = runtime.NewScheme()
5456
)
5557

58+
var (
59+
// set value during compilation
60+
_minK8sVersion string
61+
)
62+
5663
func init() {
5764
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
5865

@@ -164,6 +171,9 @@ func Run(ctx context.Context, logger logr.Logger) error {
164171
return err
165172
}
166173

174+
// Check Kubernetes cluster version
175+
checkK8sVersion(mgr, setupLog)
176+
167177
readier := readiness.NewReadinessManager(mgr.GetClient(), logger)
168178
registerReadiness(mgr, readier)
169179

@@ -254,3 +264,36 @@ func Run(ctx context.Context, logger logr.Logger) error {
254264
setupLog.Info("starting controller manager")
255265
return mgr.Start(ctrl.SetupSignalHandler())
256266
}
267+
268+
func checkK8sVersion(mgr ctrl.Manager, logger logr.Logger) {
269+
minV, err := version.ParseSemantic(_minK8sVersion)
270+
if err != nil {
271+
logger.Info("failed to parse minimum version", "error", err)
272+
return
273+
}
274+
275+
discoveryClient, err := discovery.NewDiscoveryClientForConfig(mgr.GetConfig())
276+
if err != nil {
277+
logger.Info("failed to create discovery client for version check", "error", err)
278+
return
279+
}
280+
281+
serverVersion, err := discoveryClient.ServerVersion()
282+
if err != nil {
283+
logger.Info("failed to get Kubernetes server version", "error", err)
284+
return
285+
}
286+
287+
currentVersion, err := version.ParseSemantic(serverVersion.GitVersion)
288+
if err != nil {
289+
logger.Info("failed to parse server version", "error", err)
290+
return
291+
}
292+
293+
if !currentVersion.AtLeast(minV) {
294+
logger.Info("WARNING: Kubernetes cluster version does not meet minimum requirement",
295+
"currentVersion", currentVersion.String(),
296+
"minimumVersion", minV.String(),
297+
)
298+
}
299+
}

0 commit comments

Comments
 (0)