Skip to content

Instantly share code, notes, and snippets.

@jbontech
Created November 29, 2020 08:51
Show Gist options
  • Save jbontech/1edd4a1a0ca8bc369253d6ba3d6695b5 to your computer and use it in GitHub Desktop.
Save jbontech/1edd4a1a0ca8bc369253d6ba3d6695b5 to your computer and use it in GitHub Desktop.
# -*- mode: ruby -*-
# vi: set ft=ruby :
$init = <<-SHELL
yum update -y
# SELinux 無効
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# firewall 無効
systemctl disable --now firewalld
# swap 無効
swapoff -a
rm -f /swapfile
sed -i '/ swap /s/^\\(.*\\)$/#\\1/g' /etc/fstab
# Bridge Netfilter 有効
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
SHELL
$install_docker = <<-SHELL
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y \
docker-ce-19.03.13 \
docker-ce-cli-19.03.13 \
containerd.io-1.3.7
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl enable --now docker
SHELL
$install_k8s = <<-SHELL
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 install -y kubeadm-1.18.12 kubectl-1.18.12 kubelet-1.18.12 --disableexcludes=kubernetes
sed -i "/KUBELET_EXTRA_ARGS=/c KUBELET_EXTRA_ARGS=--node-ip=$1" /etc/sysconfig/kubelet
systemctl enable --now kubelet
SHELL
$node_master = <<-SHELL
# ホスト から https://127.0.0.1:30443 で apiserver に接続したいので apiserver-cert-extra-sans に 127.0.0.1 を追加
# calico は デフォルト pod-network-cidr に 192.168.0.0/16 を使う
kubeadm init \
--apiserver-advertise-address=$1 \
--apiserver-cert-extra-sans=127.0.0.1 \
--node-name=$(hostname -s) \
--pod-network-cidr=192.168.0.0/16 \
--token=$2
# root で kubectl コマンドを使えるようにしておく
mkdir -p /root/.kube
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# CNI は calico を使う
kubectl apply -f https://docs.projectcalico.org/v3.16/manifests/calico.yaml
SHELL
$node_worker = <<-SHELL
kubeadm join $1:6443 --token=$2 --discovery-token-unsafe-skip-ca-verification
SHELL
def setup(config, group, hostname, ip, cpus, memory)
config.vm.box = "centos/7"
config.vm.hostname = hostname
config.vm.network "private_network", ip: ip, virtualbox__intnet: true
config.vm.provider "virtualbox" do |vbox|
vbox.customize ["modifyvm", :id, "--groups", group]
vbox.name = hostname
vbox.gui = false
vbox.cpus = cpus
vbox.memory = memory
end
end
Vagrant.configure("2") do |config|
# 分かりやすくするためにループ文はあえて使わないよ
IP_MASTER = "10.10.0.100"
IP_WORKER001 = "10.10.0.101"
IP_WORKER002 = "10.10.0.102"
TOKEN = "000000.0123456789abcdef"
config.vm.define :master do |conf|
setup(conf, "/centos7-k8s-cluster", "master", IP_MASTER, 2, 2048)
conf.vm.provision "shell", inline: $init
conf.vm.provision "shell", inline: $install_docker
conf.vm.provision "shell", inline: $install_k8s, args: [IP_MASTER]
conf.vm.provision "shell", inline: $node_master, args: [IP_MASTER, TOKEN]
conf.vm.network "forwarded_port", id: "kube-api", host: 30443, guest: 6443
end
config.vm.define :worker001 do |conf|
setup(conf, "/centos7-k8s-cluster", "worker001", IP_WORKER001, 1, 1024)
conf.vm.provision "shell", inline: $init
conf.vm.provision "shell", inline: $install_docker
conf.vm.provision "shell", inline: $install_k8s, args: [IP_WORKER001]
conf.vm.provision "shell", inline: $node_worker, args: [IP_MASTER, TOKEN]
end
config.vm.define :worker002 do |conf|
setup(conf, "/centos7-k8s-cluster", "worker002", IP_WORKER002, 1, 1024)
conf.vm.provision "shell", inline: $init
conf.vm.provision "shell", inline: $install_docker
conf.vm.provision "shell", inline: $install_k8s, args: [IP_WORKER002]
conf.vm.provision "shell", inline: $node_worker, args: [IP_MASTER, TOKEN]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment