📔
Blog
  • 🏠Home
  • 🤖Android
    • LineageOS, PlayIntegrityFix y playcurlNEXT
    • 🖥️Instalar Termux
    • 📦Optimizar paquetes después de instalar ROM
  • 🖥️Hardware
    • Overclocking AMD Ryzen 9 5950X
    • Unboxing Switch POE TP-Link TL-SG1008P
  • 🐧Linux
    • Possible missing firmware /lib/firmware/amdgpu
    • Cifrar con LUKS
    • Habilitar FSR en los juegos en Steam
    • Información del /etc/fstab
    • Instalar Debian cifrado
    • Después de Instalar Debian 12
    • Después de instalar Fedora 38
    • Instalar fuentes OTF y TTF en Linux
    • Instalar GNU/Linux Debian 12, en Macbook Pro (late 2015) A1502
    • Clonar disco a NAS con CloneZilla
    • Activar TRIM con systemd
    • Error ata9 en dispositivo SATA
    • Dash to dock para Gnome
    • Solución al error AACS en VLC al reproducir un BluRay
    • Gnome 42.5, en Linux Mint 21.1
    • dmesg: Initramfs unpacking failed: Decoding failed
    • Como tener AirPrint con tu impresora
    • Crear repo git desde el terminal
    • Añadir marca de agua al DNI
    • Eliminar un path con sed
    • Sacar el .crt y .key de un .pfx
    • Instalar driver AMD GPU
    • Problemas de Vsync con AMD GPU
    • Configurar git
    • Solucion al error amdgpu: powerplay
    • dmesg: Error al leer el búfer del kernel
    • CIDR, mascaras de subred
  • 💻Macintosh
    • My Apps
    • Configurar shell bash por defecto
    • Habilitar Bash Completion
    • Instalar Pyenv
    • Habilitar el "chime sound" en los nuevos Mac's
    • Reset NVRAM en un Macintosh
    • Reset PMU en un PowerBook G4
    • Solucionar el parpadeo de Netflix en Safari a pantalla completa
  • 🪟Windows
  • 🕹️Nintendo NES
    • 8bitdo DIY en mando original
    • Bluetooth interno con 8bitdo
    • Región Free, sin cortar el CIC
  • 🎮PlayStation
    • Review Cable SCART RGB C-SYNC
    • FreeMCBoot
    • Instalación chip PSX, PU-20
  • 📡Ubiquiti
    • Unboxing Cloud key Gen 2 Plus
    • UniFi Controller en Docker
    • Abrir puertos en USG Security Gateway
    • MAC del router HGU de Movistar en el USG
    • Configurar USG Security Gateway para Movistar
    • Habilitar DDNS en USG Security Gateway
    • Error Adopción Pendiente en USG Security Gateway
    • Restaurar firmware USG Security Gateway
    • Cambiar pasta termica en UniFi Switch 8 150W
    • Crear VLAN en UniFi Controller
    • Cambiar IP local en USG antes de adoptarlo
    • Configurar DDNS Cloudflare en EdgeRouter 4
    • Configuración vía terminal, red Home
    • Configurar WireGuard en EdgeRouter 4 / 6P
  • 📶Asus Router
    • Instalar Skynet
    • Habilitar swap
    • Ejecutar tareas crontab
    • Borrar NVRAM
    • Notificación Telegram al inicio
    • Monitorizar temperaturas con Telegram
    • Enviar logs a un servidor RSYSLOG
    • Mostrar temperaturas
  • 🍇RaspberryPi
    • Reducir tamaño imagen .img de un backup de la SD
    • Servidor RSYSLOG
    • Deshabilitar el ahorro de energia en WiFi
  • 🧊Kubernetes
    • Desplegar K8S con Kubespray
    • Flux en AKS
    • Actualizar certificados K8S
    • OpenShift en modo Datacenter en una VM local
  • 🐳Docker
    • HomeBridge en Docker
    • Comprobar vulnerabilidades de imagenes docker
    • Sign docker images with Cosign
    • Acceder a un contenedor con permisos de superusuario
  • 🧪Arduino
    • Minar DuinoCoin desde tu router OpenWRT
  • 🛠️Bricos
    • Rack IKEA HUTTEN
Powered by GitBook
On this page
  • Preparación de maquinas
  • Despliegue del Cluster
  • Eliminación de un cluster existente

Was this helpful?

  1. Kubernetes

Desplegar K8S con Kubespray

PreviousKubernetesNextFlux en AKS

Last updated 2 years ago

Was this helpful?

Para desplegar un cluster de kubernetes y tambien para resetearlo en caso necesario, de forma automatizada usando Kubespray.

Lo primero sera obtener y configurar el entorno donde vamos a usar kubespray, para ello nos descargamos desde el repo oficial

Con el kubespray ya instalado en la maquina desde donde desplegaremos el cluster, no tiene porque ser en el propio cluster!!! Lo que si tienen que tener es visibilidad entre maquinas, para ello deberás tener en el /etc/hosts las IPs de las maquinas que compongan el cluster y las claves ssh compartidas entre si, incluida la maquina que usaras para desplegar todo con kubespray.

Configurar Kubespray

Lo primero sera definir los nombres de los nodos e IPs que compondrán el cluster que queremos desplegar, aquí pondremos los nombres de los nodos y sus ips, tantos como vayamos a configurar en el cluster, en este ejemplo son 3 maquinas.

declare -a IPS=(nodo1,192.168.1.1 nodo2,192.168.1.2 nodo3,192.168.1.3)

