añadidos comentarios
This commit is contained in:
49
readme.md
49
readme.md
@ -2,11 +2,7 @@
|
||||
|
||||
## 0. Ejemplo de configuración de red (Netplan)
|
||||
|
||||
Si quieres probar Multus con bridges y VLANs, puedes usar una configuración de Netplan como la siguiente. Aquí se configura:
|
||||
|
||||
* Bonding LACP sobre dos interfaces
|
||||
* VLANs para separar redes
|
||||
* Bridges para administración y servicios
|
||||
Aquí defines cómo se conectará tu servidor físicamente a la red: enlaces redundantes (bonding), VLANs para separar tráfico y bridges para que las máquinas virtuales y pods se conecten a varias redes internas. Es la base para un clúster flexible y segmentado.
|
||||
|
||||
**Archivo:** `/etc/netplan/50-cloud-init.yaml`
|
||||
|
||||
@ -74,8 +70,7 @@ network:
|
||||
|
||||
## 1. Prerrequisitos del sistema
|
||||
|
||||
* Ubuntu 24.04 actualizado
|
||||
* Acceso root o sudo
|
||||
Hay que partir de un Ubuntu 24.04 actualizado y con permisos de administrador. En este paso instalamos utilidades básicas y configuramos el repositorio oficial de Kubernetes, necesario para instalar sus componentes más adelante.
|
||||
|
||||
### a) Actualiza el sistema y paquetes básicos
|
||||
|
||||
@ -98,6 +93,8 @@ sudo apt-get update
|
||||
|
||||
## 2. Desactiva SWAP (requisito Kubernetes)
|
||||
|
||||
Kubernetes requiere que el intercambio de memoria (swap) esté desactivado para gestionar los recursos de forma predecible y evitar problemas de rendimiento y estabilidad.
|
||||
|
||||
```bash
|
||||
sudo swapoff -a
|
||||
sudo sed -i '/ swap / s/^/#/' /etc/fstab
|
||||
@ -107,6 +104,8 @@ sudo sed -i '/ swap / s/^/#/' /etc/fstab
|
||||
|
||||
## 3. Instala containerd (runtime recomendado)
|
||||
|
||||
containerd es el motor que gestiona los contenedores en el clúster. Kubernetes necesita un “runtime” para crear y controlar los pods, y containerd es la opción oficial y más estable.
|
||||
|
||||
```bash
|
||||
sudo apt-get install -y containerd
|
||||
sudo mkdir -p /etc/containerd
|
||||
@ -120,6 +119,8 @@ sudo systemctl enable containerd
|
||||
|
||||
## 4. Prepara el kernel y sysctl
|
||||
|
||||
En este paso se habilitan módulos y parámetros de red necesarios para que Kubernetes gestione correctamente el tráfico entre pods y nodos.
|
||||
|
||||
```bash
|
||||
sudo modprobe overlay
|
||||
sudo modprobe br_netfilter
|
||||
@ -135,6 +136,12 @@ sudo sysctl --system
|
||||
|
||||
## 5. Instala kubeadm, kubelet, kubectl
|
||||
|
||||
Aquí se instalan los tres componentes esenciales de Kubernetes:
|
||||
|
||||
* kubelet: agente que corre en cada nodo y gestiona los pods
|
||||
* kubeadm: herramienta para iniciar y gestionar el clúster
|
||||
* kubectl: cliente de línea de comandos para operar el clúster
|
||||
|
||||
```bash
|
||||
sudo apt-get install -y kubelet kubeadm kubectl
|
||||
sudo apt-mark hold kubelet kubeadm kubectl
|
||||
@ -144,6 +151,8 @@ sudo apt-mark hold kubelet kubeadm kubectl
|
||||
|
||||
## 6. Inicializa el clúster (mononodo/laboratorio)
|
||||
|
||||
Este paso crea el clúster de Kubernetes en el nodo principal (control-plane). Aquí defines la red interna para los pods.
|
||||
|
||||
> Si usas Flannel, usa este parámetro:
|
||||
|
||||
```bash
|
||||
@ -154,6 +163,8 @@ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
|
||||
|
||||
### a) Configura kubectl para tu usuario
|
||||
|
||||
Permite usar el comando `kubectl` como usuario normal copiando la configuración de administración del clúster a tu carpeta personal.
|
||||
|
||||
```bash
|
||||
mkdir -p $HOME/.kube
|
||||
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
@ -164,6 +175,8 @@ sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
|
||||
## 7. Instala la red de pods (Flannel)
|
||||
|
||||
Kubernetes solo define la infraestructura; necesitas un complemento de red (CNI) para que los pods puedan comunicarse entre sí. Flannel es la opción más sencilla y compatible.
|
||||
|
||||
```bash
|
||||
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
|
||||
```
|
||||
@ -172,6 +185,8 @@ kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/
|
||||
|
||||
## 8. Instala Multus (opcional, para múltiples redes)
|
||||
|
||||
Multus permite que un pod tenga más de una interfaz de red, útil para aplicaciones avanzadas (firewalls, balanceadores, appliances virtuales). Instálalo solo si necesitas múltiples redes.
|
||||
|
||||
```bash
|
||||
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml
|
||||
```
|
||||
@ -186,6 +201,8 @@ kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-c
|
||||
|
||||
## 9. (Opcional) Quita el taint del nodo master para poder programar pods en él
|
||||
|
||||
Por defecto, Kubernetes no programa pods de usuario en el nodo principal (control-plane). Si tienes solo un nodo (laboratorio), elimina este bloqueo para poder desplegar aplicaciones ahí.
|
||||
|
||||
```bash
|
||||
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
|
||||
kubectl taint nodes --all node-role.kubernetes.io/master-
|
||||
@ -195,6 +212,8 @@ kubectl taint nodes --all node-role.kubernetes.io/master-
|
||||
|
||||
## 10. Test rápido de Multus
|
||||
|
||||
Aquí puedes comprobar que Multus funciona: se crea una red secundaria y un pod de prueba que recibe dos interfaces (una para la red de pods y otra para la red adicional configurada).
|
||||
|
||||
La carpeta `multus/` del repositorio contiene el NAD y el pod de prueba:
|
||||
|
||||
* `multus/nad-br-servicios.yaml` (NetworkAttachmentDefinition)
|
||||
@ -231,7 +250,7 @@ kubectl delete pod multus-test
|
||||
|
||||
## 11. Instalación y configuración de MetalLB (LoadBalancer local)
|
||||
|
||||
MetalLB permite a tu clúster on-premise asignar IPs flotantes de tu red LAN a servicios tipo `LoadBalancer`, igual que en cloud. Ideal para exponer ingress-nginx, rancher, etc. directamente en tu red.
|
||||
MetalLB permite a tu clúster on-premise asignar IPs flotantes de tu red LAN a servicios tipo `LoadBalancer`, igual que hacen los clústeres en la nube. Es necesario si quieres exponer servicios (ingress, dashboards, etc.) con una IP accesible desde tu red.
|
||||
|
||||
### a) Instala MetalLB
|
||||
|
||||
@ -245,7 +264,7 @@ Esto crea el namespace `metallb-system` y despliega los pods necesarios.
|
||||
|
||||
### b) Crea la configuración del pool de IPs
|
||||
|
||||
En este repositorio, la carpeta `metallb/` contiene los recursos listos para aplicar:
|
||||
Aquí defines qué rango de IPs puede repartir MetalLB dentro de tu red local. Estos archivos suelen estar versionados en la carpeta `metallb/` del repositorio.
|
||||
|
||||
```shell
|
||||
metallb/
|
||||
@ -294,6 +313,8 @@ Puedes acceder desde tu red local a esa IP.
|
||||
|
||||
## 12. Instalación de Traefik y cert-manager (Ingress + TLS)
|
||||
|
||||
Traefik actúa como el "router" de aplicaciones dentro de tu clúster, permitiendo exponer servicios a Internet o la red local de forma sencilla. cert-manager se encarga de gestionar certificados TLS automáticamente para que tus aplicaciones estén siempre seguras.
|
||||
|
||||
### a) Instala Traefik como Ingress Controller
|
||||
|
||||
* Aplica todos los recursos con Kustomize:
|
||||
@ -340,6 +361,8 @@ kubectl get pods -n cert-manager
|
||||
|
||||
## 13. Instala KubeVirt y CDI
|
||||
|
||||
KubeVirt permite crear y gestionar máquinas virtuales dentro de Kubernetes, integrando cargas virtualizadas junto a contenedores. CDI (Containerized Data Importer) facilita la gestión y carga de discos e ISOs para esas VMs.
|
||||
|
||||
**Nota:** Puedes usar manifiestos oficiales, o crear tu carpeta kubevirt/ si deseas versionar los YAML personalizados.
|
||||
|
||||
```bash
|
||||
@ -359,6 +382,8 @@ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releas
|
||||
|
||||
## 14. Instala virtctl (CLI de KubeVirt)
|
||||
|
||||
virtctl es una herramienta de línea de comandos para interactuar fácilmente con las máquinas virtuales de KubeVirt: arranque, apagado, consola, etc.
|
||||
|
||||
```bash
|
||||
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd64
|
||||
chmod +x virtctl
|
||||
@ -369,6 +394,8 @@ sudo mv virtctl /usr/local/bin/
|
||||
|
||||
## 15. Habilita KVM para tu usuario
|
||||
|
||||
Para poder crear y gestionar máquinas virtuales, tu usuario debe pertenecer al grupo `kvm` (acceso al hardware de virtualización).
|
||||
|
||||
```bash
|
||||
sudo usermod -aG kvm $(whoami)
|
||||
# Reinicia sesión o ejecuta 'newgrp kvm' para aplicar
|
||||
@ -378,6 +405,8 @@ sudo usermod -aG kvm $(whoami)
|
||||
|
||||
## 16. Despliega kubevirt-manager
|
||||
|
||||
kubevirt-manager es una interfaz web sencilla para gestionar tus máquinas virtuales desde el navegador. Esta sección aplica sus manifiestos en Kubernetes.
|
||||
|
||||
La carpeta `kubevirt-manager/` contiene todos los manifiestos organizados por tipo:
|
||||
|
||||
```bash
|
||||
@ -394,6 +423,8 @@ kubectl get pods -n kubevirt-manager
|
||||
|
||||
## 17. Despliega el stack de almacenamiento NFS
|
||||
|
||||
Esta sección despliega tanto el servidor NFS (almacenamiento en red) como el "provisioner" para que Kubernetes pueda crear volúmenes dinámicos de manera automática. Es la forma más sencilla de tener almacenamiento persistente en el clúster.
|
||||
|
||||
La carpeta `storage/` tiene todos los manifiestos del servidor y provisioner NFS, organizados en subcarpetas:
|
||||
|
||||
```bash
|
||||
|
Reference in New Issue
Block a user