Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/testdrivenio/flask-vue-kubernetes
Flask + Vue + Postgres + Docker + Kubernetes
https://github.com/testdrivenio/flask-vue-kubernetes
docker flask kubernetes python vue
Last synced: about 2 months ago
JSON representation
Flask + Vue + Postgres + Docker + Kubernetes
- Host: GitHub
- URL: https://github.com/testdrivenio/flask-vue-kubernetes
- Owner: testdrivenio
- License: mit
- Created: 2018-09-04T21:37:16.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-06T00:57:41.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T14:10:33.767Z (5 months ago)
- Topics: docker, flask, kubernetes, python, vue
- Language: JavaScript
- Homepage:
- Size: 951 KB
- Stars: 349
- Watchers: 16
- Forks: 144
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred-test - testdrivenio/flask-vue-kubernetes - Flask + Vue + Postgres + Docker + Kubernetes (JavaScript)
README
# Running Flask on Kubernetes
## Want to learn how to build this?
Check out the [post](https://testdriven.io/running-flask-on-kubernetes).
## Want to use this project?
### Docker
Build the images and spin up the containers:
```sh
$ docker-compose up -d --build
```Run the migrations and seed the database:
```sh
$ 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/](http://localhost:8080/)
1. [http://localhost:5001/books/ping](http://localhost:5001/books/ping)
1. [http://localhost:5001/books](http://localhost:5001/books)### Kubernetes
#### Minikube
Install and run [Minikube](https://kubernetes.io/docs/setup/minikube/):
1. Install a [Hypervisor](https://kubernetes.io/docs/tasks/tools/install-minikube/#install-a-hypervisor) (like [VirtualBox](https://www.virtualbox.org/wiki/Downloads) or [HyperKit](https://github.com/moby/hyperkit)) to manage virtual machines
1. Install and Set Up [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) to deploy and manage apps on Kubernetes
1. Install [Minikube](https://github.com/kubernetes/minikube/releases)Start the cluster:
```sh
$ minikube start --vm-driver=virtualbox
$ minikube dashboard
```#### Volume
Create the volume:
```sh
$ kubectl apply -f ./kubernetes/persistent-volume.yml
```Create the volume claim:
```sh
$ kubectl apply -f ./kubernetes/persistent-volume-claim.yml
```#### Secrets
Create the secret object:
```sh
$ kubectl apply -f ./kubernetes/secret.yml
```#### Postgres
Create deployment:
```sh
$ kubectl create -f ./kubernetes/postgres-deployment.yml
```Create the service:
```sh
$ kubectl create -f ./kubernetes/postgres-service.yml
```Create the database:
```sh
$ kubectl get pods
$ kubectl exec postgres- --stdin --tty -- createdb -U postgres books
```#### Flask
Build and push the image to Docker Hub:
```sh
$ 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:
```sh
$ kubectl create -f ./kubernetes/flask-deployment.yml
```Create the service:
```sh
$ kubectl create -f ./kubernetes/flask-service.yml
```Apply the migrations and seed the database:
```sh
$ kubectl get pods
$ kubectl exec flask- --stdin --tty -- python manage.py recreate_db
$ kubectl exec flask- --stdin --tty -- python manage.py seed_db
```#### Ingress
Enable and apply:
```sh
$ minikube addons enable ingress
$ kubectl apply -f ./kubernetes/minikube-ingress.yml
```Add entry to */etc/hosts* file:
```
hello.world
```Try it out:
1. [http://hello.world/books/ping](http://hello.world/books/ping)
1. [http://hello.world/books](http://hello.world/books)#### Vue
Build and push the image to Docker Hub:
```sh
$ 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:
```sh
$ kubectl create -f ./kubernetes/vue-deployment.yml
```Create the service:
```sh
$ kubectl create -f ./kubernetes/vue-service.yml
```Try it out at [http://hello.world/](http://hello.world/).