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 +` +}