En el ejemplo, hemos definido 3 nodos, cada uno con su IP. Ahora entramos en el directorio de Kubespray, y dentro de el veremos un directorio de nombre “inventory”, entramos, veremos que hay 2 carpetas “local” y “sample”, hacemos una copia de “sample” y le ponemos el nombre que queramos, podremos tener tantos clusters configurados como queramos y organizados por entornos...

cp -rf sample NOMBRE_DE_TU_CLUSTER

Ahora vamos a configurar el inventario para poder despegarlo, sustituiremos el “NOMBRE_DE_TU_CLUSTER” por el que corresponda que tengas definido.

CONFIG_FILE=inventory/NOMBRE_DE_TU_CLUSTER/hosts.yaml python contrib/inventory_builder/inventory ${IPS[@]}

Editamos ahora el fichero .../kubespray/inventory/NOMBRE_DE_TU_CLUSTER/hosts.yaml

Aquí debemos colocar los nodos, cuales serán los master y cuales los workers.

all:
  hosts:
    nodo1:
      ansible_host: 192.168.1.1
      ip: 192.168.1.1
      access_ip: 192.168.1.1
    nodo2:
      ansible_host: 192.168.1.2
      ip: 192.168.1.2
      access_ip: 192.168.1.2
    nodo3:
      ansible_host: 192.168.1.3
      ip: 192.168.1.3
      access_ip: 192.168.1.3
  children:
    kube_control_plane:
      hosts:
        nodo1:
    kube_node:
      hosts:
        nodo2:
        nodo3:
    etcd:
      hosts:
        nodo1:
        nodo2:
        nodo3:
    k8s_cluster:
      children:
      kube_control_plane:
      kube_node:
    calico_rr:
      hosts: {}

En este fragmento de código, vemos que el “nodo1” corresponde a kube_control_plane, osea el master del cluster, aquí podremos poner los nodos que queramos que sean masters, en kube_node tenemos “nodo2” y “nodo3”, que harán de workers, en el apartado etcd, pondremos todos los nodos que tenga el cluster.

En el ejemplo, nuestro clúster seria: 1 Master 2 Workers

Ahora editamos un yaml para definir unos parámetros

Editamos el fichero .../kubespray/inventory/NOMBRE_DE_TU_CLUSTER/group_vars/k8s_cluster/k8s-cluster.yml

Tenemos también la opción de hacerlo por calendario, por defecto seria el primer lunes de cada mes. Si queremos establecerlo a otra fecha usaremos este parámetro, esta es configuración por defecto. auto_renew_certificates_systemd_calendar: "Mon *-*-1,2,3,4,5,6,7 03:{{ groups['kube_control_plane'].index(inventory_hostname) }}0:00"

Preparación de maquinas

Todas las maquinas que compongan el cluster, deben tener una mínima configuración. Instalamos los siguientes paquetes en TODOS los nodos.

sudo apt install -y ntp ssh-server ssh-client wget curl ca-certificates vim

Debemos editar los /etc/hosts y añadir el hostname e IP de cada nodo, en cada nodo. Tambien deben tener acceso entre si, copiando la clave ssh de /root/.ssh/id_rsa.pub de la maquina donde tenemos kubespray a /root/.ssh/authorized_keysde cada nodo, asegúrate que todos los nodos tienen la misma hora, porque da problemas si alguno no esta en el mismo horario. Después de estos cambios, reiniciar los nodos normalmente.

sudo reboot

Despliegue del Cluster

Desde la maquina donde tenemos Kubespray, entramos en el directorio y ejecutamos

ansible-playbook -i inventory/NOMBRE_DE_TU_CLUSTER/hosts.yml --become --become-user=root cluster.yml -u root

Y empezara el despliegue, el tiempo aprox es de unos 30 minutos, a veces se puede extender en función de la versión del Kubernetes a desplegar, numero de nodos, ancho de banda, etc…

Cuando termine, si todo ha salido correctamente, veremos una salida como esta, en este ejemplo, la duración ha sido de 25 minutos

Si entramos en el nodo1 y ejecutamos el kubectl podemos ver que el cluster ya esta levantado

[rooto@nodo1 ~]# kubectl get nodes
NAME    STATUS   ROLES                  AGE   VERSION
node1   Ready    control-plane,master   18m   v1.23.12
node2   Ready    <none>                 16m   v1.23.12
node3   Ready    <none>                 16m   v1.23.12

Eliminación de un cluster existente

En este caso, debemos tener también los ficheros de configuración con las IPs de los nodos que componen el cluster, del mismo modo que lo hemos desplegado. El comando a usar para eliminar el cluster es

ansible-playbook -i inventory/NOMBRE_DE_TU_CLUSTER/hosts.yaml  --become --become-user=root reset.yml -u root

Y lo lanzamos, nada mas lanzarlo y hacer una comprobaciones, nos pedirá confirmación de si estamos seguro de que lo queremos eliminar.

Si le decimos que si “yes”, empezara la eliminación, el tiempo aprox es de unos 6 minutos, dependiendo de cuantas maquinas compongan el cluster, cuando termine debemos reiniciar manualmente cada nodo del cluster.

Esta linea definiremos la versión del cluster que vamos a desplegar. Para consultar las versiones de K8S disponibles: kube_version: 1.23.12 Definiremos el nombre del cluster a nivel local cluster_name: nombre_cluster.local Este parámetro, nos autorenueva los certificados, lo cambiamos a true si queremos que los autorenueve, por defecto es false. auto_renew_certificates: false

🧊
https://kubernetes.io/releases/
https://github.com/kubernetes-sigs/kubespray/releases