In this article we will go through the kubernetes microservice architecture with kubernetes deployment example.
Table of Content
- Prerequisites
- kubernetes microservice architecture
- Docker run command to deploy Microservice
- Preparing-kubernetes-deployment-yaml-or-kubernetes-deployment-yml-file-for-Voting-App-along-with-kubernetes-deployment-environment-variables
- Preparing kubernetes deployment yaml or kubernetes deployment yml file for Redis app along with kubernetes deployment environment variables
- Preparing kubernetes deployment yaml or kubernetes deployment yml file for PostgresApp along with kubernetes deployment environment variables
- Preparing kubernetes deployment yaml or kubernetes deployment yml file for Worker App along with kubernetes deployment environment variables
- Preparing kubernetes deployment yaml or kubernetes deployment yml file for Result App along with kubernetes deployment environment variables
- Creating kubernetes nodeport or k8s nodeport or kubernetes service nodeport YAML file
- Creating kubernetes clusterip or kubernetes service clusterip YAML file
- Running kubernetes service and Kubernetes deployments.
- Conclusion
Prerequisites
This will be step by step tutorial,
- Ubuntu or Linux machine with Kubernetes cluster running or a minikube.
- kubectl command installed
kubernetes microservice architecture
In the below kubernetes microservice architecture you will see an application where you vote and the result will be displayed based on the votes and below are the components:
- Voting app based on Python which is UI based app where you will add your vote.
- In Memory app based on Redis which will store your vote in memory.
- Worker app which is .net based app converts in built memory data into Postgres DB.
- Postgres DB app which is based on Postgres DB collects the data and store it in database.
- Result-app which is UI based app fetches the data from DB and displays the vote to the users.

Docker run command to deploy Microservice
We will start this tutorial by showing you docker commands, if we would have run all these applications in docker itself instead of kubernetes.
docker run -d --name=redis redis
docker run -d --name=db postgres:9.4
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link redis:redis --link db:db worker
Preparing kubernetes deployment yaml or kubernetes deployment yml file for Voting App along with kubernetes deployment environment variables
As this tutorial is to deploy all applications in kubernetes, we will prepare all the YAML files and in the end of tutorial we will deploy them using kubectl command.
In the below deployment file we are creating voting app and it will run on those pods whose labels matches with name as voting-app-pod and app as demo-voting-app.
apiVersion: apps/v1
kind: Deployment
metadata:
name: voting-app-deploy
labels:
name: voting-app-deploy
app: demo-voting-app
spec:
replicas: 3
selector:
matchLabels:
name: voting-app-pod
app: demo-voting-app
template:
metadata:
name: voting-app-pod
labels:
name: voting-app-pod
app: demo-voting-app
spec:
containers:
- name: voting-app
image: kodekloud/examplevotingapp_voting:v1
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "2Gi"
cpu: "2"
ports:
- containerPort: 80
Preparing kubernetes deployment yaml or kubernetes deployment yml file for Redis app along with kubernetes deployment environment variables
In the below deployment file we are creating redis app and it will run on those pods whose labels matches with name as redis-pod and app as demo-voting-app.
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deploy
labels:
name: redis-deploy
app: demo-voting-app
spec:
replicas: 1
selector:
matchlabels:
name: redis-pod
app: demo-voting-app
template:
metadata:
name: redis-pod
labels:
name: redis-pod
app: demo-voting-app
spec:
containers:
- name: redis
image: redis
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "2Gi"
cpu: "2"
ports:
- containerPort: 6379
Preparing kubernetes deployment yaml or kubernetes deployment yml file for PostgresApp along with kubernetes deployment environment variables
In the below deployment file we are creating postgres app and it will run on those pods whose labels matches with name as postgres-pod and app as demo-voting-app.
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deploy
labels:
name: postgres-deploy
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: postgres-pod
app: demo-voting-app
template:
metadata:
name: postgres-deploy
labels:
name: postgres-deploy
app: demo-voting-app
spec:
containers:
- name: postgres
image: postgres
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "2Gi"
cpu: "2"
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
value: "posgres"
- name: POSTGRES_PASSWORD
value: "posgres"
Preparing kubernetes deployment yaml or kubernetes deployment yml file for Worker App along with kubernetes deployment environment variables
In the below deployment file we are creating postgres app and it will run on those pods whose labels matches with name as worker-app-pod and app as demo-voting-app.
apiVersion: app/v1
kind: Deployment
metadata:
name: worker-app-deploy
labels:
name: worker-app-deploy
app: demo-voting-app
spec:
selector:
matchLabels:
name: worker-app-pod
app: demo-voting-app
replicas: 3
template:
metadata:
name: worker-app-pod
labels:
name: worker-app-pod
app: demo-voting-app
spec:
containers:
- name: worker
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "2Gi"
cpu: "2"
image: kodekloud/examplevotingapp_worker:v1
Preparing kubernetes deployment yaml or kubernetes deployment yml file for Result App along with kubernetes deployment environment variables
In the below deployment file we are creating result app and it will run on those pods whose labels matches with name as result-app-pod and app as demo-voting-app.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: result-app-deploy
app: demo-voting-app
spec:
replicas: 1
selector:
matchLabels:
name: result-app-pod
app: demo-voting-app
template:
metadata:
name: result-app-pod
labels:
name: result-app-pod
app: demo-voting-app
spec:
containers:
- name: result-app
image: kodekloud/examplevotingapp_result:v1
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "2Gi"
cpu: "2"
ports:
- containerPort: 80
Creating kubernetes nodeport or k8s nodeport or kubernetes service nodeport YAML file
Now that we have created the deployment files for each of the application our voting app and result app will be expose to the outside world so we will declare both of them as NodePort as shown below.
kind: Service
apiVersion: v1
metadata:
name: voting
labels:
name: voting-service
app: demo-voting-app
spec:
type: NodePort
selector:
name: voting-app-pod
app: demo-voting-app
ports:
- port: 80
targetPort: 80
nodePort: 30004
kind: Service
apiVersion: v1
metadata:
name: result
labels:
name: result-service
app: demo-voting-app
spec:
type: NodePort
selector:
name: result-pod
app: demo-voting-app
ports:
- port: 6379
targetPort: 6379
nodePort: 30005
Creating kubernetes clusterip or kubernetes service clusterip YAML file
Now that we have created the deployment files for each of the application our Redis app and Postgres app will be expose to the internal cluster only world so we will declare both of them as ClusterIP as shown below.
kind: Service
apiVersion: v1
metadata:
name: db
labels:
name: postgres-service
app: demo-voting-app
spec:
type: ClusterIP
selector:
name: postges-pod
app: demo-voting-app
ports:
- port: 5432
targetPort: 5432
kind: Service
apiVersion: v1
metadata:
name: redis
labels:
name: redis-service
app: demo-voting-app
spec:
type: ClusterIP
selector:
name: redis-pod
app: demo-voting-app
ports:
- port: 6379
targetPort: 6379
Running kubernetes service and Kubernetes deployments.
Now we will run the kubernetes services and kubernetes deployments using the below commands.
kubectl apply -f postgres-app-deploy.yml
kubectl apply -f redis-app-deploy.yml
kubectl apply -f result-app-deploy.yml
kubectl apply -f worker-app-deploy.yml
kubectl apply -f voting-app-deploy.yml
kubectl apply -f postgres-app-service.yml
kubectl apply -f redis-app-service.yml
kubectl apply -f result-app-service.yml
kubectl apply -f voting-app-service.yml
Conclusion
In this article we went through the kubernetes microservice architecture with kubernetes deployment example.