Emojivoto is a microservice application that allows users to vote for their favorite emoji, and tracks votes received on a leaderboard. May the best emoji win.
The application is composed of the following 3 services:
- emojivoto-web: Web frontend and REST API.
- emojivoto-emoji-svc: gRPC API for finding and listing emoji.
- emojivoto-voting-svc: gRPC API for voting and leaderboard.
Please visit the Emojivoto documentation page for more details.
To complete all steps and deploy the Emojivoto sample application, you will need:
- A DOKS cluster configured and running.
- Latest Kubectl version for Kubernetes interaction.
- Git client for interacting with the kubernetes-sample-apps repository.
The kustomization manifest provided in this repository will get you started with deploying the Emojivoto application Kubernetes resources.
First, you need to clone this repository:
git clone https://github.com/digitalocean/kubernetes-sample-apps.gitThen, change directory to your local copy:
cd kubernetes-sample-appsNow, create Emojivoto sample application Kubernetes resources using the kubectl kustomize option (-k flag):
kubectl apply -k emojivoto-example/kustomizeThe output looks similar to:
namespace/emojivoto created
serviceaccount/emoji created
serviceaccount/voting created
serviceaccount/web created
service/emoji-svc created
service/voting-svc created
service/web-svc created
deployment.apps/emoji created
deployment.apps/vote-bot created
deployment.apps/voting created
deployment.apps/web created
If everything went well, you should have a new Kubernetes namespace created named emojivoto. Inside the new namespace, you can inspect all resources created by the kustomization manifest from the sample apps repository (all Emojivoto application pods should be up and running):
kubectl get all -n emojivotoThe output looks similar to:
NAME READY STATUS RESTARTS AGE
pod/emoji-84cd97f89b-cpz4l 1/1 Running 0 10m
pod/vote-bot-5b587bbff7-wqv8t 1/1 Running 0 10m
pod/voting-74ff7f8b55-5wbgt 1/1 Running 0 10m
pod/web-7dfbdc8bf5-247t9 1/1 Running 0 9m59s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/emoji-svc ClusterIP 10.245.140.136 <none> 8080/TCP,8801/TCP 10m
service/voting-svc ClusterIP 10.245.217.36 <none> 8080/TCP,8801/TCP 10m
service/web-svc ClusterIP 10.245.137.75 <none> 80/TCP 10m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/emoji 1/1 1 1 10m
deployment.apps/vote-bot 1/1 1 1 10m
deployment.apps/voting 1/1 1 1 10m
deployment.apps/web 1/1 1 1 10m
NAME DESIRED CURRENT READY AGE
replicaset.apps/emoji-84cd97f89b 1 1 1 10m
replicaset.apps/vote-bot-5b587bbff7 1 1 1 10m
replicaset.apps/voting-74ff7f8b55 1 1 1 10m
replicaset.apps/web-7dfbdc8bf5 1 1 1 10m
Finally, port-forward the web-svc service using kubectl:
kubectl port-forward service/web-svc -n emojivoto 8080:80Open a web browser and point to localhost:8080. You should see the Emojivoto application welcome page:
To clean up all Kubernetes resources created by the Emojivoto sample application, below command must be used:
kubectl delete ns emojivotoNote:
Kubectl kustomize subcommand has a delete option that can be used - kubectl delete -k emojivoto-example/kustomize. But, it won't work well in this case because if the namespace is deleted first then the remaining operations will fail.
