From ad621c807e2b71dfd98bf460c899ee212892107e Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Tue, 19 Jan 2021 17:22:47 +0000 Subject: [PATCH] Move Kubernetes API calls into kube-utils program This reduces the size of the 'weaver' binary. --- prog/kube-utils/main.go | 19 ++++++++++++++++++ prog/weave-kube/launch.sh | 4 ++++ prog/weaver/checkpoint.go | 42 +++++++-------------------------------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/prog/kube-utils/main.go b/prog/kube-utils/main.go index 437a13d5..42414626 100644 --- a/prog/kube-utils/main.go +++ b/prog/kube-utils/main.go @@ -314,6 +314,8 @@ func main() { justReclaim bool justCheck bool justSetNodeStatus bool + justVersion bool + justUID bool peerName string nodeName string logLevel string @@ -323,6 +325,8 @@ func main() { flag.BoolVar(&runReclaimDaemon, "run-reclaim-daemon", false, "run background process that reclaim IP space from dead peers ") flag.BoolVar(&justCheck, "check-peer-new", false, "return success if peer name is not stored in annotation") flag.BoolVar(&justSetNodeStatus, "set-node-status", false, "set NodeNetworkUnavailable to false") + flag.BoolVar(&justVersion, "print-k8s-version", false, "print the Kubernetes version and exit") + flag.BoolVar(&justUID, "print-uid", false, "print a UID for this installation and exit") flag.StringVar(&peerName, "peer-name", "unknown", "name of this Weave Net peer") flag.StringVar(&nodeName, "node-name", "unknown", "name of this Kubernetes node") flag.StringVar(&logLevel, "log-level", "info", "logging level (debug, info, warning, error)") @@ -371,6 +375,21 @@ func main() { } return } + if justVersion { + k8sVersion, err := c.Discovery().ServerVersion() + if err != nil { + common.Log.Fatalf("[kube-peers] Could not get Kubernetes version: %v", err) + } + fmt.Println(k8sVersion.String()) + } + if justUID { + // use UID of `weave-net` configmap as unique ID of the Kubernetes cluster + cm, err := c.CoreV1().ConfigMaps(configMapNamespace).Get(context.Background(), configMapName, api.GetOptions{}) + if err != nil { + common.Log.Fatalf("Unable to fetch ConfigMap %s/%s to infer unique cluster ID", configMapNamespace, configMapName) + } + fmt.Println(cm.ObjectMeta.UID) + } if runReclaimDaemon { // Handle SIGINT and SIGTERM ch := make(chan os.Signal, 1) diff --git a/prog/weave-kube/launch.sh b/prog/weave-kube/launch.sh index 4de1513d..22d042c5 100755 --- a/prog/weave-kube/launch.sh +++ b/prog/weave-kube/launch.sh @@ -118,6 +118,10 @@ fi # weaver is running as the DB can only be opened by one process at a time /usr/bin/weaveutil set-db-flag "$DB_PREFIX" peer-reclaim ok +# couple more variables +WEAVE_KUBERNETES_VERSION=$(/home/weave/kube-utils -print-k8s-version) +WEAVE_KUBERNETES_UID=$(/home/weave/kube-utils -print-uid) + post_start_actions() { # Wait for weave process to become responsive while true ; do diff --git a/prog/weaver/checkpoint.go b/prog/weaver/checkpoint.go index 4208bb57..15098a00 100644 --- a/prog/weaver/checkpoint.go +++ b/prog/weaver/checkpoint.go @@ -10,9 +10,6 @@ import ( checkpoint "github.com/weaveworks/go-checkpoint" weave "github.com/weaveworks/weave/router" - api "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" ) var checker *checkpoint.Checker @@ -20,9 +17,7 @@ var newVersion atomic.Value var success atomic.Value const ( - updateCheckPeriod = 6 * time.Hour - configMapName = "weave-net" - configMapNamespace = "kube-system" + updateCheckPeriod = 6 * time.Hour ) func checkForUpdates(dockerVersion string, router *weave.NetworkRouter, clusterSize uint) { @@ -88,36 +83,13 @@ func checkpointFlags(router *weave.NetworkRouter) []checkpoint.Flag { return flags } -// checkpoint Kubernetes specific details +// checkpoint Kubernetes specific details, passed in from launch script func checkpointKubernetes(ctx context.Context, flags map[string]string, clusterSize uint) { - // checks if weaver is running in Kubernetes - host := os.Getenv("KUBERNETES_SERVICE_HOST") - if len(host) == 0 { - return + version := os.Getenv("WEAVE_KUBERNETES_VERSION") + if len(version) == 0 { + return // not running under Kubernetes } - config, err := rest.InClusterConfig() - if err != nil { - Log.Printf("Could not get Kubernetes in-cluster config: %v", err) - return - } - c, err := kubernetes.NewForConfig(config) - if err != nil { - Log.Printf("Could not make Kubernetes client: %v", err) - return - } - k8sVersion, err := c.Discovery().ServerVersion() - if err != nil { - Log.Printf("Could not get Kubernetes version: %v", err) - return - } - flags["kubernetes-version"] = k8sVersion.String() - - // use UID of `weave-net` configmap as unique ID of the Kubenerets cluster - cm, err := c.CoreV1().ConfigMaps(configMapNamespace).Get(ctx, configMapName, api.GetOptions{}) - if err != nil { - Log.Printf("Unable to fetch ConfigMap %s/%s to infer unique cluster ID", configMapNamespace, configMapName) - return - } - flags["kubernetes-cluster-uid"] = string(cm.ObjectMeta.UID) + flags["kubernetes-version"] = version + flags["kubernetes-cluster-uid"] = string(os.Getenv("WEAVE_KUBERNETES_UID")) flags["kubernetes-cluster-size"] = fmt.Sprint(clusterSize) }