Merge pull request #36310 from irfanurrehman/federation-kubefed-todo-1

Automatic merge from submit-queue

[Federation] Make federation etcd PVC size configurable

This one implements one of the many TODO items pending in the previous set of kubefed PRs.
The design doc PR is at https://github.com/kubernetes/kubernetes/pull/34484

cc  @kubernetes/sig-cluster-federation  @madhusudancs



**Release note**:
<!--  Steps to write your release note:
1. Use the release-note-* labels to set the release note state (if you have access) 
2. Enter your extended release note in the below block; leaving it blank means using the PR title as the release note. If no release note is required, just write `NONE`. 
-->
``` 
[Federation] kubefed init now has a new flag, --etcd-pv-capacity, which can be used to configure the persistent volume capacity for etcd.  
```
This commit is contained in:
Kubernetes Submit Queue 2016-12-08 13:03:07 -08:00 committed by GitHub
commit 702c33a564
3 changed files with 20 additions and 6 deletions

View File

@ -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("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("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("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 return cmd
} }
@ -140,6 +141,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name") dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name")
image := cmdutil.GetFlagString(cmd, "image") image := cmdutil.GetFlagString(cmd, "image")
dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider") dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider")
etcdPVCapacity := cmdutil.GetFlagString(cmd, "etcd-pv-capacity")
hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig) hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig)
hostClientset, err := hostFactory.ClientSet() 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 // 5. Create a persistent volume and a claim to store the federation
// API server's state. This is where federation API server's etcd // API server's state. This is where federation API server's etcd
// stores its data. // stores its data.
pvc, err := createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name) pvc, err := createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name, etcdPVCapacity)
if err != nil { if err != nil {
return err return err
} }
@ -353,8 +355,8 @@ func createControllerManagerKubeconfigSecret(clientset *client.Clientset, namesp
return util.CreateKubeconfigSecret(clientset, config, namespace, kubeconfigName, false) return util.CreateKubeconfigSecret(clientset, config, namespace, kubeconfigName, false)
} }
func createPVC(clientset *client.Clientset, namespace, svcName string) (*api.PersistentVolumeClaim, error) { func createPVC(clientset *client.Clientset, namespace, svcName, etcdPVCapacity string) (*api.PersistentVolumeClaim, error) {
capacity, err := resource.ParseQuantity("10Gi") capacity, err := resource.ParseQuantity(etcdPVCapacity)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -76,6 +76,7 @@ func TestInitFederation(t *testing.T) {
dnsZoneName string dnsZoneName string
lbIP string lbIP string
image string image string
etcdPVCapacity string
expectedErr string expectedErr string
dnsProvider string dnsProvider string
}{ }{
@ -86,6 +87,7 @@ func TestInitFederation(t *testing.T) {
dnsZoneName: "example.test.", dnsZoneName: "example.test.",
lbIP: "10.20.30.40", lbIP: "10.20.30.40",
image: "example.test/foo:bar", image: "example.test/foo:bar",
etcdPVCapacity: "5Gi",
expectedErr: "", expectedErr: "",
dnsProvider: "test-dns-provider", dnsProvider: "test-dns-provider",
}, },
@ -96,6 +98,7 @@ func TestInitFederation(t *testing.T) {
dnsZoneName: "example.test.", dnsZoneName: "example.test.",
lbIP: "10.20.30.40", lbIP: "10.20.30.40",
image: "example.test/foo:bar", image: "example.test/foo:bar",
etcdPVCapacity: "", //test for default value of pvc-size
expectedErr: "", expectedErr: "",
dnsProvider: "", //test for default value of dns provider dnsProvider: "", //test for default value of dns provider
}, },
@ -111,7 +114,7 @@ func TestInitFederation(t *testing.T) {
} else { } else {
dnsProvider = "google-clouddns" //default value of dns-provider 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 { if err != nil {
t.Fatalf("[%d] unexpected error: %v", i, err) t.Fatalf("[%d] unexpected error: %v", i, err)
} }
@ -130,6 +133,9 @@ func TestInitFederation(t *testing.T) {
if "" != tc.dnsProvider { if "" != tc.dnsProvider {
cmd.Flags().Set("dns-provider", 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}) cmd.Run(cmd, []string{tc.federation})
if tc.expectedErr == "" { if tc.expectedErr == "" {
@ -392,12 +398,17 @@ 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" svcName := federationName + "-apiserver"
svcUrlPrefix := "/api/v1/namespaces/federation-system/services" svcUrlPrefix := "/api/v1/namespaces/federation-system/services"
credSecretName := svcName + "-credentials" credSecretName := svcName + "-credentials"
cmKubeconfigSecretName := federationName + "-controller-manager-kubeconfig" cmKubeconfigSecretName := federationName + "-controller-manager-kubeconfig"
capacity, err := resource.ParseQuantity("10Gi") pvCap := "10Gi"
if etcdPVCapacity != "" {
pvCap = etcdPVCapacity
}
capacity, err := resource.ParseQuantity(pvCap)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -174,6 +174,7 @@ etcd-config
etcd-keyfile etcd-keyfile
etcd-mutation-timeout etcd-mutation-timeout
etcd-prefix etcd-prefix
etcd-pv-capacity
etcd-quorum-read etcd-quorum-read
etcd-server etcd-server
etcd-servers etcd-servers