Ahora cada vez es más fácil configurar un clúster para instalar Kubernetes desde cero. Existen varias herramientas que facilitan la instalación.
Hay que tener en cuenta que Kubernetes históricamente fue entregado a la CNCF (Cloud Native Computing Foundation) como tecnología semilla, y puesto que Kubernetes viene sin algunos controladores en los binarios, disponemos de servicios gestionados por los proveedores de cloud públicos, para la instalación y gestión de forma más sencilla de Kubernetes.
Para mayor eficiencia y menor complejidad, podemos delegar parte de la gestión de Kubernetes a un Cloud Provider, utilizando los servicios gestionados comentados anteriormente, si disponemos de un equipo experto, se puede instalar Kubernetes on-premise o en hiper virtualizadores para tener un control total del clúster.
Pasos para instalar Kubernetes on-premise en 5 minutos
Paso 0: Prerequisitos
Necesitamos tres máquinas, la primera actuará como master, y el resto como workers, con los siguientes prerrequisitos:
- Sistema Operativo: Ubuntu o CentOS, para esta guia utilizaremos Ubuntu 24.04 LTS.
- Hardware: Un mínimo 2 CPUs y 2 GB de memoria en cada nodo.
- Red: Direcciones MAC y hostnames únicos para los nodos.
Debemos configurar todos los nodos con los módulos del kernel adecuados, y la configuración adecuada para utilizar la red de Kubernetes. Este es el código:
# Deshabilitar la swap para evitar problemas con kubelet
sudo swapoff -a
sudo sed -i ‘/ swap / s/^\(.*\)$/#\1/g’ /etc/fstab
# Cargar los módulos de kernel necesarios
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# Configurar de red para kubernetes
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl –system
Paso 1: Instalación de componentes
Instalamos en todas las máquinas del clúster los paquetes necesarios para desplegar el plano de control que son:
- kubeadm
- kubectl
- Docker (containerd)
Nota: En esta guía utilizaremos la versión 1.35, la última versión estable de Kubernetes
Código Containerd
# Instalar containerd
sudo apt-get update
sudo apt-get install -y containerd
# Configurar containerd para utilizar SystemdCgroup
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
Código Kubeadm y kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
# Descargar la key pública para la última versión
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | sudo gpg –dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# Repositorio kubernetes
echo ‘deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /’ | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Instalar los componentes
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Paso 2: Inicializar el cluster
Ahora deberíamos tener las tres máquinas listas para instalar Kubernetes.
En el master, ejecutamos:
kubeadm init –pod-network-cidr 192.168.0.0/16
Éste nos devolverá el comando a ejecutar en los workers, similar al siguiente, con los valores de las variables correspondientes:
sudo kubeadm join <MASTER_IP>:6443 –token <TOKEN> \
–discovery-token-ca-cert-hash sha256:<HASH>
Ejecutamos el comando anterior en los dos nodos y ya tendríamos el clúster inicializado.
Sin embargo, quedaría un paso para que el clúster sea completamente funcional.
Paso 3: Instalación red interna
Los pods no pueden comunicarse entre ellos si el clúster no dispone de una Container Network Interface (CNI) instalada. Utilizaremos Calico, el estándar definido para on-premise.
Ejecutaremos el siguiente comando en el master:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
Y… voilà! Ya tenemos un clúster de Kubernetes completamente funcional:
kubectl get no
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 10m v1.35.0
k8s-worker-1 Ready <none> 5m42s v1.35.0
k8s-worker-2 Ready <none> 5m38s v1.35.0
Desplegar Kubernetes en AWS (EKS)
Mediante la herramienta eksctl, podemos desplegar un clúster y su configuración, desde la línea de comandos, de forma sencilla y granular.
Paso 0: Prerrequisitos
Cuenta de AWS con la API de EKS habilitada.
Paso 1: Instalación de eksctl
# Descargar la última versión de eksctl
curl –silent –location «https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz» | tar xz -C /tmp
# Mover el binario
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
Paso 2: Configuración del clúster
Crearemos un YAML de ejemplo con la configuración del clúster, customizable según las necesidades:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: prod-cluster
region: us-east-1
version: «1.35»
# Habilitar IAM OIDC provider (add-ons)
iam:
withOIDC: true
managedNodeGroups:
– name: general-purpose
instanceType: m6i.large
minSize: 2
maxSize: 5
desiredCapacity: 2
volumeSize: 50
spot: true
labels:
role: worker
tags:
nodegroup-role: worker
# Add-ons recomendados
addons:
– name: vpc-cni
– name: coredns
– name: kube-proxy
– name: aws-ebs-csi-driver
Paso 3: Crear el clúster
Utilizamos el archivo de configuración creado anteriormente para desplegar el nuevo clúster:
eksctl create cluster -f cluster.yaml
Paso 4: accesos
El comando actualiza de forma directa el archivo ~/.kube/config de tu ordenador local, por lo que se puede comprobar directamente el acceso al clúster:
kubectl get nodes
Comprobamos que el clúster está correctamente creado desde la consola de AWS: