Ya he mostrado dos formas de realizar un CD de terraform con Jenkins que puedes encontrar [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform.html) y [aquí](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform_12.html). Ahora vamos a realizar lo mismo pero con GitHub Actions. El código está [aquí](https://github.com/ahioros/terraform-aws-eks) como ya debes saber los actions van dentro de la carpeta .github/workflows. El video lo puedes ver aquí de este tutorial:
Ahioros Home
[ Guillermo@Garcia ~]# cd /pub | more beer
sábado, 29 de marzo de 2025
CD de terraform con github actions en AWS
sábado, 1 de febrero de 2025
Instalando DeepSeek con interfaz web en docker y soporte nvidia
En este post vamos a instalar DeepSeek usando docker y aprovechando la gráfica nvidia. ¿Por qué usando contenedores? Por que no soy cochino instalando cosas que no sé qué haran en mi sistema y no tengo tiempo de ponerme a leer el script de instalación. Aquí te dejo el video para que veas cómo lo realizo:
## Pre requisitos Instala los pre-requisitos para usar tu tarjeta gríafica: libnvidia-container nvidia-container-toolkit
jueves, 12 de diciembre de 2024
Pipeline CD en Jenkins para terraform AWS EKS segunda parte (plugin AWS Credentials)
En el [post anterior](https://www.ahioros.info/2024/12/pipeline-cd-en-jenkins-para-terraform.html) te mostré como usar Jenkis como CD para desplegar tu infraestructura EKS con terraform en AWS. El "detalle" es que usamos el secret de Jenkins de texto cifrado. Ahora lo que usaremos es el plugin de [AWS Credentials](https://plugins.jenkins.io/aws-credentials/), lo puedes instalar desde el administrador de plugins de Jenkins con un par de clicks.Aquí abajo te dejo el video para que veas la configuración en caso que tengas dudas:
lunes, 9 de diciembre de 2024
Pipeline CD en Jenkins para terraform AWS EKS
En el [post anterior](https://www.ahioros.info/2024/12/creacion-de-un-cluster-aws-eks-con.html) hicimos un cluster AWS EKS con terraform. Como lo que nos gusta aquí es el tema de automatización, vamos a crear el pipeline de CD con Jenkins, les motraré 2 maneras de hacerlo, en este primer post vamos a hacerlo usando Secrets de Jenkins. ## Explicación del Pipeline El Pipeline -> repositorio github (puede ser cualquier repositorio de git) -> Terraform (init, plan, apply/destroy) -> kubectl test ## Requisitos Para Jenkins estoy usando el contenedor de Jenkins. Los Plugins que tengo para este ejemplo son: * Pipeline: GitHub Groovy Libraries * Pipeline: Stage view * Terraform Plugin (opcional) **Nota:** En mi caso yo tengo los binarios de terraform y kubectl en el directorio jenkins_home/terraform-bin y jenkins_home/kubectl-bin/.Aquí abajo te dejo el video para que veas la configuración en caso que tengas dudas:
miércoles, 4 de diciembre de 2024
AWS Creación de un cluster EKS con terraform
## Introducción Ya hace un tiempo enseñé [cómo instalar localstack para que puedas probar terraform](https://www.ahioros.info/2024/05/how-to-install-localstack-with-docker.html). Bueno ahora voy a enseñarte una de las maneras de como crear un cluster de kubernetes (EKS) en AWS. ¿Cuántas maneras de crear un cluster de kubernetes (EKS) en AWS hay? 1. Con terraform escribiendo desde 0. 2. Con terraform haciendo uso del module. 3. Con cloudformation. 4. Crear un cluster de kubernetes (EKS) en AWS con eksctl (esta al final es un wrapper y hace uso de cloudformation). Nosotros vamos a realizar la primera configuración. Puedes ver el video aquí:
No te voy a decir todas las ventajas que tiene hacerlo con terraform (que para eso ya debes de saberlas) solo diré que no me gusta tanto hacerlos con cloudformation por que "tarda" bastante tiempo. **Nota:** más adelante vamos a hacer el pipeline CI/CD para automatizar el deploy e ir agregándo más características, así como ir poniéndo "presentable" el proyecto.
lunes, 25 de noviembre de 2024
Hablemos de: Seguridad en Kubernetes
Vamos a dividir en antes del despliegue y en Kubernetes. ## Antes del Despliegue 1. Escaneo de las imágenes de contenedores - Durante CI. - Escaneo constante del registry de imagenes. Herramientas: - snyk. - sysdig. - Sonarqube. - Trivy. 2. Que el servicio de la imgen lo ejecute un usuario de servicio (non-root) **Nota:** Esto lo podemos sobreescribir en kubernetes usando **spec.securityContext.runAsUser: 1000** o **spec.allowPrivilegeEscalation: false** ## En Kubernetes 1. Manejo usuarios y permisos Usa RBAC, ClusterRole, ServiceAccount y siempre usa la regla de menor privilegio. 2. Políticas de red Aplica NetworkPolicy para limitar la comunicación entre pods, no quieres que un pod de front se comunique con un pod de database, se debe comunicar con el backend solamente, por mencionar un ejemplo. **Nota:** Usa la regla del mínimo acceso permitido. Herramientas: - calico - weave Net También puedes usar herramientas a nivel de aplicación, usando un service mesh ya hemos hablado de dos, [Linkerd](https://www.ahioros.info/2024/10/service-mesh-linkerd.html) e [Istio](https://www.ahioros.info/2024/10/service-mesh-istio.html). Herramientas: - Istio - Linkerd 3. Cifrado de tráfico, mTLS entre Servicios Esto se resuelve usando un service mesh, solo tienes que habilitarlo. 4. Seguridad y cifrado de Secrets Habilita el cifrado usando el recurso EncryptionConfiguration. Pero todavía necesitamos algo para manejar las llaves cifradas, aquí nos apoyamos de herramientas de terceros como AWS KMS, Google KMS, Vault de HashiCorp,etc. o incluso te puede funcionar algo como pass si estás on-premise. 5. Seguridad en etcd Si estas administrando etcd ponlo detrás de un firewall, cifra toda la informacion en etcd. 6. Backup y Restore En este caso me refiero a la data de tu(s) aplicacion(es) que están corriendo en kubernetes. - Realiza backups de tus aplicaciones regularmente. - Guarda los backups en un lugar seguro. - Hagan pruebas de sus backups para ver que estén funcionando correctamente en un ambiente controlado, incluso pueden automatizar estos tests para que se ejecuten cada cierto tiempo. 7. Define y Aplica Políticas de seguridad Por ejemplo: - No permitas ejecutar contenedores como root. - Cada pod debe tener su política de red. - Los backups se realizan cada día a X hora. Algunas herramientas que te pueden ayudar son: - Open Policy Agent. - Kyverno. 8. Disaster Recovery Define estrategias y mecanismos para una recuperación ante un desastre y sobre todo automatiza. Define también hacer pruebas para que todo el equipo sepa qué hacer en caso de uno y poder ajustar la estrategia de recuperación, entre mayor conocimiento tengan menor tiempo les tomará en ejecutar la recuperación y menor tiempo afectaran la experiencia del usuario.
lunes, 18 de noviembre de 2024
Kubernetes: Controla tus recursos
Ya todos sabemos que la cultura DevOps parte de cederle responsabilidades al área de desarrollo para liberar sus servicios más ágil, esto no quiere decir que debamos darles las llaves del cielo y que hagan lo que quieran, por lo que es responsabilidad de nosotros tomar precauciones para que no tumben los servicios y tengamos que correr como pollos sin cabeza a solucionar. Como ya sabemos tener el servicio indisponible se traduce en pérdida de dinero, pero te cuento que tener el servicio consumiendo recursos sin control también se traduce en pérdida de dinero. Ya en posts anteriores cuando hablé de [HPA](https://www.ahioros.info/2024/09/kubernetes-horizontal-pod-autoscaling.html) mencioné unas buenas prácticas para aplicar a nuestros deployments, para ser más específicos resources.requests y resources.limits.Puedes seguir el video aquí:
## LimitRanges
lunes, 11 de noviembre de 2024
Hablemos de: Pod Disruption Budgets
El escenario "normal" cuando tienes que hacer un mantenimiento en tu cluster de k8s, es que marcas un nodo como cordon esto hace que no acepte más pods y de ahí empiezas a "drenar" los pods el nodo. Lo que hará k8s es que "sacará" los pods del nodo y después empezará a crearlos en el nodo activo. Si nuestra aplicación tiene la mayoría de los pods en el nodo que vamos a hacer el mantenimiento, nos trae inconvenientes como: - Indisponibilidad de nuestra aplicación. - Perder dinero. Aquí te dejo el video para que veas el funcionamiento:
El Pod Disruption Budget (para los compas "PDB" de ahora en adelante) sirve para drenar un nodo, con la diferencia que va a recrear primero en el (los) otro(s) nodo(s) los pods y cuando estén listos (RUNNING), va a matar los pods del nodo que quieres hacer el mantenimiento. Suena bien ¿no? Así, evitamos la indisponibilidad de nuestra aplicación.
Suscribirse a:
Entradas (Atom)