From 9cef24901d4b7ae59c12a26b0d3a17cf293c7a10 Mon Sep 17 00:00:00 2001 From: "Rostislav M. Georgiev" Date: Thu, 17 May 2018 15:14:55 +0300 Subject: [PATCH 1/3] kubeadm: Avoid unneeded dependencies by not using GetFlagString Using GetFlagString from k8s.io/kubernetes/pkg/kubectl/cmd/util causes pkg/client/clientset_generated/internalclientset to be pulled as an external dependency, thus producing larger executable and increasing the maintainance hell. Signed-off-by: Rostislav M. Georgiev --- cmd/kubeadm/app/cmd/BUILD | 1 - cmd/kubeadm/app/cmd/version.go | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index b5b5d1158cf..0fe4849ebeb 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -52,7 +52,6 @@ go_library( "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//cmd/kubeadm/app/util/token:go_default_library", "//pkg/apis/core:go_default_library", - "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/util/initsystem:go_default_library", "//pkg/util/node:go_default_library", diff --git a/cmd/kubeadm/app/cmd/version.go b/cmd/kubeadm/app/cmd/version.go index acfdcbb088b..066e4c489f4 100644 --- a/cmd/kubeadm/app/cmd/version.go +++ b/cmd/kubeadm/app/cmd/version.go @@ -27,7 +27,6 @@ import ( apimachineryversion "k8s.io/apimachinery/pkg/version" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" - cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/version" ) @@ -60,7 +59,13 @@ func RunVersion(out io.Writer, cmd *cobra.Command) error { ClientVersion: &clientVersion, } - switch of := cmdutil.GetFlagString(cmd, "output"); of { + const flag = "output" + of, err := cmd.Flags().GetString(flag) + if err != nil { + glog.Fatalf("error accessing flag %s for command %s: %v", flag, cmd.Name(), err) + } + + switch of { case "": fmt.Fprintf(out, "kubeadm version: %#v\n", v.ClientVersion) case "short": From b37ae19b05aaf77847976908d3adb8587796396c Mon Sep 17 00:00:00 2001 From: "Rostislav M. Georgiev" Date: Thu, 17 May 2018 16:08:51 +0300 Subject: [PATCH 2/3] kubeadm: Add local copy of LeaseEndpointReconcilerType kubeadm uses LeaseEndpointReconcilerType as import from k8s.io/kubernetes/pkg/master/reconcilers. However, this pull a huge load of extra dependencies (among which pkg/client/clientset_generated/internalclientset). The solution is to copy this string constant locally in kubeadm. Signed-off-by: Rostislav M. Georgiev --- cmd/kubeadm/app/constants/constants.go | 5 +++++ cmd/kubeadm/app/phases/controlplane/BUILD | 2 -- cmd/kubeadm/app/phases/controlplane/manifests.go | 3 +-- cmd/kubeadm/app/phases/controlplane/manifests_test.go | 5 ++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index dde8866bfe0..bf9f3f50906 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -255,6 +255,11 @@ const ( KubeAuditPolicyLogVolumeName = "audit-log" // StaticPodAuditPolicyLogDir is the name of the directory in the static pod that will have the audit logs StaticPodAuditPolicyLogDir = "/var/log/kubernetes/audit" + + // LeaseEndpointReconcilerType will select a storage based reconciler + // Copied from pkg/master/reconcilers to avoid pulling extra dependencies + // TODO: Import this constant from a consts only package, that does not pull any further dependencies. + LeaseEndpointReconcilerType = "lease" ) var ( diff --git a/cmd/kubeadm/app/phases/controlplane/BUILD b/cmd/kubeadm/app/phases/controlplane/BUILD index 99370e2fe5d..3b6d5a95f34 100644 --- a/cmd/kubeadm/app/phases/controlplane/BUILD +++ b/cmd/kubeadm/app/phases/controlplane/BUILD @@ -19,7 +19,6 @@ go_test( "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/test:go_default_library", - "//pkg/master/reconcilers:go_default_library", "//pkg/util/pointer:go_default_library", "//pkg/util/version:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", @@ -43,7 +42,6 @@ go_library( "//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util/staticpod:go_default_library", "//pkg/kubeapiserver/authorizer/modes:go_default_library", - "//pkg/master/reconcilers:go_default_library", "//pkg/util/version:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go index e409cc21ada..3711b7797cd 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests.go @@ -37,7 +37,6 @@ import ( kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" staticpodutil "k8s.io/kubernetes/cmd/kubeadm/app/util/staticpod" authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes" - "k8s.io/kubernetes/pkg/master/reconcilers" "k8s.io/kubernetes/pkg/util/version" ) @@ -202,7 +201,7 @@ func getAPIServerCommand(cfg *kubeadmapi.MasterConfiguration) []string { } if features.Enabled(cfg.FeatureGates, features.HighAvailability) { - defaultArguments["endpoint-reconciler-type"] = reconcilers.LeaseEndpointReconcilerType + defaultArguments["endpoint-reconciler-type"] = kubeadmconstants.LeaseEndpointReconcilerType } if features.Enabled(cfg.FeatureGates, features.DynamicKubeletConfig) { diff --git a/cmd/kubeadm/app/phases/controlplane/manifests_test.go b/cmd/kubeadm/app/phases/controlplane/manifests_test.go index aefdb319d41..16eddda0225 100644 --- a/cmd/kubeadm/app/phases/controlplane/manifests_test.go +++ b/cmd/kubeadm/app/phases/controlplane/manifests_test.go @@ -28,7 +28,6 @@ import ( kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs" - "k8s.io/kubernetes/pkg/master/reconcilers" "k8s.io/kubernetes/pkg/util/version" testutil "k8s.io/kubernetes/cmd/kubeadm/test" @@ -335,7 +334,7 @@ func TestGetAPIServerCommand(t *testing.T) { "--etcd-cafile=fuz", "--etcd-certfile=fiz", "--etcd-keyfile=faz", - fmt.Sprintf("--endpoint-reconciler-type=%s", reconcilers.LeaseEndpointReconcilerType), + fmt.Sprintf("--endpoint-reconciler-type=%s", kubeadmconstants.LeaseEndpointReconcilerType), }, }, { @@ -412,7 +411,7 @@ func TestGetAPIServerCommand(t *testing.T) { "--etcd-cafile=" + testCertsDir + "/etcd/ca.crt", "--etcd-certfile=" + testCertsDir + "/apiserver-etcd-client.crt", "--etcd-keyfile=" + testCertsDir + "/apiserver-etcd-client.key", - fmt.Sprintf("--endpoint-reconciler-type=%s", reconcilers.LeaseEndpointReconcilerType), + fmt.Sprintf("--endpoint-reconciler-type=%s", kubeadmconstants.LeaseEndpointReconcilerType), "--audit-policy-file=/etc/kubernetes/audit/audit.yaml", "--audit-log-path=/var/log/kubernetes/audit/audit.log", "--audit-log-maxage=0", From 8a80c88547d41d714c1e0a9c77e16a86679f1379 Mon Sep 17 00:00:00 2001 From: "Rostislav M. Georgiev" Date: Thu, 17 May 2018 16:51:54 +0300 Subject: [PATCH 3/3] kubeadm: Restrict imports from pkg/client/clientset_generated/internalclientset Signed-off-by: Rostislav M. Georgiev --- cmd/kubeadm/.import-restrictions | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/cmd/kubeadm/.import-restrictions b/cmd/kubeadm/.import-restrictions index 24f861f13ee..b62e156460b 100644 --- a/cmd/kubeadm/.import-restrictions +++ b/cmd/kubeadm/.import-restrictions @@ -84,24 +84,6 @@ "k8s.io/kubernetes/pkg/apis/settings/v1alpha1", "k8s.io/kubernetes/pkg/apis/storage", "k8s.io/kubernetes/pkg/capabilities", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/scheme", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/admissionregistration/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/apps/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/events/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/networking/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/scheduling/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/settings/internalversion", - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/internalversion", "k8s.io/kubernetes/pkg/cloudprovider", "k8s.io/kubernetes/pkg/controller", "k8s.io/kubernetes/pkg/controller/bootstrap", @@ -172,7 +154,8 @@ "k8s.io/kubernetes/pkg/cloudprovider/providers/openstack", "k8s.io/kubernetes/pkg/cloudprovider/providers/ovirt", "k8s.io/kubernetes/pkg/cloudprovider/providers/photon", - "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere" + "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere", + "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" ] } ]