diff options
-rw-r--r-- | src/vagrant/k8s_kubeadm/README.md | 23 | ||||
-rw-r--r-- | src/vagrant/k8s_kubeadm/Vagrantfile | 27 | ||||
-rwxr-xr-x | src/vagrant/k8s_kubeadm/examples/nginx-app.sh | 10 | ||||
-rw-r--r-- | src/vagrant/k8s_kubeadm/examples/nginx-app.yaml | 31 | ||||
-rw-r--r-- | src/vagrant/k8s_kubeadm/master_setup.sh | 30 | ||||
-rw-r--r-- | src/vagrant/k8s_kubeadm/worker_setup.sh | 22 |
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'" |