Kubernetes 1.27

Pedro Martinez
23 de mayo de 2025
GitHub
Instalación de Kubernetes v1.27
En esta guía instalamos Kubernetes v1.27 sobre un sistema operativo bien configurado, ideal para entornos con recursos limitados o infraestructura heredada.
Este artículo forma parte de una serie complementada por:
- Instalación de Metrics Server para monitoreo básico del clúster.
- Despliegue de Web Estática con Docker y containerd dentro del clúster.
1. Preparación del sistema
Actualizar paquetes del sistema:
sudo apt update && sudo apt upgrade -y
Deshabilitar swap (obligatorio para Kubernetes) y comentar la linea swap en /etc/fstab
para hacerlo de forma persistente :
sudo swapoff -a
sudo nano /etc/fstab
Instalar dependencias necesarias:
sudo apt install -y docker.io socat conntrack
sudo systemctl enable --now docker
sudo systemctl status docker
2. Instalación de Kubernetes (kubeadm, kubelet, kubectl)
Descargar los binarios de Kubernetes:
wget https://dl.k8s.io/release/v1.27.0/bin/linux/amd64/kubeadm
wget https://dl.k8s.io/release/v1.27.0/bin/linux/amd64/kubelet
wget https://dl.k8s.io/release/v1.27.0/bin/linux/amd64/kubectl
Dar permisos de ejecución y moverlos a /usr/bin/
:
chmod +x kubeadm kubelet kubectl
sudo mv kubeadm kubelet kubectl /usr/bin/
Verificar la instalación:
kubeadm version
3. Configuración del servicio kubelet
Crear el archivo de configuración:
sudo mkdir -p /etc/systemd/system/kubelet.service.d
sudo nano /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
Crear el servicio kubelet:
sudo nano /usr/lib/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/home/
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
Habilitar y arrancar kubelet:
sudo systemctl daemon-reload
sudo systemctl enable --now kubelet
4. Instalar plugins de red (CNI)
Descargar los plugins CNI:
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
Descomprimir en el directorio adecuado:
sudo mkdir -p /opt/cni/bin/
sudo tar -xvf cni-plugins-linux-amd64-v1.2.0.tgz --directory /opt/cni/bin/
5. Inicializar el clúster Kubernetes
Instalar crictl
si no al hacer kubeadm init ocurrira un error:
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.0/crictl-v1.27.0-linux-amd64.tar.gz
sudo tar -xvf crictl-v1.27.0-linux-amd64.tar.gz -C /usr/bin/
Ejecutar la inicialización del control plane:
sudo kubeadm init --kubernetes-version=1.27.0 --pod-network-cidr=10.244.0.0/16
Tener en cuenta que esa ip es la calico
6. Configurar acceso al clúster
Ejecutar estos comandos para que kubectl
funcione correctamente:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Verificar el estado de los nodos:
kubectl get nodes
Si el control plane aparece como NotReady
, instalar Calico para gestionar la red del clúster:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
Verificar nuevamente el estado de los nodos:
kubectl get nodes
Ejemplo:
Aca podemos tomar dos caminos, desplegar Kubernetes en máquinas virtuales adicionales para sincronizarlas con el nodo actual (1), lo que nos permitiría conformar un clúster distribuido con múltiples nodos (control plane y workers), por el otro lado mantener el entorno en un solo nodo trabajando de forma unificada (2).
Opcion 1:
Agregar un Worker Node
En el Worker Node solo necesitas hacer los pasos:
1, 2, 4 (CNI) y 7 (Unir al clúster)
Explicación breve:
- 1 (Preparación del sistema) → Instalar dependencias y desactivar swap.
- 2 (Instalación de Kubernetes) → Descargar e instalar
kubeadm
,kubelet
,kubectl
. - 4 (Instalar CNI) → Es opcional, pero si lo haces en el control plane, puedes omitirlo aquí.
- 7 (Agregar el Worker Node) → Ejecutar
kubeadm join
con el comando generado.
Después al verificar en el Control Plane este en buen estado, se necesita hacer join en los Workers con el Control Plane:
sudo kubeadm join <CONTROL_PLANE_IP>:6443 --token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH>
Explicación breve:
kubectl get nodes
De esta manera se puede ver los workers incluido a la consulta, es necesario incluir este comando para añadir el rol de worker en la consutla de los nodos
kubectl label node worker1 node-role.kubernetes.io/worker=
kubectl label node worker2 node-role.kubernetes.io/worker=
Con todos estos procedimientos se realizo la instalación de Kubernetes en las 3 vms.
Opcion 2:
Este comando sirve para recibir pods como un Worker, si quieres que este nodo pueda correr tanto los componentes del sistema como los pods de usuario, ejecutar:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
De esta manera no se necesita más de una maquina permitiendo que una maquina haga todo el trabajo y optimizando recursos