6.3 KiB
General
Check the Repo content
A README.md
and orchestrator.sh
and Vagrantfile
files and all files used to create and delete and manage the student infrastructure must be submitted in the repo.
.
├── Manifests
│ └── [...]
├── Scripts
│ └── [...]
├── Dockerfiles
│ └── [...]
└── Vagrantfile
Are all the required files present?
Ask the following questions to the group or student
-
What are Container orchestration and what are their benefits of it?
-
What are Kubernetes and what is its main role of it?
-
What are K3s and what is its main role of it?
Did the student reply correctly to the questions?
Check the Student Documentation
The Documentation must exists in the README.md
file!
Did the README.md file contains the all required information about the solution(Prerequisites, Configuration, Setup, Usage, ...)?
Check the docker images in dockerhub:
Does the used docker images in the YAML manifests must be uploaded in the student dockerhub account?
Check the cluster:
By using k3s in Vagrant 2 virtual machines must be created:
-
Master: the master in the k3s cluster.
-
Agent: an agent in the k3s cluster.
kubectl
must be installed and configured in the learner machine to manage the cluster.
The nodes must be connected and available, try:
$> kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
<master-node> Ready <none> XdXh vX
<agent1-node> Ready <none> XdXh vX
$>
Does the cluster created by a Vagrantfile?
Does the cluster contains 2 nodes (master and agent)?
Does kubectl installed and configured in the learner machine
Does the nodes is connected and ready for usage?
Check the student infrastructure:
The student must implement this architecture:
Run the student infrastructure:
user:~$ ./orchestrator.sh create
cluster created
user:~$
did the student provide a orchestrator.sh
script that run and create and manage the infrastructure
did the student respect the architecture?
did the infrastructure start correctly?
Verify the K8s Manifests:
Is there a YAML Manifest for each service?
Are credentials not exists in the YAML manifests, except the secret manifests?
Ask the following questions to the group or student
-
Explain What is a K8s manifest
-
Explain the K8s manifests
-
Did the student reply correctly to the questions?
Did the student reply correctly to the questions?
Check the secrets
$> kubectl get secrets -o json
<...>
$>
Is the all used credentials and passwords presented in the secrets?
Check all deployed resources:
user:~$ kubectl get all
<...>
user:~$
inventory-database container
is a PostgreSQL database server that contains your inventory database, it must be accessible via port5432
.billing-database container
is a PostgreSQL database server that contains your billing database, it must be accessible via port5432
.inventory-app container
is a Node.Js server that contains your inventory-app code running and connected to the inventory database and accessible via port8080
.billing-app container
is a Node.Js server that contains your billing-app code running and connected to the billing database and consuming the messages from the RabbitMQ queue, and it can be accessed via port8080
.RabbitMQ container
is a RabbitMQ server that contains the queue.api-gateway-app container
is a Node.Js server that contains your api-gateway-app code running and forwarding the requests to the other services and it's accessible via port3000
.
Did the all required applications is deployed?
-
databases must be deployed as Statefulset, and volumes that enable containers to move across infrastructure without losing the data must be created.
-
Node.JS applications must be deployed as a deployment and they must be scaled horizontally automatically, depending on CPU consumption:
-
api-gateway
: max replication: 3 min replication: 1 cpu percent triger: 60% -
billing-app
: max replication: 3 min replication: 1 cpu percent triger: 60% -
inventory-app
: max replication: 3 min replication: 1 cpu percent triger: 60%
Do all apps deployed with the correct configuration?
Ask the following questions to the group or student
-
What is statefulset in k8s?
-
What is deployment in k8s?
-
What is difference between deployment and statefulset in k8s?
-
What is scaling and why we use it?
-
What is a load balancer and what is the role of it?
-
Why we don´t put the database as a deployment?
Did the student reply correctly to the questions?
Test The solution
Inventory API Endpoints
Open Postman and make a POST
request to http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/
address with the following body as Content-Type: application/json
:
{
"title": "A new movie",
"description": "Very short description"
}
Can you confirm the response was the success code 200
?
In Postman make a GET
request to http://[GATEWAY_IP]:[GATEWAY_PORT]/api/movies/
address.
Can you confirm the response was success code 200
and the body of the response is in json
with the information of the last added movie?
Billing API Endpoints
Open Postman and make a POST
request to http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/
address with the following body as Content-Type: application/json
:
{
"user_id": "20",
"number_of_items": "99",
"total_amount": "250"
}
Can you confirm the response was success code 200
?
Stop the billing-app container
Can you confirm the billing-app
container was correctly stopped?
Open Postman and make a POST
request to http://[GATEWAY_IP]:[GATEWAY_PORT]/api/billing/
address with the following body as Content-Type: application/json
:
{
"user_id": "22",
"number_of_items": "10",
"total_amount": "50"
}