Make Weave MTU configurable and set AWS default config for jumbo frames

This commit is contained in:
Jordan Jennings 2017-05-30 06:35:03 -04:00
parent 05d5c8c0cd
commit 6213c519e1
10 changed files with 64 additions and 25 deletions

View File

@ -354,30 +354,6 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
}
cluster.Spec.ConfigBase = configBase.Path()
cluster.Spec.Networking = &api.NetworkingSpec{}
switch c.Networking {
case "classic":
cluster.Spec.Networking.Classic = &api.ClassicNetworkingSpec{}
case "kubenet":
cluster.Spec.Networking.Kubenet = &api.KubenetNetworkingSpec{}
case "external":
cluster.Spec.Networking.External = &api.ExternalNetworkingSpec{}
case "cni":
cluster.Spec.Networking.CNI = &api.CNINetworkingSpec{}
case "kopeio-vxlan", "kopeio":
cluster.Spec.Networking.Kopeio = &api.KopeioNetworkingSpec{}
case "weave":
cluster.Spec.Networking.Weave = &api.WeaveNetworkingSpec{}
case "flannel":
cluster.Spec.Networking.Flannel = &api.FlannelNetworkingSpec{}
case "calico":
cluster.Spec.Networking.Calico = &api.CalicoNetworkingSpec{}
case "canal":
cluster.Spec.Networking.Canal = &api.CanalNetworkingSpec{}
default:
return fmt.Errorf("unknown networking mode %q", c.Networking)
}
glog.V(4).Infof("networking mode=%s => %s", c.Networking, fi.DebugAsJsonString(cluster.Spec.Networking))
// In future we could change the default if the flag is not specified, e.g. in 1.7 maybe the default is RBAC?
@ -668,6 +644,37 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
}
}
cluster.Spec.Networking = &api.NetworkingSpec{}
switch c.Networking {
case "classic":
cluster.Spec.Networking.Classic = &api.ClassicNetworkingSpec{}
case "kubenet":
cluster.Spec.Networking.Kubenet = &api.KubenetNetworkingSpec{}
case "external":
cluster.Spec.Networking.External = &api.ExternalNetworkingSpec{}
case "cni":
cluster.Spec.Networking.CNI = &api.CNINetworkingSpec{}
case "kopeio-vxlan", "kopeio":
cluster.Spec.Networking.Kopeio = &api.KopeioNetworkingSpec{}
case "weave":
cluster.Spec.Networking.Weave = &api.WeaveNetworkingSpec{}
if cluster.Spec.CloudProvider == "aws" {
// AWS supports "jumbo frames" of 9001 bytes and weave adds up to 87 bytes overhead
// sets the default to the largest number that leaves enough overhead and is divisible by 4
jumboFrameMTUSize := int32(8912)
cluster.Spec.Networking.Weave.MTU = &jumboFrameMTUSize
}
case "flannel":
cluster.Spec.Networking.Flannel = &api.FlannelNetworkingSpec{}
case "calico":
cluster.Spec.Networking.Calico = &api.CalicoNetworkingSpec{}
case "canal":
cluster.Spec.Networking.Canal = &api.CanalNetworkingSpec{}
default:
return fmt.Errorf("unknown networking mode %q", c.Networking)
}
if c.VPCID != "" {
cluster.Spec.NetworkID = c.VPCID
}

View File

@ -101,6 +101,19 @@ Daemonset installation for K8s 1.4.x or 1.5.x.
$ kubectl create -f https://git.io/weave-kube
```
### Configuring Weave MTU
The Weave MTU is configurable by editing the cluster and setting `mtu` option in the weave configuration.
AWS VPCs support jumbo frames, so on cluster creation kops sets the weave MTU to 8912 bytes (9001 minus overhead).
```
spec:
networking:
weave:
mtu: 8912
```
### Calico Example for CNI and Network Policy
#### Installing Calico on a new Cluster

View File

@ -54,6 +54,7 @@ type KopeioNetworkingSpec struct {
// Weave declares that we want Weave networking
type WeaveNetworkingSpec struct {
MTU *int32 `json:"mtu,omitempty"`
}
// Flannel declares that we want Flannel networking

View File

@ -54,6 +54,7 @@ type KopeioNetworkingSpec struct {
// Weave declares that we want Weave networking
type WeaveNetworkingSpec struct {
MTU *int32 `json:"mtu,omitempty"`
}
// Flannel declares that we want Flannel networking

View File

@ -1765,6 +1765,7 @@ func Convert_kops_RBACAuthorizationSpec_To_v1alpha1_RBACAuthorizationSpec(in *ko
}
func autoConvert_v1alpha1_WeaveNetworkingSpec_To_kops_WeaveNetworkingSpec(in *WeaveNetworkingSpec, out *kops.WeaveNetworkingSpec, s conversion.Scope) error {
out.MTU = in.MTU
return nil
}
@ -1773,6 +1774,7 @@ func Convert_v1alpha1_WeaveNetworkingSpec_To_kops_WeaveNetworkingSpec(in *WeaveN
}
func autoConvert_kops_WeaveNetworkingSpec_To_v1alpha1_WeaveNetworkingSpec(in *kops.WeaveNetworkingSpec, out *WeaveNetworkingSpec, s conversion.Scope) error {
out.MTU = in.MTU
return nil
}

View File

@ -54,6 +54,7 @@ type KopeioNetworkingSpec struct {
// Weave declares that we want Weave networking
type WeaveNetworkingSpec struct {
MTU *int32 `json:"mtu,omitempty"`
}
// Flannel declares that we want Flannel networking

View File

@ -1919,6 +1919,7 @@ func Convert_kops_TopologySpec_To_v1alpha2_TopologySpec(in *kops.TopologySpec, o
}
func autoConvert_v1alpha2_WeaveNetworkingSpec_To_kops_WeaveNetworkingSpec(in *WeaveNetworkingSpec, out *kops.WeaveNetworkingSpec, s conversion.Scope) error {
out.MTU = in.MTU
return nil
}
@ -1927,6 +1928,7 @@ func Convert_v1alpha2_WeaveNetworkingSpec_To_kops_WeaveNetworkingSpec(in *WeaveN
}
func autoConvert_kops_WeaveNetworkingSpec_To_v1alpha2_WeaveNetworkingSpec(in *kops.WeaveNetworkingSpec, out *WeaveNetworkingSpec, s conversion.Scope) error {
out.MTU = in.MTU
return nil
}

View File

@ -97,6 +97,11 @@ spec:
limits:
cpu: 100m
memory: 200Mi
{{if .Networking.Weave.MTU }}
env:
- name: WEAVE_MTU
value: "{{ .Networking.Weave.MTU }}"
{{end}}
- name: weave-npc
image: weaveworks/weave-npc:1.9.4
resources:

View File

@ -58,6 +58,11 @@ spec:
limits:
cpu: 100m
memory: 200Mi
{{if .Networking.Weave.MTU }}
env:
- name: WEAVE_MTU
value: "{{ .Networking.Weave.MTU }}"
{{end}}
- name: weave-npc
image: weaveworks/weave-npc:1.9.4
resources:

View File

@ -241,7 +241,9 @@ func (b *BootstrapChannelBuilder) buildManifest() (*channelsapi.Addons, map[stri
if b.cluster.Spec.Networking.Weave != nil {
key := "networking.weave"
version := "1.9.4"
// 1.9.5-kops.1 = 1.9.4 with WEAVE_MTU configured
version := "1.9.5-kops.1"
{
location := key + "/pre-k8s-1.6.yaml"