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?
¿Qué es kubernetes?
- Docker Para correr nuestra imagen ejecutamos el siguiente comando:
docker run -d --name my-rdicidr -p 3000:3000 ahioros/rdicidr:latest
Verificamos nuestro contenedor en la consola:
docker ps | grep my-rdicidr
Para detener el contenedor ejecutamos el siguiente comando:
docker stop my-rdicidr
Para borrar el contenedor ejecutamos el siguiente comando:
docker rm my-rdicidr
Para borrar la imagen ejecutamos el siguiente comando:
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.
- 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:
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:
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:
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.