From 9cef38c70558a714c1e79d982ef6090aff3fd799 Mon Sep 17 00:00:00 2001 From: Irfan Ur Rehman Date: Sat, 5 Nov 2016 22:48:55 +0530 Subject: [PATCH 1/3] [Federation] Make federation etcd PVC size configurable --- federation/pkg/kubefed/init/init.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/federation/pkg/kubefed/init/init.go b/federation/pkg/kubefed/init/init.go index 8aea0c96fcc..a6b4c4b9ca1 100644 --- a/federation/pkg/kubefed/init/init.go +++ b/federation/pkg/kubefed/init/init.go @@ -119,6 +119,7 @@ func NewCmdInit(cmdOut io.Writer, config util.AdminConfig) *cobra.Command { cmd.Flags().String("dns-zone-name", "", "DNS suffix for this federation. Federated Service DNS names are published with this suffix.") cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.") cmd.Flags().String("dns-provider", "google-clouddns", "Dns provider to be used for this deployment.") + cmd.Flags().String("etcd-pv-capacity", "10Gi", "Size of persistent volume claim to be used for etcd.") return cmd } @@ -140,6 +141,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name") image := cmdutil.GetFlagString(cmd, "image") dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider") + etcdPVCapacity := cmdutil.GetFlagString(cmd, "etcd-pv-capacity") hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig) hostClientset, err := hostFactory.ClientSet() @@ -188,7 +190,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman // 5. Create a persistent volume and a claim to store the federation // API server's state. This is where federation API server's etcd // stores its data. - pvc, err := createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name) + pvc, err := createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name, etcdPVCapacity) if err != nil { return err } @@ -353,8 +355,9 @@ func createControllerManagerKubeconfigSecret(clientset *client.Clientset, namesp return util.CreateKubeconfigSecret(clientset, config, namespace, kubeconfigName, false) } -func createPVC(clientset *client.Clientset, namespace, svcName string) (*api.PersistentVolumeClaim, error) { - capacity, err := resource.ParseQuantity("10Gi") +func createPVC(clientset *client.Clientset, namespace, svcName, etcdPVCapacity string) (*api.PersistentVolumeClaim, error) { + + capacity, err := resource.ParseQuantity(etcdPVCapacity) if err != nil { return nil, err } From 58b631fe77f8a85bb021b780085d9acf8aba836c Mon Sep 17 00:00:00 2001 From: Irfan Ur Rehman Date: Sun, 6 Nov 2016 00:33:54 +0530 Subject: [PATCH 2/3] [Federation] Unit tests for federation etcd PVC size configurability --- federation/pkg/kubefed/init/init_test.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/federation/pkg/kubefed/init/init_test.go b/federation/pkg/kubefed/init/init_test.go index 09ea41526d2..981a66721d9 100644 --- a/federation/pkg/kubefed/init/init_test.go +++ b/federation/pkg/kubefed/init/init_test.go @@ -76,6 +76,7 @@ func TestInitFederation(t *testing.T) { dnsZoneName string lbIP string image string + etcdPVCapacity string expectedErr string dnsProvider string }{ @@ -86,6 +87,7 @@ func TestInitFederation(t *testing.T) { dnsZoneName: "example.test.", lbIP: "10.20.30.40", image: "example.test/foo:bar", + etcdPVCapacity: "5Gi", expectedErr: "", dnsProvider: "test-dns-provider", }, @@ -96,6 +98,7 @@ func TestInitFederation(t *testing.T) { dnsZoneName: "example.test.", lbIP: "10.20.30.40", image: "example.test/foo:bar", + etcdPVCapacity: "", //test for default value of pvc-size expectedErr: "", dnsProvider: "", //test for default value of dns provider }, @@ -111,7 +114,7 @@ func TestInitFederation(t *testing.T) { } else { dnsProvider = "google-clouddns" //default value of dns-provider } - hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider) + hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider, tc.etcdPVCapacity) if err != nil { t.Fatalf("[%d] unexpected error: %v", i, err) } @@ -130,6 +133,9 @@ func TestInitFederation(t *testing.T) { if "" != tc.dnsProvider { cmd.Flags().Set("dns-provider", tc.dnsProvider) } + if "" != tc.etcdPVCapacity { + cmd.Flags().Set("etcd-pv-capacity", tc.etcdPVCapacity) + } cmd.Run(cmd, []string{tc.federation}) if tc.expectedErr == "" { @@ -392,12 +398,20 @@ func TestCertsHTTPS(t *testing.T) { } } -func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, dnsProvider string) (cmdutil.Factory, error) { +func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, dnsProvider, etcdPVCapacity string) (cmdutil.Factory, error) { svcName := federationName + "-apiserver" svcUrlPrefix := "/api/v1/namespaces/federation-system/services" credSecretName := svcName + "-credentials" cmKubeconfigSecretName := federationName + "-controller-manager-kubeconfig" - capacity, err := resource.ParseQuantity("10Gi") + pvCap := "" + + if "" != etcdPVCapacity { + pvCap = etcdPVCapacity + } else { + pvCap = "10Gi" //test for default value + } + + capacity, err := resource.ParseQuantity(pvCap) if err != nil { return nil, err } From 98d55db5ecba596b853522ec49cab03210c4db4f Mon Sep 17 00:00:00 2001 From: Irfan Ur Rehman Date: Wed, 16 Nov 2016 20:51:10 +0530 Subject: [PATCH 3/3] [Federation] Review comment fixes for making federation etcd PVC size configurable --- federation/pkg/kubefed/init/init.go | 1 - federation/pkg/kubefed/init/init_test.go | 7 ++----- hack/verify-flags/known-flags.txt | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/federation/pkg/kubefed/init/init.go b/federation/pkg/kubefed/init/init.go index a6b4c4b9ca1..6c4a6e0986b 100644 --- a/federation/pkg/kubefed/init/init.go +++ b/federation/pkg/kubefed/init/init.go @@ -356,7 +356,6 @@ func createControllerManagerKubeconfigSecret(clientset *client.Clientset, namesp } func createPVC(clientset *client.Clientset, namespace, svcName, etcdPVCapacity string) (*api.PersistentVolumeClaim, error) { - capacity, err := resource.ParseQuantity(etcdPVCapacity) if err != nil { return nil, err diff --git a/federation/pkg/kubefed/init/init_test.go b/federation/pkg/kubefed/init/init_test.go index 981a66721d9..694cd6f0145 100644 --- a/federation/pkg/kubefed/init/init_test.go +++ b/federation/pkg/kubefed/init/init_test.go @@ -403,12 +403,9 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, svcUrlPrefix := "/api/v1/namespaces/federation-system/services" credSecretName := svcName + "-credentials" cmKubeconfigSecretName := federationName + "-controller-manager-kubeconfig" - pvCap := "" - - if "" != etcdPVCapacity { + pvCap := "10Gi" + if etcdPVCapacity != "" { pvCap = etcdPVCapacity - } else { - pvCap = "10Gi" //test for default value } capacity, err := resource.ParseQuantity(pvCap) diff --git a/hack/verify-flags/known-flags.txt b/hack/verify-flags/known-flags.txt index 348411f09fb..d913a7f25c6 100644 --- a/hack/verify-flags/known-flags.txt +++ b/hack/verify-flags/known-flags.txt @@ -169,6 +169,7 @@ etcd-config etcd-keyfile etcd-mutation-timeout etcd-prefix +etcd-pv-capacity etcd-quorum-read etcd-server etcd-servers