From f14fce685a79aab8071822629deff9b568106f03 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Tue, 10 Sep 2024 14:24:16 +0800 Subject: [PATCH] feat(apigateway): report k3s environment (#21198) --- pkg/apigateway/report/report.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pkg/apigateway/report/report.go b/pkg/apigateway/report/report.go index d4856e8620..fcf90548e2 100644 --- a/pkg/apigateway/report/report.go +++ b/pkg/apigateway/report/report.go @@ -21,6 +21,9 @@ import ( "strings" "time" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/errors" @@ -76,6 +79,7 @@ type sReport struct { const ( RUNNING_ENV_KUBERNETES = "kubernetes" + RUNNING_ENV_K3S = "k3s" RUNNING_ENV_DOCKER_COMPOSE = "docker-compose" RUNNING_ENV_DOCKER_COMPOSE_BAREMETAL = "docker-compose-baremetal" RUNNING_ENV_UNKNOWN = "unknown" @@ -118,8 +122,31 @@ func isInsideKubernetes() bool { return true } +func getK8sVersion() (string, error) { + cfg, err := rest.InClusterConfig() + if err != nil { + return "", errors.Wrap(err, "get k8s config") + } + client, err := kubernetes.NewForConfig(cfg) + if err != nil { + return "", errors.Wrap(err, "get k8s client") + } + ver, err := client.ServerVersion() + if err != nil { + return "", errors.Wrap(err, "get k8s version") + } + return ver.String(), nil +} + func getRunningEnv() string { if isInsideKubernetes() { + ver, err := getK8sVersion() + if err != nil { + log.Errorf("get k8s version: %v", err) + } + if strings.Contains(ver, "k3s") { + return RUNNING_ENV_K3S + } return RUNNING_ENV_KUBERNETES }