Postman Collection: https://www.getpostman.com/collections/e6e00ce3785eef4a9aa5
Running via minikube
:
-
First run
-
Start VM
$ minikube start
-
Set-up Kubernetes docker environment
$ eval $(minikube docker-env)
-
Build Docker images
# pull build images (it can take some time, but it is faster, than building without cache) $ docker-compose pull # build all images $ docker-compose build
Info: In case you run out of memory while building image service (eg. vgg19), skip it in whole process
-
Generate self-signed TLS certificate
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=*.minikube"
-
Add generated certificate to cluster
$ kubectl -n kube-system create secret tls tls-minikube-system --key=tls.key --cert=tls.crt $ kubectl create secret tls tls-minikube-default --key=tls.key --cert=tls.crt
-
Deploy main services to cluster
$ kubectl apply -f kubernetes/traefik $ kubectl apply -f kubernetes/aggregator-service
-
Point *.minikube domains to local cluster entrypoint:
$ echo "$(minikube ip) aggregator-service.minikube dashboard.minikube" | sudo tee -a /etc/hosts
-
Wait for all pods to be in running state
$ kubectl get pods --all-namespaces
or use cluster dashboard:
$ minikube dashboard
-
Deploy image services:
$ kubectl apply -f kubernetes/image-service-resnet50 $ kubectl apply -f kubernetes/image-service-vgg19 $ kubectl apply -f kubernetes/image-service-xceptv1 $ kubectl apply -f kubernetes/image-service-inceptv3
Info: Deploying all services on local computer escpecially with many replicas can cause performance issues, so it is not recommended
-
(Optionally) Point image services to local minikube domain:
$ echo "$(minikube ip) image-service-resnet50.minikube image-service-vgg19.minikube image-service-xceptv1.minikube image-service-inceptv3.minikube" | sudo tee -a /etc/hosts
Info: You can use image services via aggregator without exposing them to the world by disabling their ingresses
-
-
Available services:
-
$ curl -k https://aggregator-service.minikube/status
-
Image Services:
$ curl -k https://image-service-resnet50.minikube/status $ curl -k https://image-service-vgg19.minikube/status $ curl -k https://image-service-inceptv3.minikube/status $ curl -k https://image-service-xceptv1.minikube/status
-
Traefik Dashboard (Load Balancer)
Basic auth credentials:
username: admin password: admin
-
Running via docker-compose
:
-
Basic:
$ echo "127.0.0.1 image-resnet50.docker.localhost image-vgg19.docker.localhost image-inceptv3.docker.localhost image-xceptv1.docker.localhost aggregator-service.docker.localhost" | sudo tee -a /etc/hosts $ docker-compose up
Go to http://localhost:8080/dashboard/ to see traefik dashboard
-
Advanced:
$ docker-compose up [-d] [--pull] [--build] [--scale image-service=5]
Options:
-d
- run in background--pull
- enforce to pull new images from docker hub--build
- enforce to rebuild dockerfiles--scale aggregator-service=5
- scale container having name "aggregator-service" to five instances
-
Logs
$ docker-compose logs [-f] [name]
-f
- follow logs in real-timename
- show logs only of specific container by its name
-
Testing Aggregator Service:
/status
endpoint$ curl -H "Host: aggregator-service.docker.localhost" http://127.0.0.1