Merge pull request #3431 from weaveworks/issue-3324
add checkpoint to include Kubernetes cluster information
This commit is contained in:
2 files changed
+47
-4
No files matched your search
@@ -1,12 +1,17 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"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, clusterSize uint) {
|
||||
newVersion.Store("")
|
||||
success.Store(true)
|
||||
|
||||
@@ -53,6 +60,8 @@ func checkForUpdates(dockerVersion string, router *weave.NetworkRouter) {
|
||||
"kernel-version": kernelVersion,
|
||||
}
|
||||
|
||||
checkpointKubernetes(flags, clusterSize)
|
||||
|
||||
// Start background version checking
|
||||
params := checkpoint.CheckParams{
|
||||
Product: "weave-net",
|
||||
@@ -77,3 +86,37 @@ func checkpointFlags(router *weave.NetworkRouter) []checkpoint.Flag {
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
||||
// checkpoint Kubernetes specific details
|
||||
func checkpointKubernetes(flags map[string]string, clusterSize uint) {
|
||||
// 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"] = fmt.Sprint(clusterSize)
|
||||
}
|
||||
+1
-1
@@ -385,7 +385,7 @@ func main() {
|
||||
dockerVersion = dockerCli.DockerVersion()
|
||||
}
|
||||
|
||||
checkForUpdates(dockerVersion, router)
|
||||
checkForUpdates(dockerVersion, router, uint(len(peers)))
|
||||
|
||||
observeContainers := func(o docker.ContainerObserver) {
|
||||
if dockerCli != nil {
|
||||
|
||||
Reference in new issue
Block a user