sábado, 8 de junio de 2024

Desplegando la aplicación en docker y creando manifiestos para kubernetes


Hemos estado realizando nuestro primer pipeline para nuestra aplicación en react, lo que vamos a realizar en este video es probar nuestra imagen en docker y crear nuestros manifestos para kubernetes.

**Nota:** Estamos partiendo que tienes conocimientos básicos de docker y kubernetes, ta les como:
    [¿Qué es docker?](https://es.wikipedia.org/wiki/Docker_(software))
    [¿Qué es kubernetes?](https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/)




1. Docker
  Para correr nuestra imagen ejecutamos el siguiente comando:
  ```bash
      docker run -d --name my-rdicidr -p 3000:3000 ahioros/rdicidr:latest
  ```

  Verificamos nuestro contenedor en la consola:

  ```bash
      docker ps | grep my-rdicidr
  ```

  Para detener el contenedor ejecutamos el siguiente comando:

  ```bash
      docker stop my-rdicidr
  ```

  Para borrar el contenedor ejecutamos el siguiente comando:

  ```bash
      docker rm my-rdicidr
  ```

  Para borrar la imagen ejecutamos el siguiente comando:

  ```bash
      docker image rm ahioros/rdicidr:latest
      # también funciona el shortcut para borrar la imagen
      docker rmi ahioros/rdicidr
  ```

  Ahora vamos a ver en nuestro navegador que nuestra aplicación se esta desplegando en el puerto 3000.


2. Kubernetes

  Vamos a crear los siguientes archivos:
   **01-namespace.yaml**: crearemos un namespace para nuestra aplicación.
   **02-deployment.yaml**: creamos el deployment para nuestra aplicación, y definimos la cantidad de replicas y puerto de escucha de nuestra aplicación.
   **03-service.yaml**: añadiremos un servicio para nuestra aplicación y un puerto de escucha para nuestro servicio.
   **04-ingress.yaml**: y por último un ingress para acceder nuestra aplicación.

 **01-namespace.yaml**
---

    apiVersion: v1
    kind: Namespace
    metadata:
      name: production


 **02-deployment.yaml**

  

---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-rdicidr
      namespace: production
      labels:
        app: rdicidr
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: rdicidr
      template:
        metadata:
          labels:
            app: rdicidr
        spec:
          containers:
          - name: rdicidr
            image: ahioros/rdicidr:latest
            ports:
            - containerPort: 3000


 **03-service.yaml**
  
---
    apiVersion: v1
    kind: Service
    metadata:
      name: service-rdicidr
      namespace: production
    spec:
      selector:
        app: rdicidr
      ports:
        - protocol: TCP
          port: 80
          targetPort: 3000
 

 **04-ingress.yaml**
  
---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: rdicidr-nginx-ingress
      namespace: production
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      ingressClassName: nginx
      rules:
      - http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-rdicidr
                port:
                  number: 80


  Aplicamos los manifests:
  
```bash
	kubectl apply -f .
```
  
  **Nota**: Como los archivos tienen un número al inicio del nombre este especifica un orden, esto hace que se aplique en ese orden.

  Realizamos un port-forward:
  
```bash  
	kubectl port-forward --namespace=production service/service-rdicidr 8080:80
```

  Ahora vamos a ver en nuestro navegador que nuestra aplicación se esta desplegando en el puerto http://localhost:8080.

  Después de realizar las pruebas y comprobar que la aplicación está funcionando podemos eliminarla de nuestro kubernetes:

```bash
	kubectl delete -f .
```

Acá te dejo el video de esta configuración por si tienes dudas:
En nuestro siguiente post te enseñaré a instalar ArgoCD en Kubernetes para que automaticemos el despliegue.

No hay comentarios.: