Kubernetes cluster desde cero CentOS 7 parte 1

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