Skip to content

Commit

Permalink
Expose workload manager in insecure and secure ports. (CentaurusInfra…
Browse files Browse the repository at this point in the history
…#300)

+ Allow workload-controller-manager starts from different port: support multiple instances in the same node.
  • Loading branch information
Sindica authored and zmn223 committed Nov 28, 2019
1 parent 04013de commit 2583621
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 22 deletions.
4 changes: 4 additions & 0 deletions cmd/kubeadm/app/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,10 @@ const (
KubeAPIServer = "kube-apiserver"
// KubeControllerManager defines variable used internally when referring to kube-controller-manager component
KubeControllerManager = "kube-controller-manager"

// WorkloadControllerManager defines variable used internally when referring to workload-controller-manager component
WorkloadControllerManager = "workload-controller-manager"

// KubeScheduler defines variable used internally when referring to kube-scheduler component
KubeScheduler = "kube-scheduler"
// KubeProxy defines variable used internally when referring to kube-proxy component
Expand Down
57 changes: 35 additions & 22 deletions cmd/workload-controller-manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,27 @@ package main
import (
"flag"
"fmt"
"k8s.io/klog"
"net"
"os"

"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/component-base/logs"
_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
_ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration
"k8s.io/kubernetes/cmd/workload-controller-manager/app"

apiserveroptions "k8s.io/apiserver/pkg/server/options"
clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
controllerManagerConfig "k8s.io/kubernetes/cmd/workload-controller-manager/app/config"
"k8s.io/kubernetes/pkg/master/ports"
)

var kubeconfig string
var controllerconfigfilepath string
var workloadControllerPort int

const (
// WorkloadControllerManagerUserAgent is the userAgent name when starting workload-controller managers.
Expand All @@ -43,49 +50,42 @@ func init() {
kubeconfigEnv := os.Getenv("KUBECONFIG")
flag.StringVar(&kubeconfig, "kubeconfig", kubeconfigEnv, "absolute path to the kubeconfig file")
flag.StringVar(&controllerconfigfilepath, "controllerconfig", "", "absolute path to the controllerconfig file")
flag.IntVar(&workloadControllerPort, "port", ports.InsecureWorkloadControllerManagerPort, "port for current workload controller manager rest service")
flag.Parse()
}

func main() {

var err error

logs.InitLogs()
defer logs.FlushLogs()

controllerconfig, err := controllerManagerConfig.NewControllerConfig(controllerconfigfilepath)

if err != nil {
panic(err)
} else {
fmt.Println("using controller configuration from ", controllerconfigfilepath)
}

c, err := getConfig()
if err != nil {
panic(err)
}

/*
store := WatchResources(clientSet)
//eventRecorder := createRecorder(client, WorkloadControllerManagerUserAgent)
app.StartControllerManager(c.Complete(), wait.NeverStop)
}

for {
controllermanagersFromStore := store.List()
fmt.Printf("controllermanagers in store: %d\n", len(controllermanagersFromStore))
func getConfig() (*controllerManagerConfig.Config, error) {
controllerconfig, err := controllerManagerConfig.NewControllerConfig(controllerconfigfilepath)

time.Sleep(2 * time.Second)
}*/
if err != nil {
return nil, err
} else {
fmt.Println("using controller configuration from ", controllerconfigfilepath)
}

controllerManagerKubeConfig, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
panic(err)
return nil, err
}

client, err := clientset.NewForConfig(restclient.AddUserAgent(controllerManagerKubeConfig, WorkloadControllerManagerUserAgent))
if err != nil {
panic(err)
return nil, err
}

//eventRecorder := createRecorder(client, WorkloadControllerManagerUserAgent)

c := &controllerManagerConfig.Config{
Client: client,
Expand All @@ -94,7 +94,20 @@ func main() {
//EventRecorder: eventRecorder,
}

app.StartControllerManager(c.Complete(), wait.NeverStop)
klog.Infof("Current workload controller port %d", workloadControllerPort)

insecureServing := (&apiserveroptions.DeprecatedInsecureServingOptions{
BindAddress: net.ParseIP("0.0.0.0"),
BindPort: workloadControllerPort,
BindNetwork: "tcp",
}).WithLoopback()

err = insecureServing.ApplyTo(&c.InsecureServing, &c.LoopbackClientConfig)
if err != nil {
return nil, err
}

return c, nil
}

/*
Expand Down
10 changes: 10 additions & 0 deletions pkg/master/ports/ports.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ const (
// May be overridden by a flag at startup.
// Deprecated: use the secure KubeControllerManagerPort instead.
InsecureKubeControllerManagerPort = 10252

// InsecureWorkloadControllerManagerPort is the default port for the workload controller manager status server.
// May be overridden by a flag at startup.
// Deprecated TBD: use the secure WorkloadControllerManagerPort instead.
InsecureWorkloadControllerManagerPort = 10352

// WorkloadControllerManagerPort is the default port for the workload controller manager status server.
// May be overridden by a flag at startup.
WorkloadControllerManagerPort = 10357

// InsecureCloudControllerManagerPort is the default port for the cloud controller manager server.
// This value may be overridden by a flag at startup.
// Deprecated: use the secure CloudControllerManagerPort instead.
Expand Down

0 comments on commit 2583621

Please sign in to comment.