summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vagrant/k8s_kubeadm/README.md23
-rw-r--r--src/vagrant/k8s_kubeadm/Vagrantfile27
-rwxr-xr-xsrc/vagrant/k8s_kubeadm/examples/nginx-app.sh10
-rw-r--r--src/vagrant/k8s_kubeadm/examples/nginx-app.yaml31
-rw-r--r--src/vagrant/k8s_kubeadm/master_setup.sh30
-rw-r--r--src/vagrant/k8s_kubeadm/worker_setup.sh22
6 files changed, 143 insertions, 0 deletions
diff --git a/src/vagrant/k8s_kubeadm/README.md b/src/vagrant/k8s_kubeadm/README.md
new file mode 100644
index 0000000..ed5f6c6
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/README.md
@@ -0,0 +1,23 @@
+Vagrant
+=======
+
+vagrant is to create kubernetes cluster using kubeadm.
+kubernetes installation by kubeadm can be refered to
+https://kubernetes.io/docs/getting-started-guides/kubeadm
+
+Vagrant Setup
+-------------
+
+sudo apt-get install -y virtualbox
+wget --no-check-certificate https://releases.hashicorp.com/vagrant/1.8.6/vagrant_1.8.6_x86_64.deb
+sudo dpkg -i vagrant_1.8.6_x86_64.deb
+
+K8s Setup
+---------
+
+vagrant up
+
+K8s Cleanup
+-----------
+
+vagrant destroy -f
diff --git a/src/vagrant/k8s_kubeadm/Vagrantfile b/src/vagrant/k8s_kubeadm/Vagrantfile
new file mode 100644
index 0000000..3baf072
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/Vagrantfile
@@ -0,0 +1,27 @@
+$num_workers=3
+
+Vagrant.require_version ">= 1.8.6"
+Vagrant.configure("2") do |config|
+
+ config.vm.box = "bento/ubuntu-16.04"
+ config.vm.provider :virtualbox do |vb|
+ vb.customize ["modifyvm", :id, "--memory", 4096]
+ vb.customize ["modifyvm", :id, "--cpus", 4]
+ vb.customize "post-boot",["controlvm", :id, "setlinkstate1", "on"]
+ end
+
+ 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: "192.168.1.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: "192.168.1.#{i+20}"
+ end
+ end
+
+end
diff --git a/src/vagrant/k8s_kubeadm/examples/nginx-app.sh b/src/vagrant/k8s_kubeadm/examples/nginx-app.sh
new file mode 100755
index 0000000..bfd0613
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/examples/nginx-app.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+kubectl create -f /vagrant/examples/nginx-app.yaml
+kubectl get nodes
+kubectl get services
+kubectl get pods
+kubectl get rc
+sleep 120
+svcip=$(kubectl get services nginx -o json | grep clusterIP | cut -f4 -d'"')
+wget http://$svcip
diff --git a/src/vagrant/k8s_kubeadm/examples/nginx-app.yaml b/src/vagrant/k8s_kubeadm/examples/nginx-app.yaml
new file mode 100644
index 0000000..f80881a
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/examples/nginx-app.yaml
@@ -0,0 +1,31 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: nginx
+ labels:
+ app: nginx
+spec:
+ type: NodePort
+ ports:
+ - port: 80
+ protocol: TCP
+ name: http
+ selector:
+ app: nginx
+---
+apiVersion: v1
+kind: ReplicationController
+metadata:
+ name: nginx
+spec:
+ replicas: 2
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - name: nginx
+ image: nginx
+ ports:
+ - containerPort: 80
diff --git a/src/vagrant/k8s_kubeadm/master_setup.sh b/src/vagrant/k8s_kubeadm/master_setup.sh
new file mode 100644
index 0000000..31e7901
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/master_setup.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+set -e
+HOME=`pwd`
+
+cat << EOF | sudo tee /etc/hosts
+127.0.0.1 localhost
+192.168.1.10 master
+192.168.1.21 worker1
+192.168.1.22 worker2
+192.168.1.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 kubelet kubeadm kubectl kubernetes-cni
+
+sudo kubeadm init --apiserver-advertise-address 192.168.1.10 --service-cidr=192.168.1.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 http://docs.projectcalico.org/v2.1/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
diff --git a/src/vagrant/k8s_kubeadm/worker_setup.sh b/src/vagrant/k8s_kubeadm/worker_setup.sh
new file mode 100644
index 0000000..d04cae1
--- /dev/null
+++ b/src/vagrant/k8s_kubeadm/worker_setup.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+
+set -e
+HOME=`pwd`
+
+cat << EOF | sudo tee /etc/hosts
+127.0.0.1 localhost
+192.168.1.10 master
+192.168.1.21 worker1
+192.168.1.22 worker2
+192.168.1.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 kubelet kubeadm kubectl kubernetes-cni
+sudo kubeadm join --token 8c5adc.1cec8dbf339093f0 192.168.1.10:6443 || true
+echo "vagrant ssh master -c '/vagrant/examples/nginx-app.sh'"