CKAD Practice Exam – Part 1

Hands-On Lab

 

Photo of Will Boyd

Will Boyd

DevOps Team Lead in Content

Length

01:30:00

Difficulty

Intermediate

This lab is designed to help prepare for the kinds of tasks and scenarios encountered during the Certified Kubernetes Application Developer (CKAD) exam. In this lab, you will have the opportunity to practice your skills related to creating and configuring pods, deployments, and services. You will create a deployment which manages a set of specially-configured replica pods, and then expose those pods using a service.

What are Hands-On Labs?

Hands-On Labs are scenario-based learning environments where learners can practice without consequences. Don't compromise a system or waste money on expensive downloads. Practice real-world skills without the real-world risk, no assembly required.

CKAD Practice Exam - Part 1

The scenario

Our pizza restaurant is working on a new web application designed to run in a Kubernetes cluster. The development team has designed a web service which serves a list of pizza toppings. The team has provided a set of specifications which the pizza topping web service needs in order to run.

We have been asked to create a deployment that meets the app's specifications. Then, we need to expose the application using a NodePort service. This setup should meet the following criteria:

  • All objects should be in the pizza namespace. This namespace already exists in the cluster.
  • The deployment should be named pizza-deployment.
  • The deployment should have 3 replicas.
  • The deployment's pods should have one container using the linuxacademycontent/pizza-service image with the tag 1.14.6.
  • Run the container with the command nginx.
  • Run the container with the arguments "-g", "daemon off;".
  • The pods should expose port 80 to the cluster.
  • The pods should be configured to periodically check the /healthz endpoint on port 8081, and restart automatically if the request fails.
  • The pods should not receive traffic from the service until the / endpoint on port 80 responds successfully.
  • The service should be named pizza-service.
  • The service should forward traffic to port 80 on the pods.
  • The service should be exposed externally by listening on port 30080 on each node.

Get logged in

Use the credentials and server IP in the hands-on lab overview page to log in with SSH.

Build the deployment and create it in the cluster

Build a deployment descriptor (with whatever text editor you like) called pizza-deployment.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pizza-deployment
  namespace: pizza
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pizza
  template:
    metadata:
      labels:
        app: pizza
    spec:
      containers:
      - name: pizza
        image: linuxacademycontent/pizza-service:1.14.6
        command: ["nginx"]
        args: ["-g", "daemon off;"]
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8081
        readinessProbe:
          httpGet:
            path: /
            port: 80

Create the deployment in the cluster:

[user@host]$ kubectl apply -f pizza-deployment.yml

A quick kubectl get deploy -n pizza should show us some ready pods.

Build the service and create it in the cluster

Build a service descriptor (again, with whatever text editor you like) called pizza-service.yml:

apiVersion: v1
kind: Service
metadata:
  name: pizza-service
  namespace: pizza
spec:
  type: NodePort
  selector:
    app: pizza
  ports:
  - protocol: TCP
    port: 80
    nodePort: 30080

Create the service in the cluster:

[user@host]$ kubectl apply -f pizza-service.yml

We can verify the service is working by testing the nodePort with a curl command:

curl localhost:30080

Conclusion

If that command output was a list of pizza toppings, then we're good to go. We've built the service and it's running. Congratulations!