/flask-vue-kubernetes

Flask + Vue + Postgres + Docker + Kubernetes

Primary LanguageJavaScript

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 harbor.azhangbaobao.cn/library/flask-kubernetes ./services/server
$ docker push harbor.azhangbaobao.cn/library/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:

访问 echo "$(minikube ip) flask.world" | sudo tee -a /etc/hosts 浏览器访问ip

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 harbor.azhangbaobao.cn/library/vue-kubernetes ./services/client   -f ./services/client/Dockerfile-minikube
$ docker push harbor.azhangbaobao.cn/library/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/.