En este post vamos a crear un cluster de kubernetes utilizando virtua machines de tipo spot o pre empty, estas maquinas son recursos que las nubes como aws, azure, google y otras proveen por una fracción del costo mensual, es decir que son más baratas.
Es importante mencionar que su tiempo de operación no esta garantizado quiere decir que la maquina puede ser apagada o borrada cuando alguien más reclame su uso, eso depende del proveedor.
Para nuestro caso de uso, estas maquinas son opción ya que podemos tener maquinas para crear ambientes muy baratos y que realmente se paguen por uso, si llevamos el tema a IaC podríamos incluso crear y destruir maquinas on demand.
Este post esta dedicado a la creación de un cluster desde cero con un master y dos nodos y ahorro de costos, evidentemente la ventaja de tener un cluster administrado por un proveedor no tiene comparación pues te evita muchos dolores de cabeza.
Creando el nodo master.
Creamos una VM Centos 7, en este caso usamos azure y una vez dentro de la maquina nos aseguramos de cambiarle el nombre.
sudo su -
hostnamectl set-hostname master
Instalando Docker
yes | sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-nightly
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo systemctl enable docker
sudo systemctl start docker
Preparando el nodo master
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo sed -i '/swap/d' /etc/fstab
sudo swapoff -a
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
Instalando Kubernetes
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable kubelet
sudo systemctl start kubelet
sudo yes | kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export ARCH=amd64
curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | sed "s/amd64/${ARCH}/g" | kubectl create -f -
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Find the code here.
https://gitlab.com/uxidevsolutions/scripts/-/tree/master/scripts