add checkpoint to include Kubernetes cluster information

Fixes #3324
This commit is contained in:
Murali Reddy committed 2018-10-30 13:33:12 +05:30
1 parent 1b01da45f5
commit 427d694e1b
2 files changed
+50 -8

No files matched your search

+49 -7
View File
@@ -1,12 +1,17 @@
package main
import (
"os"
"strconv"
"sync/atomic"
"syscall"
"time"
"github.com/weaveworks/go-checkpoint"
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
@@ -14,10 +19,12 @@ var newVersion atomic.Value
var success atomic.Value
const (
updateCheckPeriod = 6 * time.Hour
updateCheckPeriod = 6 * time.Hour
configMapName = "weave-net"
configMapNamespace = "kube-system"
)
func checkForUpdates(dockerVersion string, router *weave.NetworkRouter) {
func checkForUpdates(dockerVersion string, router *weave.NetworkRouter, peers []string) {
newVersion.Store("")
success.Store(true)
@@ -48,10 +55,11 @@ func checkForUpdates(dockerVersion string, router *weave.NetworkRouter) {
}
kernelVersion := string(releaseBytes[:i])
flags := map[string]string{
"docker-version": dockerVersion,
"kernel-version": kernelVersion,
}
flags := make(map[string]string)
flags["docker-version"] = dockerVersion
flags["kernel-version"] = kernelVersion
checkpointKubernetes(flags, peers)
// Start background version checking
params := checkpoint.CheckParams{
@@ -77,3 +85,37 @@ func checkpointFlags(router *weave.NetworkRouter) []checkpoint.Flag {
}
return flags
}
// checkpoint Kubernetes specific details
func checkpointKubernetes(flags map[string]string, peers []string) {
// checks if weaver is running in Kubernetes
host := os.Getenv("KUBERNETES_SERVICE_HOST")
if len(host) == 0 {
return
}
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(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-cluster-size"] = strconv.Itoa(len(peers))
}
+1 -1
View File
@@ -385,7 +385,7 @@ func main() {
dockerVersion = dockerCli.DockerVersion()
}
checkForUpdates(dockerVersion, router)
checkForUpdates(dockerVersion, router, peers)
observeContainers := func(o docker.ContainerObserver) {
if dockerCli != nil {