mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Add federation cluster status zone and region update.
This commit is contained in:
parent
03fc51f74f
commit
20c75956fd
@ -22,15 +22,19 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
federation_v1alpha1 "k8s.io/kubernetes/federation/apis/federation/v1alpha1"
|
federation_v1alpha1 "k8s.io/kubernetes/federation/apis/federation/v1alpha1"
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
"k8s.io/kubernetes/pkg/client/typed/discovery"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
utilnet "k8s.io/kubernetes/pkg/util/net"
|
utilnet "k8s.io/kubernetes/pkg/util/net"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -153,3 +157,54 @@ func (self *ClusterClient) GetClusterHealthStatus() *federation_v1alpha1.Cluster
|
|||||||
}
|
}
|
||||||
return &clusterStatus
|
return &clusterStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetClusterZones gets the kubernetes cluster zones and region by inspecting labels on nodes in the cluster.
|
||||||
|
func GetClusterZones(client *clientset.Clientset) (zones []string, region string, err error) {
|
||||||
|
return getZoneNames(client)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the name of the zone in which a Node is running
|
||||||
|
func getZoneNameForNode(node api.Node) (string, error) {
|
||||||
|
for key, value := range node.Labels {
|
||||||
|
if key == unversioned.LabelZoneFailureDomain {
|
||||||
|
return value, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("Zone name for node %s not found. No label with key %s",
|
||||||
|
node.Name, unversioned.LabelZoneFailureDomain)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the name of the region in which a Node is running
|
||||||
|
func getRegionNameForNode(node api.Node) (string, error) {
|
||||||
|
for key, value := range node.Labels {
|
||||||
|
if key == unversioned.LabelZoneRegion {
|
||||||
|
return value, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("Region name for node %s not found. No label with key %s",
|
||||||
|
node.Name, unversioned.LabelZoneRegion)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the names of all zones and the region in which we have nodes in this cluster.
|
||||||
|
func getZoneNames(client *clientset.Clientset) (zones []string, region string, err error) {
|
||||||
|
zoneNames := sets.NewString()
|
||||||
|
nodes, err := client.Core().Nodes().List(api.ListOptions{})
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to list nodes while getting zone names: %v", err)
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
for i, node := range nodes.Items {
|
||||||
|
zoneName, err := getZoneNameForNode(node)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
zoneNames.Insert(zoneName)
|
||||||
|
if i == 0 {
|
||||||
|
region, err = getRegionNameForNode(node)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return zoneNames.List(), region, nil
|
||||||
|
}
|
||||||
|
@ -27,6 +27,9 @@ import (
|
|||||||
federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_3"
|
federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_3"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"k8s.io/kubernetes/pkg/controller/framework"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -184,6 +187,14 @@ func (cc *ClusterController) UpdateClusterStatus() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clusterClientSet, _ := NewClusterClientset(&cluster)
|
||||||
|
zones, region, err := GetClusterZones(clusterClientSet)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to get zones and region for cluster %s: %v", cluster.Name, err)
|
||||||
|
} else {
|
||||||
|
clusterStatusNew.Zones = zones
|
||||||
|
clusterStatusNew.Region = region
|
||||||
|
}
|
||||||
cc.clusterClusterStatusMap[cluster.Name] = *clusterStatusNew
|
cc.clusterClusterStatusMap[cluster.Name] = *clusterStatusNew
|
||||||
cluster.Status = *clusterStatusNew
|
cluster.Status = *clusterStatusNew
|
||||||
cluster, err := cc.federationClient.Federation().Clusters().UpdateStatus(&cluster)
|
cluster, err := cc.federationClient.Federation().Clusters().UpdateStatus(&cluster)
|
||||||
@ -194,3 +205,14 @@ func (cc *ClusterController) UpdateClusterStatus() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewClusterClientset(c *federation_v1alpha1.Cluster) (*clientset.Clientset, error) { // TODO: Stolen from federation/pkg/federation-controller/service/cluster_helper.go - factor it out of there.
|
||||||
|
clusterConfig, err := clientcmd.BuildConfigFromFlags(c.Spec.ServerAddressByClientCIDRs[0].ServerAddress, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
clusterConfig.QPS = KubeAPIQPS
|
||||||
|
clusterConfig.Burst = KubeAPIBurst
|
||||||
|
clientset := clientset.NewForConfigOrDie(restclient.AddUserAgent(clusterConfig, UserAgentName))
|
||||||
|
return clientset, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user