-
-
Save dalmosantos/3d71b776600c60950b1776226cb8053e to your computer and use it in GitHub Desktop.
CentOS k8s cluster with vagrant-libvirt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
$master_cpus = 2 | |
$master_memory = 2048 | |
$num_workers = 3 | |
$worker_cpus = 4 | |
$worker_memory = 4096 | |
$common_script = <<-SCRIPT | |
# Prerequisite | |
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux | |
swapoff -a | |
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab | |
cat <<-'EOF' >/etc/sysctl.d/k8s.conf | |
net.ipv4.ip_forward=1 | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
net.bridge.bridge-nf-call-iptables = 1 | |
EOF | |
yum update | |
# Install Docker | |
yum install -y yum-utils device-mapper-persistent-data lvm2 | |
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo | |
yum makecache fast | |
yum remove docker docker-common docker-selinux docker-engine | |
yum install -y docker-ce | |
systemctl restart docker && systemctl enable docker | |
# Install kubeadm and kubelet | |
cat <<-'EOF' >/etc/yum.repos.d/kubernetes.repo | |
[kubernetes] | |
name=Kubernetes | |
baseurl=https://packages.cloud.google.com/yum/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 | |
yum makecache fast | |
yum install -y kubeadm kubectl | |
sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | |
systemctl daemon-reload | |
systemctl enable kubelet | |
SCRIPT | |
$master_script = <<-SCRIPT | |
kubeadm init --apiserver-advertise-address=192.168.33.100 --pod-network-cidr=10.244.0.0/16 | |
seq 1 5 | xargs -I% echo 192.168.33.10% k8s-node% >> /etc/hosts | |
sudo -u vagrant mkdir -p /home/vagrant/.kube | |
cp -i /etc/kubernetes/admin.conf /home/vagrant/.kube/config | |
chown $(id -u vagrant):$(id -g vagrant) /home/vagrant/.kube/config | |
sudo -u vagrant kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml | |
systemctl enable kubelet | |
systemctl start kubelet | |
echo "alias k='kubectl'" >> /home/vagrant/.bashrc | |
echo "source <(kubectl completion bash)" >> /home/vagrant/.bashrc | |
SCRIPT | |
Vagrant.configure('2') do |config| | |
config.vm.box = 'centos/7' | |
config.vm.box_check_update = false | |
config.ssh.insert_key = false | |
config.vm.define 'master' do |master| | |
master.vm.hostname = 'k8s-master' | |
master.vm.network 'private_network', ip: '192.168.33.100' | |
master.vm.provision 'shell', inline: $common_script | |
master.vm.provision 'shell', inline: $master_script | |
master.vm.provider :libvirt do |libvert| | |
libvert.cpus = $master_cpus | |
libvert.memory = $master_memory | |
end | |
end | |
(1..$num_workers).each do |i| | |
config.vm.define "node#{i}" do |node| | |
node.vm.hostname = "k8s-node#{i}" | |
node.vm.network 'private_network', ip: "192.168.33.#{i + 100}" | |
node.vm.provision 'shell', inline: $common_script | |
node.vm.provider :libvirt do |libvert| | |
libvert.cpus = $worker_cpus | |
libvert.memory = $worker_memory | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment