diff --git a/core/build/linux_kernel/BUILD b/core/build/linux_kernel/BUILD
index f95e16f..8827285 100644
--- a/core/build/linux_kernel/BUILD
+++ b/core/build/linux_kernel/BUILD
@@ -26,7 +26,7 @@
     srcs = [
         "@//core/cmd/init",
         "@//core/build/utils:mkfs.xfs",
-        "@kubernetes//cmd/kube-apiserver",
+        "@//core/cmd/kube-controlplane",
     ],
     outs = [
         "initramfs.cpio.lz4",
@@ -39,7 +39,7 @@
 file /init $(location @//core/cmd/init) 0755 0 0
 dir /bin 0755 0 0
 file /bin/mkfs.xfs $(location @//core/build/utils:mkfs.xfs) 0755 0 0
-file /bin/kube-apiserver $(location @kubernetes//cmd/kube-apiserver) 0755 0 0
+file /bin/kube-controlplane $(location @//core/cmd/kube-controlplane) 0755 0 0
 EOF
     """,
     tools = [
diff --git a/core/cmd/kube-controlplane/BUILD b/core/cmd/kube-controlplane/BUILD
new file mode 100644
index 0000000..6ae215a
--- /dev/null
+++ b/core/cmd/kube-controlplane/BUILD
@@ -0,0 +1,44 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+
+# This is a hack to make go modules ignore all of kube-controlplane since Kubernetes is not importable
+# and we still need normal go mod tooling to work. Instead we're just depending on our own Kubernetes
+# which is already being built with Bazel and thus works fine as a dependency.
+
+genrule(
+    name = "hack_ignore",
+    srcs = [
+        "main.go",
+    ],
+    outs = [
+        "main_patched.go",
+    ],
+    cmd = """
+    sed '/+build ignore/d' $(location main.go) > "$@"
+    """,
+    visibility = ["//visibility:public"],
+)
+
+go_library(
+    name = "go_default_library",
+    srcs = [":main_patched.go"],
+    importpath = "git.monogon.dev/source/nexantic.git/core/cmd/kubemaster",
+    visibility = ["//visibility:private"],
+    deps = [
+        "@kubernetes//cmd/kube-apiserver/app:go_default_library",
+        "@kubernetes//cmd/kube-controller-manager/app:go_default_library",
+        "@kubernetes//cmd/kube-scheduler/app:go_default_library",
+        "@kubernetes//pkg/client/metrics/prometheus:go_default_library",
+        "@kubernetes//pkg/version/prometheus:go_default_library",
+        "@kubernetes//staging/src/k8s.io/component-base/cli/flag:go_default_library",
+        "@kubernetes//staging/src/k8s.io/component-base/logs:go_default_library",
+        "@kubernetes//vendor/github.com/spf13/cobra:go_default_library",
+        "@kubernetes//vendor/github.com/spf13/pflag:go_default_library",
+    ],
+)
+
+go_binary(
+    name = "kube-controlplane",
+    embed = [":go_default_library"],
+    pure = "on",
+    visibility = ["//visibility:public"],
+)
diff --git a/core/cmd/kube-controlplane/main.go b/core/cmd/kube-controlplane/main.go
new file mode 100644
index 0000000..aad7f04
--- /dev/null
+++ b/core/cmd/kube-controlplane/main.go
@@ -0,0 +1,121 @@
+// Copyright 2020 The Monogon Project Authors.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// 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.
+
+//+build ignore
+
+/*
+Copyright 2014 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.
+*/
+
+// Adapted from https://github.com/dims/hyperkube
+
+package main
+
+import (
+	goflag "flag"
+	"math/rand"
+	"os"
+	"path/filepath"
+	"time"
+
+	"github.com/spf13/cobra"
+	"github.com/spf13/pflag"
+
+	cliflag "k8s.io/component-base/cli/flag"
+	"k8s.io/component-base/logs"
+	kubeapiserver "k8s.io/kubernetes/cmd/kube-apiserver/app"
+	kubecontrollermanager "k8s.io/kubernetes/cmd/kube-controller-manager/app"
+	kubescheduler "k8s.io/kubernetes/cmd/kube-scheduler/app"
+	_ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration
+	_ "k8s.io/kubernetes/pkg/version/prometheus"        // for version metric registration
+)
+
+func main() {
+	rand.Seed(time.Now().UnixNano())
+
+	hyperkubeCommand, allCommandFns := NewHyperKubeCommand()
+
+	// TODO: once we switch everything over to Cobra commands, we can go back to calling
+	// cliflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the
+	// normalize func and add the go flag set by hand.
+	pflag.CommandLine.SetNormalizeFunc(cliflag.WordSepNormalizeFunc)
+	pflag.CommandLine.AddGoFlagSet(goflag.CommandLine)
+	// cliflag.InitFlags()
+	logs.InitLogs()
+	defer logs.FlushLogs()
+
+	basename := filepath.Base(os.Args[0])
+	if err := commandFor(basename, hyperkubeCommand, allCommandFns).Execute(); err != nil {
+		os.Exit(1)
+	}
+}
+
+func commandFor(basename string, defaultCommand *cobra.Command, commands []func() *cobra.Command) *cobra.Command {
+	for _, commandFn := range commands {
+		command := commandFn()
+		if command.Name() == basename {
+			return command
+		}
+		for _, alias := range command.Aliases {
+			if alias == basename {
+				return command
+			}
+		}
+	}
+
+	return defaultCommand
+}
+
+// NewHyperKubeCommand is the entry point for hyperkube
+func NewHyperKubeCommand() (*cobra.Command, []func() *cobra.Command) {
+	// these have to be functions since the command is polymorphic. Cobra wants you to be top level
+	// command to get executed
+	apiserver := func() *cobra.Command { return kubeapiserver.NewAPIServerCommand() }
+	controller := func() *cobra.Command { return kubecontrollermanager.NewControllerManagerCommand() }
+	scheduler := func() *cobra.Command { return kubescheduler.NewSchedulerCommand() }
+
+	commandFns := []func() *cobra.Command{
+		apiserver,
+		controller,
+		scheduler,
+	}
+
+	cmd := &cobra.Command{
+		Use:   "kube-controlplane",
+		Short: "Combines all Kubernetes Control Plane components in a single binary",
+		Run: func(cmd *cobra.Command, args []string) {
+			if len(args) != 0 {
+				cmd.Help()
+				os.Exit(1)
+			}
+		},
+	}
+
+	for i := range commandFns {
+		cmd.AddCommand(commandFns[i]())
+	}
+
+	return cmd, commandFns
+}
