Vagrantfile for KubeAdm/Calico using CentOS
This is an alternate Vagrantfile that uses CentOS 7, instead of Ubuntu 16.04 for creating a two node KubeAdm cluster for Kubernetes with Calico plugin. See https://blog.michali.net/2017/02/11/using-kubeadm-an…r-ipv6-addresses/ for info on how this is used. Besides the different image, the provision has some minor changes. Here’s the file contents, which I’ll eventually put into a github repo:
Update: You can do the mods mentioned in https://blog.michali.net/2017/02/13/update-on-kubeadm-with-calico/ for the Ubuntu version of the vagrant file. This would use and IP of 10.20.30.10 for the master node, which you can use in the “kubeadm init” command with –api-advertise-addresses=10.20.30.10 option.
# -*- mode: ruby -*-
# vi: set ft=ruby :
# The calicoctl download URL.
calicoctl_url = "https://github.com/projectcalico/calico-containers/releases/download/v1.0.0/calicoctl"
# The version of the calico docker images to install. This is used to pre-load
# the calico/node image which slows down the install process, but speeds up the tutorial.
#
# This version should match the version required by calicoctl installed from
# calicoctl_url.
calico_node_ver = "latest"
# Size of the cluster created by Vagrant
num_instances=2
# Change basename of the VM
instance_name_prefix="cnode"
# The IP address of the first server
primary_ip = "10.96.0."
Vagrant.configure(2) do |config|
# always use Vagrants insecure key
config.ssh.insert_key = 'true'
config.ssh.username = 'vagrant'
# Use Centos/7 box
# https://atlas.hashicorp.com/boxes/search
config.vm.box = "centos/7"
config.vm.provider "virtualbox" do |vb|
vb.cpus = 2
vb.memory = 2048
end
# Set up each box
(1..num_instances).each do |i|
vm_name = "%s-%02d" % [instance_name_prefix, i]
config.vm.define vm_name do |host|
host.vm.hostname = vm_name
ip = "#{primary_ip}#{i+100}"
host.vm.network :private_network, ip: ip
# Add repo, disable security, install kubelet, kubeadm, kubectl and k8s-CNI binaries.
# Start docker and kubelet.
# host.vm.provision "file", source: "kubernetes.repo", destination: "/etc/yum.repos.d/kubernetes.repo"
host.vm.provision :shell, inline: <<-SHELL
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
SHELL
host.vm.provision :shell, inline: "docker pull quay.io/calico/node:#{calico_node_ver}"
host.vm.provision :shell, inline: "docker pull quay.io/calico/ctl:#{calico_node_ver}"
# download calicoctl.
host.vm.provision :shell, inline: "curl -L --silent #{calicoctl_url} -o /usr/local/bin/calicoctl"
host.vm.provision :shell, inline: "chmod +x /usr/local/bin/calicoctl"
host.vm.provision :shell, inline: "echo PATH=${PATH}:/usr/local/bin > /etc/profile.d/local-bin.sh && chmod 755 /etc/profile.d/local-bin.sh"
end
end
vm_name = "%s-01" % instance_name_prefix
config.vm.define vm_name do |host|
host.vm.provision "file", source: "calico.yaml", destination: "calico.yaml"
end
end