mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 01:06:27 +00:00
Merge pull request #40867 from deads2k/client-01-collapse-kubelet
Automatic merge from submit-queue (batch tested with PRs 35782, 35831, 39279, 40853, 40867) remove unnecessarily duplication since types collapsed We collapsed duplicate types into client-go, so we get to clean this up. @sttts as promised.
This commit is contained in:
commit
a43d2afe24
@ -29,7 +29,6 @@ go_library(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"auth.go",
|
"auth.go",
|
||||||
"bootstrap.go",
|
"bootstrap.go",
|
||||||
"clientgo.go",
|
|
||||||
"plugins.go",
|
"plugins.go",
|
||||||
"server.go",
|
"server.go",
|
||||||
"server_linux.go",
|
"server_linux.go",
|
||||||
|
@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// this file contains parallel methods for getting a client-go clientconfig
|
|
||||||
// The types are not reasonably compatibly between the client-go and kubernetes restclient.Interface,
|
|
||||||
// restclient.Config, or typed clients, so this is the simplest solution during the transition
|
|
||||||
package app
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
|
|
||||||
"k8s.io/client-go/rest"
|
|
||||||
clientauth "k8s.io/client-go/tools/auth"
|
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
|
||||||
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
|
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/kubelet/app/options"
|
|
||||||
"k8s.io/kubernetes/pkg/client/chaosclient"
|
|
||||||
)
|
|
||||||
|
|
||||||
func kubeconfigClientGoConfig(s *options.KubeletServer) (*rest.Config, error) {
|
|
||||||
if s.RequireKubeConfig {
|
|
||||||
// Ignores the values of s.APIServerList
|
|
||||||
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
|
||||||
&clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig.Value()},
|
|
||||||
&clientcmd.ConfigOverrides{},
|
|
||||||
).ClientConfig()
|
|
||||||
}
|
|
||||||
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
|
||||||
&clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig.Value()},
|
|
||||||
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: s.APIServerList[0]}},
|
|
||||||
).ClientConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
// createClientConfig creates a client configuration from the command line
|
|
||||||
// arguments. If --kubeconfig is explicitly set, it will be used. If it is
|
|
||||||
// not set, we attempt to load the default kubeconfig file, and if we cannot,
|
|
||||||
// we fall back to the default client with no auth - this fallback does not, in
|
|
||||||
// and of itself, constitute an error.
|
|
||||||
func createClientGoConfig(s *options.KubeletServer) (*rest.Config, error) {
|
|
||||||
if s.RequireKubeConfig {
|
|
||||||
return kubeconfigClientGoConfig(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: handle a new --standalone flag that bypasses kubeconfig loading and returns no error.
|
|
||||||
// DEPRECATED: all subsequent code is deprecated
|
|
||||||
if len(s.APIServerList) == 0 {
|
|
||||||
return nil, fmt.Errorf("no api servers specified")
|
|
||||||
}
|
|
||||||
// TODO: adapt Kube client to support LB over several servers
|
|
||||||
if len(s.APIServerList) > 1 {
|
|
||||||
glog.Infof("Multiple api servers specified. Picking first one")
|
|
||||||
}
|
|
||||||
|
|
||||||
if s.KubeConfig.Provided() {
|
|
||||||
return kubeconfigClientGoConfig(s)
|
|
||||||
}
|
|
||||||
// If KubeConfig was not provided, try to load the default file, then fall back
|
|
||||||
// to a default auth config.
|
|
||||||
clientConfig, err := kubeconfigClientGoConfig(s)
|
|
||||||
if err != nil {
|
|
||||||
glog.Warningf("Could not load kubeconfig file %s: %v. Using default client config instead.", s.KubeConfig, err)
|
|
||||||
|
|
||||||
authInfo := &clientauth.Info{}
|
|
||||||
authConfig, err := authInfo.MergeWithConfig(rest.Config{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
authConfig.Host = s.APIServerList[0]
|
|
||||||
clientConfig = &authConfig
|
|
||||||
}
|
|
||||||
return clientConfig, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// createAPIServerClientGoConfig generates a client.Config from command line flags,
|
|
||||||
// including api-server-list, via createClientConfig and then injects chaos into
|
|
||||||
// the configuration via addChaosToClientConfig. This func is exported to support
|
|
||||||
// integration with third party kubelet extensions (e.g. kubernetes-mesos).
|
|
||||||
func createAPIServerClientGoConfig(s *options.KubeletServer) (*rest.Config, error) {
|
|
||||||
clientConfig, err := createClientGoConfig(s)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
clientConfig.ContentType = s.ContentType
|
|
||||||
// Override kubeconfig qps/burst settings from flags
|
|
||||||
clientConfig.QPS = float32(s.KubeAPIQPS)
|
|
||||||
clientConfig.Burst = int(s.KubeAPIBurst)
|
|
||||||
|
|
||||||
addChaosToClientGoConfig(s, clientConfig)
|
|
||||||
return clientConfig, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// addChaosToClientConfig injects random errors into client connections if configured.
|
|
||||||
func addChaosToClientGoConfig(s *options.KubeletServer, config *rest.Config) {
|
|
||||||
if s.ChaosChance != 0.0 {
|
|
||||||
config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
|
|
||||||
seed := chaosclient.NewSeed(1)
|
|
||||||
// TODO: introduce a standard chaos package with more tunables - this is just a proof of concept
|
|
||||||
// TODO: introduce random latency and stalls
|
|
||||||
return chaosclient.NewChaosRoundTripper(rt, chaosclient.LogChaos, seed.P(s.ChaosChance, chaosclient.ErrSimulatedConnectionResetByPeer))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -396,6 +396,10 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Warningf("New kubeClient from clientConfig error: %v", err)
|
glog.Warningf("New kubeClient from clientConfig error: %v", err)
|
||||||
}
|
}
|
||||||
|
externalKubeClient, err = clientgoclientset.NewForConfig(clientConfig)
|
||||||
|
if err != nil {
|
||||||
|
glog.Warningf("New kubeClient from clientConfig error: %v", err)
|
||||||
|
}
|
||||||
// make a separate client for events
|
// make a separate client for events
|
||||||
eventClientConfig := *clientConfig
|
eventClientConfig := *clientConfig
|
||||||
eventClientConfig.QPS = float32(s.EventRecordQPS)
|
eventClientConfig.QPS = float32(s.EventRecordQPS)
|
||||||
@ -413,27 +417,6 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// client-go and kuberenetes generated clients are incompatible because the runtime
|
|
||||||
// and runtime/serializer types have been duplicated in client-go. This means that
|
|
||||||
// you can't reasonably convert from one to the other and its impossible for a single
|
|
||||||
// type to fulfill both interfaces. Because of that, we have to build the clients
|
|
||||||
// up from scratch twice.
|
|
||||||
// TODO eventually the kubelet should only use the client-go library
|
|
||||||
clientGoConfig, err := createAPIServerClientGoConfig(s)
|
|
||||||
if err == nil {
|
|
||||||
externalKubeClient, err = clientgoclientset.NewForConfig(clientGoConfig)
|
|
||||||
if err != nil {
|
|
||||||
glog.Warningf("New kubeClient from clientConfig error: %v", err)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if s.RequireKubeConfig {
|
|
||||||
return fmt.Errorf("invalid kubeconfig: %v", err)
|
|
||||||
}
|
|
||||||
if standaloneMode {
|
|
||||||
glog.Warningf("No API client: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kubeDeps, err = UnsecuredKubeletDeps(s)
|
kubeDeps, err = UnsecuredKubeletDeps(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user