From f5797c6ba31b21e078281b6d41bc103b6a5e5b43 Mon Sep 17 00:00:00 2001 From: kyamazawa Date: Thu, 30 Nov 2017 20:35:31 +0900 Subject: [PATCH 1/2] add weave-net network plugin support --- cluster.yml | 1 + cluster/network.go | 8 +++ cluster/validation.go | 2 +- network/weave.go | 114 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 network/weave.go diff --git a/cluster.yml b/cluster.yml index 6055ead7..fe7cccfc 100644 --- a/cluster.yml +++ b/cluster.yml @@ -9,6 +9,7 @@ auth: # flannel # calico # canal +# weave network: plugin: flannel options: diff --git a/cluster/network.go b/cluster/network.go index e043aeb9..5643a4bf 100644 --- a/cluster/network.go +++ b/cluster/network.go @@ -36,6 +36,8 @@ func (c *Cluster) DeployNetworkPlugin() error { return c.doCalicoDeploy() case CanalNetworkPlugin: return c.doCanalDeploy() + case WeaveNetworkPlugin: + return c.doWeaveDeploy() default: return fmt.Errorf("[network] Unsupported network plugin: %s", c.Network.Plugin) } @@ -78,6 +80,12 @@ func (c *Cluster) doCanalDeploy() error { return c.doAddonDeploy(pluginYaml, NetworkPluginResourceName) } +func (c *Cluster) doWeaveDeploy() error { + weaveConfig := make(map[string]string) + pluginYaml := network.GetWeaveManifest(weaveConfig) + return c.doAddonDeploy(pluginYaml, NetworkPluginResourceName) +} + func (c *Cluster) setClusterNetworkDefaults() { setDefaultIfEmpty(&c.Network.Plugin, DefaultNetworkPlugin) diff --git a/cluster/validation.go b/cluster/validation.go index e0870107..f0dc4740 100644 --- a/cluster/validation.go +++ b/cluster/validation.go @@ -46,7 +46,7 @@ func validateAuthOptions(c *Cluster) error { } func validateNetworkOptions(c *Cluster) error { - if c.Network.Plugin != FlannelNetworkPlugin && c.Network.Plugin != CalicoNetworkPlugin && c.Network.Plugin != CanalNetworkPlugin { + if c.Network.Plugin != FlannelNetworkPlugin && c.Network.Plugin != CalicoNetworkPlugin && c.Network.Plugin != CanalNetworkPlugin && c.Network.Plugin != WeaveNetworkPlugin { return fmt.Errorf("Network plugin [%s] is not supported", c.Network.Plugin) } return nil diff --git a/network/weave.go b/network/weave.go new file mode 100644 index 00000000..177680b6 --- /dev/null +++ b/network/weave.go @@ -0,0 +1,114 @@ +package network + +func GetWeaveManifest(weaveConfig map[string]string) string { + return `# This ConfigMap can be used to configure a self-hosted Weave Net installation. +apiVersion: v1 +kind: List +items: + - apiVersion: v1 + kind: ServiceAccount + metadata: + name: weave-net + namespace: kube-system + - apiVersion: extensions/v1beta1 + kind: DaemonSet + metadata: + name: weave-net + labels: + name: weave-net + namespace: kube-system + spec: + template: + metadata: + labels: + name: weave-net + spec: + containers: + - name: weave + command: + - /home/weave/launch.sh + env: + - name: HOSTNAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: 'weaveworks/weave-kube:2.1.2' + livenessProbe: + httpGet: + host: 127.0.0.1 + path: /status + port: 6784 + initialDelaySeconds: 30 + resources: + requests: + cpu: 10m + securityContext: + privileged: true + volumeMounts: + - name: weavedb + mountPath: /weavedb + - name: cni-bin + mountPath: /host/opt + - name: cni-bin2 + mountPath: /host/home + - name: cni-conf + mountPath: /host/etc + - name: dbus + mountPath: /host/var/lib/dbus + - name: lib-modules + mountPath: /lib/modules + - name: xtables-lock + mountPath: /run/xtables.lock + - name: weave-npc + args: [] + env: + - name: HOSTNAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: 'weaveworks/weave-npc:2.1.2' + resources: + requests: + cpu: 10m + securityContext: + privileged: true + volumeMounts: + - name: xtables-lock + mountPath: /run/xtables.lock + hostNetwork: true + hostPID: true + restartPolicy: Always + securityContext: + seLinuxOptions: {} + serviceAccountName: weave-net + tolerations: + - effect: NoSchedule + operator: Exists + volumes: + - name: weavedb + hostPath: + path: /var/lib/weave + - name: cni-bin + hostPath: + path: /opt + - name: cni-bin2 + hostPath: + path: /home + - name: cni-conf + hostPath: + path: /etc + - name: dbus + hostPath: + path: /var/lib/dbus + - name: lib-modules + hostPath: + path: /lib/modules + - name: xtables-lock + hostPath: + path: /run/xtables.lock + updateStrategy: + type: RollingUpdate +` +} From 82dce19ac8b69b68bb1ec0ab040039703e5376b8 Mon Sep 17 00:00:00 2001 From: kyamazawa Date: Wed, 6 Dec 2017 12:53:51 +0900 Subject: [PATCH 2/2] merge head & add weave-net network plugin configuration cluster cidr, weave_image, weave_cni_image --- cluster/defaults.go | 2 ++ cluster/network.go | 11 +++++++++-- network/weave.go | 8 +++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cluster/defaults.go b/cluster/defaults.go index 43579264..c937e5c7 100644 --- a/cluster/defaults.go +++ b/cluster/defaults.go @@ -26,6 +26,8 @@ const ( DefaultCanalNodeImage = "quay.io/calico/node:v2.6.2" DefaultCanalCNIImage = "quay.io/calico/cni:v1.11.0" DefaultCanalFlannelImage = "quay.io/coreos/flannel:v0.9.1" + DefaultWeaveImage = "weaveworks/weave-kube:2.1.2" + DefaultWeaveCNIImage = "weaveworks/weave-npc:2.1.2" DefaultKubeDNSImage = "gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5" DefaultDNSMasqImage = "gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5" diff --git a/cluster/network.go b/cluster/network.go index 5643a4bf..3212abf1 100644 --- a/cluster/network.go +++ b/cluster/network.go @@ -25,6 +25,10 @@ const ( CanalNodeImage = "canal_node_image" CanalCNIImage = "canal_cni_image" CanalFlannelImage = "canal_flannel_image" + + WeaveNetworkPlugin = "weave" + WeaveImage = "weave_node_image" + WeaveCNIImage = "weave_cni_image" ) func (c *Cluster) DeployNetworkPlugin() error { @@ -81,8 +85,7 @@ func (c *Cluster) doCanalDeploy() error { } func (c *Cluster) doWeaveDeploy() error { - weaveConfig := make(map[string]string) - pluginYaml := network.GetWeaveManifest(weaveConfig) + pluginYaml := network.GetWeaveManifest(c.ClusterCIDR, c.Network.Options[WeaveImage], c.Network.Options[WeaveCNIImage]) return c.doAddonDeploy(pluginYaml, NetworkPluginResourceName) } @@ -107,5 +110,9 @@ func (c *Cluster) setClusterNetworkDefaults() { setDefaultIfEmptyMapValue(c.Network.Options, CanalCNIImage, DefaultCanalCNIImage) setDefaultIfEmptyMapValue(c.Network.Options, CanalNodeImage, DefaultCanalNodeImage) setDefaultIfEmptyMapValue(c.Network.Options, CanalFlannelImage, DefaultCanalFlannelImage) + + case c.Network.Plugin == WeaveNetworkPlugin: + setDefaultIfEmptyMapValue(c.Network.Options, WeaveImage, DefaultWeaveImage) + setDefaultIfEmptyMapValue(c.Network.Options, WeaveCNIImage, DefaultWeaveCNIImage) } } diff --git a/network/weave.go b/network/weave.go index 177680b6..b325b74c 100644 --- a/network/weave.go +++ b/network/weave.go @@ -1,6 +1,6 @@ package network -func GetWeaveManifest(weaveConfig map[string]string) string { +func GetWeaveManifest(clusterCIDR, image, cniImage string) string { return `# This ConfigMap can be used to configure a self-hosted Weave Net installation. apiVersion: v1 kind: List @@ -33,7 +33,9 @@ items: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - image: 'weaveworks/weave-kube:2.1.2' + - name: IPALLOC_RANGE + value: "` + clusterCIDR + `" + image: ` + image + ` livenessProbe: httpGet: host: 127.0.0.1 @@ -68,7 +70,7 @@ items: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - image: 'weaveworks/weave-npc:2.1.2' + image: ` + cniImage + ` resources: requests: cpu: 10m