2. Load Balancer y una API Flask¶
En este laboratorio se desplegara una aplicacion dockerizada hecha en python
en kubernetes
, agregando un LoadBalancer
.
-
Crear el app de python
-
Crear el
Dockerfile
-
Construir la imagen, pero antes apuntar al registry de
minukube
.
- Crear archivo de configuracion
deployment.yml
apiVersion: v1
kind: Service
metadata:
name: flask-test-service
spec:
selector:
app: flask-test-app # en nombre de la aplicacion que va a gestionar
ports:
- protocol: "TCP"
port: 6000
targetPort: 5000 # El puerto donde se expone la aplicacion Flask
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask-test-app
spec:
selector:
matchLabels:
app: flask-test-app
replicas: 5 #
template:
metadata:
labels:
app: flask-test-app
spec:
containers:
- name: flask-test-app
image: santos/flask-hello-world
imagePullPolicy: Never
ports:
- containerPort: 5000
-
Aplicar el archivo de configuracion con
kubectl
. -
Revisar si se ejecuto correctamente.
$ kubectl get pods # NAME READY STATUS RESTARTS AGE # flask-test-app-c6b649857-2tgs5 1/1 Running 0 14s # flask-test-app-c6b649857-g7f28 1/1 Running 0 14s # flask-test-app-c6b649857-lh4nb 1/1 Running 0 14s # flask-test-app-c6b649857-rsdjr 1/1 Running 0 14s # flask-test-app-c6b649857-vmsj5 1/1 Running 0 14s $ kubectl get services # NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE # flask-test-service LoadBalancer 10.102.69.135 <pending> 6000:31902/TCP 81s
-
Obtener la url de acceso al LoadBalancer. Como se esta usando
minkube
se utiliza el siguiente comando.
kubectl describe
$ kubectl describe services flask-test-service
# Name: flask-test-service
# Namespace: default
# Labels: <none>
# Annotations: <none>
# Selector: app=flask-test-app
# Type: LoadBalancer
# IP Family Policy: SingleStack
# IP Families: IPv4
# IP: 10.102.69.135
# IPs: 10.102.69.135
# LoadBalancer Ingress: 192.168.39.232
# Port: <unset> 6000/TCP
# TargetPort: 5000/TCP
# NodePort: <unset> 31902/TCP
# Endpoints: 172.17.0.12:5000,172.17.0.3:5000,172.17.0.6:5000 + 2 more...
# Session Affinity: None
# External Traffic Policy: Cluster
# Events: <none>
En la salida del comando se puede ver informacion del LoadBalancer
, el primero que necesitamos es LoadBalancer Ingress
.
- Hacer un get al API: