mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-25 20:29:56 +00:00
HollowNode refactoring
This commit is contained in:
@@ -18,58 +18,35 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
docker "github.com/fsouza/go-dockerclient"
|
||||
kubeletapp "k8s.io/kubernetes/cmd/kubelet/app"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cadvisor"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||
"k8s.io/kubernetes/pkg/kubemark"
|
||||
"k8s.io/kubernetes/pkg/util"
|
||||
"k8s.io/kubernetes/pkg/volume/empty_dir"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
var (
|
||||
fakeDockerClient dockertools.FakeDockerClient
|
||||
|
||||
apiServer string
|
||||
kubeconfigPath string
|
||||
kubeletPort int
|
||||
kubeletReadOnlyPort int
|
||||
nodeName string
|
||||
serverPort int
|
||||
)
|
||||
|
||||
func addFlags(fs *pflag.FlagSet) {
|
||||
fs.StringVar(&apiServer, "server", "", "API server IP.")
|
||||
fs.StringVar(&kubeconfigPath, "kubeconfig", "/kubeconfig/kubeconfig", "Path to kubeconfig file.")
|
||||
fs.IntVar(&kubeletPort, "kubelet-port", 10250, "Port on which HollowKubelet should be listening.")
|
||||
fs.IntVar(&kubeletReadOnlyPort, "kubelet-read-only-port", 10255, "Read-only port on which Kubelet is listening.")
|
||||
fs.StringVar(&nodeName, "name", "fake-node", "Name of this Hollow Node.")
|
||||
fs.IntVar(&serverPort, "api-server-port", 443, "Port on which API server is listening.")
|
||||
type HollowNodeConfig struct {
|
||||
KubeconfigPath string
|
||||
KubeletPort int
|
||||
KubeletReadOnlyPort int
|
||||
NodeName string
|
||||
ServerPort int
|
||||
}
|
||||
|
||||
func makeTempDirOrDie(prefix string, baseDir string) string {
|
||||
if baseDir == "" {
|
||||
baseDir = "/tmp"
|
||||
}
|
||||
tempDir, err := ioutil.TempDir(baseDir, prefix)
|
||||
if err != nil {
|
||||
glog.Fatalf("Can't make a temp rootdir: %v", err)
|
||||
}
|
||||
if err = os.MkdirAll(tempDir, 0750); err != nil {
|
||||
glog.Fatalf("Can't mkdir(%q): %v", tempDir, err)
|
||||
}
|
||||
return tempDir
|
||||
func (c *HollowNodeConfig) addFlags(fs *pflag.FlagSet) {
|
||||
fs.StringVar(&c.KubeconfigPath, "kubeconfig", "/kubeconfig/kubeconfig", "Path to kubeconfig file.")
|
||||
fs.IntVar(&c.KubeletPort, "kubelet-port", 10250, "Port on which HollowKubelet should be listening.")
|
||||
fs.IntVar(&c.KubeletReadOnlyPort, "kubelet-read-only-port", 10255, "Read-only port on which Kubelet is listening.")
|
||||
fs.StringVar(&c.NodeName, "name", "fake-node", "Name of this Hollow Node.")
|
||||
fs.IntVar(&c.ServerPort, "api-server-port", 443, "Port on which API server is listening.")
|
||||
}
|
||||
|
||||
func createClientFromFile(path string) (*client.Client, error) {
|
||||
@@ -93,46 +70,30 @@ func createClientFromFile(path string) (*client.Client, error) {
|
||||
|
||||
func main() {
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
addFlags(pflag.CommandLine)
|
||||
|
||||
config := HollowNodeConfig{}
|
||||
config.addFlags(pflag.CommandLine)
|
||||
util.InitFlags()
|
||||
|
||||
// create a client for Kubelet to communicate with API server.
|
||||
cl, err := createClientFromFile(kubeconfigPath)
|
||||
cl, err := createClientFromFile(config.KubeconfigPath)
|
||||
if err != nil {
|
||||
glog.Fatal("Failed to create a Client. Exiting.")
|
||||
}
|
||||
cadvisorInterface := new(cadvisor.Fake)
|
||||
|
||||
testRootDir := makeTempDirOrDie("hollow-kubelet.", "")
|
||||
configFilePath := makeTempDirOrDie("config", testRootDir)
|
||||
glog.Infof("Using %s as root dir for hollow-kubelet", testRootDir)
|
||||
fakeDockerClient := &dockertools.FakeDockerClient{}
|
||||
fakeDockerClient.VersionInfo = docker.Env{"ApiVersion=1.18"}
|
||||
fakeDockerClient.ContainerMap = make(map[string]*docker.Container)
|
||||
fakeDockerClient.EnableSleep = true
|
||||
kcfg := kubeletapp.SimpleKubelet(
|
||||
cl,
|
||||
&fakeDockerClient,
|
||||
nodeName,
|
||||
testRootDir,
|
||||
"", /* manifest-url */
|
||||
"0.0.0.0", /* bind address */
|
||||
uint(kubeletPort),
|
||||
uint(kubeletReadOnlyPort),
|
||||
api.NamespaceDefault,
|
||||
empty_dir.ProbeVolumePlugins(),
|
||||
nil, /* tls-options */
|
||||
cadvisorInterface,
|
||||
configFilePath,
|
||||
nil, /* cloud-provider */
|
||||
kubecontainer.FakeOS{}, /* os-interface */
|
||||
20*time.Second, /* FileCheckFrequency */
|
||||
20*time.Second, /* HTTPCheckFrequency */
|
||||
1*time.Minute, /* MinimumGCAge */
|
||||
10*time.Second, /* NodeStatusUpdateFrequency */
|
||||
10*time.Second, /* SyncFrequency */
|
||||
40, /* MaxPods */
|
||||
)
|
||||
kubeletapp.RunKubelet(kcfg)
|
||||
|
||||
select {}
|
||||
hollowKubelet := kubemark.NewHollowKubelet(
|
||||
config.NodeName,
|
||||
cl,
|
||||
cadvisorInterface,
|
||||
fakeDockerClient,
|
||||
config.KubeletPort,
|
||||
config.KubeletReadOnlyPort,
|
||||
)
|
||||
hollowKubelet.Run()
|
||||
}
|
||||
|
Reference in New Issue
Block a user