multus cni support 41/45741/1
authorGuo Ruijing <ruijing.guo@intel.com>
Wed, 18 Oct 2017 23:16:27 +0000 (19:16 -0400)
committerGuo Ruijing <ruijing.guo@intel.com>
Wed, 18 Oct 2017 23:18:23 +0000 (19:18 -0400)
Change-Id: I0723447de8e9f5734a3a5d077f7f6f08cd02d9b3
Signed-off-by: Guo Ruijing <ruijing.guo@intel.com>
src/vagrant/kubeadm_multus/Vagrantfile [new file with mode: 0644]
src/vagrant/kubeadm_multus/examples/ubuntu.yaml [new file with mode: 0644]
src/vagrant/kubeadm_multus/host_setup.sh [new file with mode: 0644]
src/vagrant/kubeadm_multus/master_setup.sh [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/Dockerfile.build [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/Dockerfile.multus [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/build.sh [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/install_cni.sh [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/kube_cni_multus.yml [new file with mode: 0644]
src/vagrant/kubeadm_multus/multus/setup.sh [new file with mode: 0644]
src/vagrant/kubeadm_multus/worker_setup.sh [new file with mode: 0644]

diff --git a/src/vagrant/kubeadm_multus/Vagrantfile b/src/vagrant/kubeadm_multus/Vagrantfile
new file mode 100644 (file)
index 0000000..aa3792f
--- /dev/null
@@ -0,0 +1,33 @@
+$num_workers=3
+
+Vagrant.require_version ">= 1.8.6"
+Vagrant.configure("2") do |config|
+
+  config.vm.box = "bento/ubuntu-16.04"
+  config.vm.provision "shell", path: "host_setup.sh", privileged: false
+  config.vm.provider :virtualbox do |vb|
+    vb.customize ["modifyvm", :id, "--memory", 4096]
+    vb.customize ["modifyvm", :id, "--cpus", 4]
+    vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
+    vb.customize "post-boot",["controlvm", :id, "setlinkstate1", "on"]
+  end
+
+  config.vm.provision "shell", path: "host_setup.sh", privileged: false
+
+  config.vm.define "master" do |config|
+    config.vm.hostname = "master"
+    config.vm.provision "shell", path: "master_setup.sh", privileged: false
+    config.vm.network :private_network, ip: "10.96.0.10"
+    config.vm.network :private_network, ip: "10.244.0.10"
+  end
+
+  (1 .. $num_workers).each do |i|
+    config.vm.define vm_name = "worker%d" % [i] do |config|
+      config.vm.hostname = vm_name
+      config.vm.provision "shell", path: "worker_setup.sh", privileged: false
+      config.vm.network :private_network, ip: "10.96.0.#{i+20}"
+      config.vm.network :private_network, ip: "10.244.0.#{i+20}"
+    end
+  end
+
+end
diff --git a/src/vagrant/kubeadm_multus/examples/ubuntu.yaml b/src/vagrant/kubeadm_multus/examples/ubuntu.yaml
new file mode 100644 (file)
index 0000000..b01f903
--- /dev/null
@@ -0,0 +1,32 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: ubuntu
+  labels:
+    app: ubuntu
+spec:
+  type: NodePort
+  ports:
+  - port: 80
+    protocol: TCP
+    name: http
+  selector:
+    app: ubuntu
+---
+apiVersion: v1
+kind: ReplicationController
+metadata:
+  name: ubuntu
+spec:
+  replicas: 2
+  template:
+    metadata:
+      labels:
+        app: ubuntu
+    spec:
+      containers:
+      - name: ubuntu
+        image: openretriever/ubuntu1604-ping
+        command: [ "/bin/bash", "-c", "sleep 30000" ]
+        ports:
+        - containerPort: 80
diff --git a/src/vagrant/kubeadm_multus/host_setup.sh b/src/vagrant/kubeadm_multus/host_setup.sh
new file mode 100644 (file)
index 0000000..003bf2b
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -ex
+
+cat << EOF | sudo tee /etc/hosts
+1.8.1.0.1    localhost
+10.96.0.10 master
+10.96.0.21 worker1
+10.96.0.22 worker2
+10.96.0.23 worker3
+EOF
+
+curl -s http://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
+deb http://apt.kubernetes.io/ kubernetes-xenial main
+EOF
+sudo apt-get update
+sudo apt-get install -y docker.io
+sudo apt-get install -y --allow-downgrades kubelet=1.7.0-00 kubeadm=1.7.0-00 kubectl=1.7.0-00 kubernetes-cni=0.5.1-00
+sudo rm -rf /var/lib/kubelet
diff --git a/src/vagrant/kubeadm_multus/master_setup.sh b/src/vagrant/kubeadm_multus/master_setup.sh
new file mode 100644 (file)
index 0000000..7d3dc3e
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+sudo kubeadm init --apiserver-advertise-address=10.96.0.10  --service-cidr=10.96.0.0/24 --pod-network-cidr=10.244.0.0/16 --token 8c5adc.1cec8dbf339093f0
+sudo cp /etc/kubernetes/admin.conf $HOME/
+sudo chown $(id -u):$(id -g) $HOME/admin.conf
+export KUBECONFIG=$HOME/admin.conf
+echo "export KUBECONFIG=$HOME/admin.conf" >> $HOME/.bash_profile
+
+kubectl apply -f http://git.io/weave-kube-1.6
+kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
+kubectl apply -f /vagrant/multus/kube_cni_multus.yml
diff --git a/src/vagrant/kubeadm_multus/multus/Dockerfile.build b/src/vagrant/kubeadm_multus/multus/Dockerfile.build
new file mode 100644 (file)
index 0000000..0b17fab
--- /dev/null
@@ -0,0 +1,5 @@
+FROM ubuntu:16.04
+
+RUN apt-get update && apt-get install -y sudo git wget
+ADD ./build.sh .
+RUN bash ./build.sh
diff --git a/src/vagrant/kubeadm_multus/multus/Dockerfile.multus b/src/vagrant/kubeadm_multus/multus/Dockerfile.multus
new file mode 100644 (file)
index 0000000..e1d8cb0
--- /dev/null
@@ -0,0 +1,4 @@
+FROM ubuntu:16.04
+
+ADD multus /cni/multus
+ADD install_cni.sh /cni/install_cni.sh
diff --git a/src/vagrant/kubeadm_multus/multus/build.sh b/src/vagrant/kubeadm_multus/multus/build.sh
new file mode 100644 (file)
index 0000000..526b0b7
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+wget -qO- https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz | sudo tar -C /usr/local -xz
+echo 'export GOPATH=/go; export PATH=/usr/local/go/bin:$GOPATH/bin:$PATH' >> ~/.bashrc
+export GOPATH=/go; export PATH=/usr/local/go/bin:$GOPATH/bin:$PATH
+git clone https://github.com/Intel-Corp/multus-cni
+cd multus-cni; bash ./build
diff --git a/src/vagrant/kubeadm_multus/multus/install_cni.sh b/src/vagrant/kubeadm_multus/multus/install_cni.sh
new file mode 100644 (file)
index 0000000..a4c5059
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+set -ex
+cp /cni/multus /opt/cni/bin
+cp /etc/kube-cnimultus/cni-conf.json  /etc/cni/net.d/05-multus.conf
+while true; do sleep 3600; done
diff --git a/src/vagrant/kubeadm_multus/multus/kube_cni_multus.yml b/src/vagrant/kubeadm_multus/multus/kube_cni_multus.yml
new file mode 100644 (file)
index 0000000..8290218
--- /dev/null
@@ -0,0 +1,88 @@
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: cnimultus
+  namespace: kube-system
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+  name: kube-cnimultus-cfg
+  namespace: kube-system
+  labels:
+    tier: node
+    app: cnimultus
+data:
+  cni-conf.json: |
+    {
+      "name": "multus",
+      "type": "multus",
+      "delegates": [
+        {
+          "name": "weave",
+          "type": "weave-net",
+          "hairpinMode": true,
+          "masterplugin": true
+        },
+        {
+          "name": "mynet",
+          "type": "bridge",
+          "bridge": "cni0",
+          "isGateway": true,
+          "ipMasq": true,
+          "ipam": {
+            "type": "host-local",
+            "subnet": "10.22.0.0/16",
+            "routes": [
+              { "dst": "0.0.0.0/0" }
+            ]
+          }
+        }
+      ]
+    }
+---
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+  name: kube-cnimultus-ds
+  namespace: kube-system
+  labels:
+    tier: node
+    app: cnimultus
+spec:
+  template:
+    metadata:
+      labels:
+        tier: node
+        app: cnimultus
+    spec:
+      hostNetwork: true
+      nodeSelector:
+        beta.kubernetes.io/arch: amd64
+      tolerations:
+      - key: node-role.kubernetes.io/master
+        operator: Exists
+        effect: NoSchedule
+      serviceAccountName: cnimultus
+      containers:
+      - name: install-cni
+        image: openretriever/cnimultus
+        command: [ "/bin/bash", "/cni/install_cni.sh" ]
+        volumeMounts:
+        - name: cni-bin
+          mountPath: /opt/cni/bin
+        - name: cni-cfg
+          mountPath: /etc/cni/net.d
+        - name: cnimultus-cfg
+          mountPath: /etc/kube-cnimultus
+      volumes:
+        - name: cni-bin
+          hostPath:
+            path: /opt/cni/bin
+        - name: cni-cfg
+          hostPath:
+            path: /etc/cni/net.d
+        - name: cnimultus-cfg
+          configMap:
+            name: kube-cnimultus-cfg
diff --git a/src/vagrant/kubeadm_multus/multus/setup.sh b/src/vagrant/kubeadm_multus/multus/setup.sh
new file mode 100644 (file)
index 0000000..4729993
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+BUILD=`pwd`
+
+sudo docker build -t multus.build . -f Dockerfile.build
+sudo docker run -v $BUILD:/build -ti multus.build cp multus-cni/bin/multus /build 
+sudo docker build -t openretriever/cnimultus . -f Dockerfile.multus
+sudo docker push openretriever/cnimultus
+rm -rf multus
diff --git a/src/vagrant/kubeadm_multus/worker_setup.sh b/src/vagrant/kubeadm_multus/worker_setup.sh
new file mode 100644 (file)
index 0000000..1ba3ec8
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+set -ex
+sudo kubeadm join --token 8c5adc.1cec8dbf339093f0 10.96.0.10:6443 || true