Skip to content
Flask + Vue + Postgres + Docker + Kubernetes
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
kubernetes add storageClassName to pvc as well Jan 23, 2019
services bumps python dependencies, updates pvc Jan 25, 2019
.gitignore
README.md
deploy.sh updates deploy.sh and readme Sep 19, 2018
docker-compose.yml bumps python dependencies, updates pvc Jan 25, 2019

README.md

Running Flask on Kubernetes

Want to learn how to build this?

Check out the post.

Want to use this project?

Docker

Build the images and spin up the containers:

$ docker-compose up -d --build

Run the migrations and seed the database:

$ docker-compose exec server python manage.py recreate_db
$ docker-compose exec server python manage.py seed_db

Test it out at:

  1. http://localhost:8080/
  2. http://localhost:5001/books/ping
  3. http://localhost:5001/books

Kubernetes

Minikube

Install and run Minikube:

  1. Install a Hypervisor (like VirtualBox or HyperKit) to manage virtual machines
  2. Install and Set Up kubectl to deploy and manage apps on Kubernetes
  3. Install Minikube

Start the cluster:

$ minikube start --vm-driver=virtualbox
$ minikube dashboard

Volume

Create the volume:

$ kubectl apply -f ./kubernetes/persistent-volume.yml

Create the volume claim:

$ kubectl apply -f ./kubernetes/persistent-volume-claim.yml

Secrets

Create the secret object:

$ kubectl apply -f ./kubernetes/secret.yml

Postgres

Create deployment:

$ kubectl create -f ./kubernetes/postgres-deployment.yml

Create the service:

$ kubectl create -f ./kubernetes/postgres-service.yml

Create the database:

$ kubectl get pods
$ kubectl exec postgres-<POD_IDENTIFIER> --stdin --tty -- createdb -U postgres books

Flask

Build and push the image to Docker Hub:

$ docker build -t mjhea0/flask-kubernetes ./services/server
$ docker push mjhea0/flask-kubernetes

Make sure to replace mjhea0 with your Docker Hub namespace in the above commands as well as in kubernetes/flask-deployment.yml

Create the deployment:

$ kubectl create -f ./kubernetes/flask-deployment.yml

Create the service:

$ kubectl create -f ./kubernetes/flask-service.yml

Apply the migrations and seed the database:

$ kubectl get pods
$ kubectl exec flask-<POD_IDENTIFIER> --stdin --tty -- python manage.py recreate_db
$ kubectl exec flask-<POD_IDENTIFIER> --stdin --tty -- python manage.py seed_db

Ingress

Enable and apply:

$ minikube addons enable ingress
$ kubectl apply -f ./kubernetes/minikube-ingress.yml

Add entry to /etc/hosts file:

<MINIKUBE_IP> hello.world

Try it out:

  1. http://hello.world/books/ping
  2. http://hello.world/books

Vue

Build and push the image to Docker Hub:

$ docker build -t mjhea0/vue-kubernetes ./services/client \
    -f ./services/client/Dockerfile-minikube
$ docker push mjhea0/vue-kubernetes

Again, replace mjhea0 with your Docker Hub namespace in the above commands as well as in kubernetes/vue-deployment.yml

Create the deployment:

$ kubectl create -f ./kubernetes/vue-deployment.yml

Create the service:

$ kubectl create -f ./kubernetes/vue-service.yml

Try it out at http://hello.world/.

You can’t perform that action at this time.