Infraestructura kubernetes. - Javiermartinf98/mirepositorio GitHub Wiki
¿Que es Kubernetes?
Kubernetes es una plataforma de orquestación de contenedores diseñada para automatizar el despliegue, el escalado y la gestión de aplicaciones en contenedores.
¿Porque usar contenedores?

La Manera Antigua de desplegar aplicaciones era instalarlas en un servidor. La desventaja era que los ejecutables, la configuración, las librerías y el ciclo de vida de todos estos componentes se entretejían unos a otros.
La Manera Nueva es desplegar contenedores basados en virtualización a nivel del sistema operativo, en vez del hardware. Estos contenedores están aislados entre ellos y con el servidor anfitrión: tienen sus propios sistemas de archivos, no ven los procesos de los demás y el uso de recursos puede ser limitado. Son más fáciles de construir que una máquina virtual.
Esquema kubernetes HP

LAS DIRECCIONES IP DEL ESQUEMA PUEDEN VARIAR.
ELEMENTOS DEL SISTEMA:
-
NGINX -> Es un balanceador de carga de trabajo, que se encarga de distribuir contenedores a los nodos, que son los encargados de ejecutar esos contenedores.
-
NODO 1 & NODO 2 -> Nodos master Estos nodos se encargaran de la administración del clúster determinando qué aplicación se ejecuta y cuándo hacerse. El controlador a su vez se divide en varios componentes:
-
Servidor API Coordina la comunicación de los nodos master con el clúster de Kubernetes. La interfaz se utiliza para definir el estado del clúster. La interacción con la API de Kubernetes se produce mediante la línea de comandos o a través de la interfaz de usuario de la consola de Google Cloud.
-
Programador El programador se encarga de desplegar los contenedores en función de los recursos disponibles. Se asegura de que todos los pods (grupos de contenedores) se asignen a un nodo y, por tanto, puedan ejecutarse.
-
Gestor de controladores El gestor de controladores se utiliza para coordinar los distintos controladores o procesos. De forma más general, se encarga de ajustar el estado actual de un clúster en cada momento.
-
etcd Es un componente del controlador que almacena todos los datos importantes del clúster
-
-
NODO 3 & NODO 4 -> Nodos Worker Los nodos worker, son los responsables de ejecutar las aplicaciones en pods (visto anteriormente). Cada nodo puede ejecutar múltiples pods pero es recomendable tener varios si queremos asegurar la disponibilidad de las aplicaciones desplegadas en el clúster.
-
NFS SERVER -> Su utlidad es almacenar todos los archivos en red a la vez que distribuirlos, esto permite a los usuarios acceder a ellos tanto a los archivos y directorios tratandolos como locales.
Velero
Velero es una herramienta de código abierto para realizar copias de seguridad y restaurar de forma segura, realizar recuperación ante desastres y migrar recursos de clúster de Kubernetes y volúmenes persistentes.
Dicho esto, enumeremos en qué situaciones Velero puede ayudarnos:
- Copia de seguridad de aplicaciones con estado
- Aplicaciones de respaldo instaladas de manera no declarativa
- Copia de seguridad de información de PVC
- Migraciones de clúster
- Replicar configuraciones de clúster (por ejemplo, desde producción hasta pruebas o clústeres de desarrollo.
Instalación Velero
Requisitos:
Para poder instalar tanto el cliente como el servidor de velero debemos tener instalado kubectl con acceso al cluster de kubernets del laboratorio.
Primero descargamos velero a traves del siguiente comando:
wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.2/velero-v1.6.2-linux-amd64.tar.gz
Instalar Velero server
El archivo con las credenciales de minio ( minio.credentials ) se encuentra en Teampass(Herramienta para el almacenamiento de contraseñas)
velero install --provider aws --use-restic --plugins velero/velero-plugin-for-aws:v1.2.1 --bucket backups --use-volume-snapshots=false --secret-file ./minio.credentials --backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://minio.labcms.com
Instalar Velero client
tar zxf velero-v1.6.2-linux-amd64.tar.gz
sudo mv velero-v1.6.2-linux-amd64/velero /usr/local/bin/
rm -rf velero*
Instalación Restic
Velero utiliza restic para almacenar los datos de los volúmenes adjuntos. Restic se puede instalar facilmente siguiendo las instrucciones de su documentación oficial, para varios sistemas operativos:
Configuración Backups de Velero
Descripción
Diferentes opciones de backups de velero
Backups programados

Programar backups
Comandos para crear cada uno de los backups
velero create schedule "wiki-weekly" --schedule = "@every 168h" --ttl 336h0m0s --default-volumes-to-restic --include-namespaces "wiki"
velero create schedule "laboratorio-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "laboratorio"
velero create schedule "monitoring-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "monitoring"
velero create schedule "velero-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "velero"
velero create schedule "vodafone-broadband-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "vodafone-broadband"
velero create schedule "netbox-community-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "netbox-community"
velero create schedule "curso-devops-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "curso-devops"
velero create schedule "fusion-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "fusion"
velero create schedule "zabbix-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "zabix"
velero create schedule "nfs-provisioner-weekly" --schedule="@every 168h" --ttl 336h0m0s --default-volumes-to-restic=true --include-namespaces "nfs-provisioner"
velero create schedule "inventory-tech-weekly" --schedule = "@every 168h" --ttl 336h0m0s --default-volumes-to-restic --include-namespaces "inventory-tech"
- Indicamos el nombre del backup.
- Con el valor schedule="@every 168h" indicamos cada cuanto tiempo queremos que se realice el backup, en este caso cada 7 días.
- Con el valor ttl 336h0m0s indicamos cada cuanto tiempo expirará el backup, en este caso cada 14 días.
- Con el valor default-volumes-to-restic indicamos que los datos de los volúmenes se almacenen en restic.
- Con el valor include-namespaces indicamos el namespace del que queremos hacer el backup.
Listar Backups
Con este comando podemos observar:
- Backups realizados
- Estado de backup
- Número de errores o advertencias
- Fecha de creación
- Días restantes para la expiración
velero get backup
Describir Backups
Para ver más detalles de un backup utilizamos este comando:
velero describe backup "nombre de backup"
Crear backup desde uno programado
Esto se suele hacer cuando ha fallado un backup y se quiere repetir:
velero backup create --from-schedule "nombre de backup ya creado"
Restaurar Backups
Para restaurar un backup utilizaremos este comando:
velero restore create --from-backup "nombre de backup a restaurar"
Eliminar Backups
Para eliminar un backup utilizaremos este comando:
velero backup delete "nombre de backup a eliminar"
MinIO
MinIO es un servidor de almacenamiento en la nube compatible con Amazon S3, liberado bajo Licencia Apache v2. Como almacén de objetos, MinIO puede almacenar datos desestructurados como fotos, vídeos, archivos de registro, copias de seguridad e imágenes de contenedor. El tamaño máximo de un objeto es 5TB.
MinIO se integra de forma nativa con Kubernetes para agilizar las operaciones de almacenamiento de objetos multiinquilino a gran escala como servicio, en múltiples nubes y en el borde. MinIO se puede administrar a través de múltiples herramientas. En entornos Kubernetes, MinIO Operator y kubectl plugin simplifican la implementación y administración para equipos de DevOps e infraestructura.

MinIO Operator se integra de forma nativa con Kubernetes para proporcionar:
- Clases de almacenamiento de información y organización en niveles. Organice en niveles NVMe, HDD y almacenamiento en la nube pública.
- Balanceo de carga externo. Equilibre la carga de las solicitudes entrantes con el controlador de entrada NGINX.
- Administración de claves de cifrado. Administre las claves de cifrado con HashiCorp Vault.
- Gestión de identidades. Administre la identidad y la política con Keycloak IDP compatible con OpenID Connect.
- Gestión de certificados. Configure y administre certificados con Rancher Certificate Manager y Let's Encrypt.
- Monitoreo y alertas. Realice un seguimiento de las métricas y emita alertas utilizando Rancher Monitoring o Grafana.
- Registro y auditoría. Registros de salida a un Elastic Stack para su análisis.