Giter VIP home page Giter VIP logo

hello-k8s-python's Introduction

hello-k8s-python

Aplicacion web creada en Flask Python deployada con k8s en GNU/Linux basado en la primera charla de la Comunidad Kubernetes Latam

Aplicacion

La aplicacion esta hecha con Python 3.x y Flask es muy sencilla retorna un json de prueba a /

applicacion web

Todas las dependencias se encuentran en requirements.txt para instalar las dependencias:

$ pip install -r requirements.txt

Contenerizacion

Para contenerizar la aplicacion es necesario:

  • Tener instalado Docker
  • Tener levantado el servicio de Docker
    • systemctl start docker.service o service docker start
  • Ojo con los post-instalation steps para poder usar docker sin superusuario.

La creacion del Dockerfile puede ser manual o en su defecto se puede usar la extension Docker de VSCode

Presionando Crtl+Shift+P escribimos Dockerfile y llenamos los datos requeridos.

Para crear la imagen ejecutamos:

$ docker build -t <image_name>

Ej:

$ docker build -t hello-k8s-python

Para correr nuestra imagen recien creada ejecutamos:

$ docker run -it --rm -p <host_port>:<image_port> <image_name>

Ej:

$ docker run -it --rm -p 5000:5000 hello-k8s-python

docker run log

Para subir la imagen a Docker Hub es necesairo crear un repositorio e inicida sesion en el equipo

$ docker login --username=<docker_id>

Luego tageamos la imagen en base al repo que hemos creado en Docker Hub

$  docker tag <local_image>:<tag_name> <docker_id>]/<repo_name>:<tag_name>

Ej:

$ docker tag hello-k8s-python:latest is1394/hello-k8s-python:latest

Finalmente subimos la imagen:

$ docker push <docker_id>/<repo_name>:<tag_name>

Ej:

$ docker push is1394/hello-k8s-python:latest   

Cluster K8s

Para configurar el cluster con la imagen creada, verificar tener instalado Kubernetes, ademas de Minikube

Es necesario levantar Minikube, para esto ejecutamos:

$ minikube start

Podemos indicar el driver que prefiramos para minikube, por facilidad se escogio el driver de Docker

$ minikube start --driver=docker 
$ minikube config set driver docker

Verificamos que nuestro cluster este levantado, ejecutando:

$ kubectl get notes

kubectl output get nodes

Ahora es necesario crear las configuraciones de k8s para que nuestro proyecto pueda arrancar,por facilidad usaremos la extension de Kubernetes Snippets

Creamos un archivo deployment.yaml escribimos k-deployment y escogemos el snippet de k8s Deployment de la extension, colocamos un nombre a la aplicacion, en el apartado de container seteamos la imagen dentro de image y seteamos el containerPort dentro del apartado de ports

Ahora es necesario crear un servicio, para esto creamos el archivo service.yaml escribimos k-service y escogemos el snippet de k8s Service de la extension, colocamos el nombre de la aplicacion que escribimos en el deployment.yaml, seteamos los puertos correspondientes y cambiamos el tipo de servicio a LoadBalancer.

Indicamos a k8s que aplique la configuracion que hemos creado ejecutando:

$ kubectl apply -f deployment.yaml

kubectl output apply

Verificamos los deployments de nuestro k8s:

$ kubectl get deployments

kubectl output get deployments

Aplicamos el servicio como el deployment

$ kubectl apply -f service.yaml

kubectl output apply service

Verificamos los services de nuestro k8s:

$ kubectl get services

kubectl output get service

Podemos observar que la salida nos dice que nuestra app esta como pending en el apartado de EXTERNAL-IP por lo cual para solucionar esto necesitamos crear un tunnel con minukube por el tipo de servicio que estamos usando, ejecutamos:

$ minikube tunnel

Volvemos a verificar los servicios

kubectl output get service again

Observamos que se ha asignado el EXTERNAL-IP, ingresamos esa ip en nuestro navegador y Listo!

output

hello-k8s-python's People

Contributors

isfernand avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.