Merge pull request #79889 from mborsz/kubemarkclient

Hollow-node should use separate client for heartbeats
This commit is contained in:
Kubernetes Prow Robot 2019-07-10 02:44:25 -07:00 committed by GitHub
commit a29243775a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 18 deletions

View File

@ -18,6 +18,7 @@ go_library(
deps = [ deps = [
"//pkg/api/legacyscheme:go_default_library", "//pkg/api/legacyscheme:go_default_library",
"//pkg/client/metrics/prometheus:go_default_library", "//pkg/client/metrics/prometheus:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library",
"//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/dockershim:go_default_library", "//pkg/kubelet/dockershim:go_default_library",
@ -30,6 +31,7 @@ go_library(
"//pkg/version/verflag:go_default_library", "//pkg/version/verflag:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library",

View File

@ -30,6 +30,7 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
utilfeature "k8s.io/apiserver/pkg/util/feature"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
@ -38,6 +39,7 @@ import (
"k8s.io/component-base/logs" "k8s.io/component-base/logs"
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
"k8s.io/kubernetes/pkg/features"
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/dockershim" "k8s.io/kubernetes/pkg/kubelet/dockershim"
@ -154,6 +156,23 @@ func run(config *hollowNodeConfig) {
} }
if config.Morph == "kubelet" { if config.Morph == "kubelet" {
f, c := kubemark.GetHollowKubeletConfig(config.NodeName, config.KubeletPort, config.KubeletReadOnlyPort, maxPods, podsPerCore)
heartbeatClientConfig := *clientConfig
heartbeatClientConfig.Timeout = c.NodeStatusUpdateFrequency.Duration
// if the NodeLease feature is enabled, the timeout is the minimum of the lease duration and status update frequency
if utilfeature.DefaultFeatureGate.Enabled(features.NodeLease) {
leaseTimeout := time.Duration(c.NodeLeaseDurationSeconds) * time.Second
if heartbeatClientConfig.Timeout > leaseTimeout {
heartbeatClientConfig.Timeout = leaseTimeout
}
}
heartbeatClientConfig.QPS = float32(-1)
heartbeatClient, err := clientset.NewForConfig(&heartbeatClientConfig)
if err != nil {
klog.Fatalf("Failed to create a ClientSet: %v. Exiting.", err)
}
cadvisorInterface := &cadvisortest.Fake{ cadvisorInterface := &cadvisortest.Fake{
NodeName: config.NodeName, NodeName: config.NodeName,
} }
@ -166,15 +185,12 @@ func run(config *hollowNodeConfig) {
} }
hollowKubelet := kubemark.NewHollowKubelet( hollowKubelet := kubemark.NewHollowKubelet(
config.NodeName, f, c,
client, client,
heartbeatClient,
cadvisorInterface, cadvisorInterface,
fakeDockerClientConfig, fakeDockerClientConfig,
config.KubeletPort,
config.KubeletReadOnlyPort,
containerManager, containerManager,
maxPods,
podsPerCore,
) )
hollowKubelet.Run() hollowKubelet.Run()
} }

View File

@ -48,19 +48,13 @@ type HollowKubelet struct {
} }
func NewHollowKubelet( func NewHollowKubelet(
nodeName string, flags *options.KubeletFlags,
config *kubeletconfig.KubeletConfiguration,
client *clientset.Clientset, client *clientset.Clientset,
heartbeatClient *clientset.Clientset,
cadvisorInterface cadvisor.Interface, cadvisorInterface cadvisor.Interface,
dockerClientConfig *dockershim.ClientConfig, dockerClientConfig *dockershim.ClientConfig,
kubeletPort, kubeletReadOnlyPort int, containerManager cm.ContainerManager) *HollowKubelet {
containerManager cm.ContainerManager,
maxPods int, podsPerCore int,
) *HollowKubelet {
// -----------------
// Static config
// -----------------
f, c := GetHollowKubeletConfig(nodeName, kubeletPort, kubeletReadOnlyPort, maxPods, podsPerCore)
// ----------------- // -----------------
// Injected objects // Injected objects
// ----------------- // -----------------
@ -69,7 +63,7 @@ func NewHollowKubelet(
volumePlugins = append(volumePlugins, projected.ProbeVolumePlugins()...) volumePlugins = append(volumePlugins, projected.ProbeVolumePlugins()...)
d := &kubelet.Dependencies{ d := &kubelet.Dependencies{
KubeClient: client, KubeClient: client,
HeartbeatClient: client, HeartbeatClient: heartbeatClient,
DockerClientConfig: dockerClientConfig, DockerClientConfig: dockerClientConfig,
CAdvisorInterface: cadvisorInterface, CAdvisorInterface: cadvisorInterface,
Cloud: nil, Cloud: nil,
@ -84,8 +78,8 @@ func NewHollowKubelet(
} }
return &HollowKubelet{ return &HollowKubelet{
KubeletFlags: f, KubeletFlags: flags,
KubeletConfiguration: c, KubeletConfiguration: config,
KubeletDeps: d, KubeletDeps: d,
} }
} }