Last active
January 2, 2021 18:45
-
-
Save mhiro2/1cbc0e2452c73f3e10af863085dca514 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
Install Podman instead of Docker
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo
yum -y install podman