Practice Test: CKAD
Some of the scenario questions here are based on Kodekloud’s CKAD course labs.
Pod Design
Note
CKAD and CKA can have similar scenario questions.
It is recommended to go through the CKA practice tests.
Shortcuts
First run the two commands below for shortcuts.
export do="--dry-run=client -o yaml"
export now="--force --grace-period=0"
Questions
-
Upgrade the application by setting the image on the deployment to kodekloud/webapp-color:v2. Do not delete and re-create the deployment. Only set the new image name for the existing deployment.
controlplane ~ ✦ ➜ k get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 4/4 4 4 6m46s
Answer
```bash
controlplane ~ ✦ ✖ k set image deploy frontend simple-webapp=kodekloud/webapp-color:v2
deployment.apps/frontend image updated
```
```bash
controlplane ~ ➜ k get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 5/4 4 3 5m18s
```
</br>
-
Change the deployment strategy to Recreate.
controlplane ~ ✦ ➜ k get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 4/4 4 4 6m46s
Answer
```bash
controlplane ~ ✦2 ➜ k get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 4/4 4 4 8m14s
controlplane ~ ✦2 ➜ k get deployments.apps frontend -o yaml > frontend.yml
controlplane ~ ✦2 ➜ k delete -f frontend.yml
deployment.apps "frontend" deleted
controlplane ~ ✦2 ➜ k get deployments.apps
No resources found in default namespace.
```
```yaml
## frontend.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: default
spec:
replicas: 4
selector:
matchLabels:
name: webapp
strategy:
type: Recreate
template:
metadata:
labels:
name: webapp
spec:
containers:
- image: kodekloud/webapp-color:v2
name: simple-webapp
ports:
- containerPort: 8080
protocol: TCP
```
```bash
controlplane ~ ✦2 ➜ k apply -f frontend.yml
deployment.apps/frontend created
controlplane ~ ✦2 ➜ k get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 4/4 4 4 6s
```
</br>
-
A pod definition file named throw-dice-pod.yaml is given. The image throw-dice randomly returns a value between 1 and 6. 6 is considered success and all others are failure. Try deploying the POD and view the POD logs for the generated number. File is located at /root/throw-dice-pod.yaml
controlplane ~ ➜ cat throw-dice-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: throw-dice-pod
spec:
containers:
- image: kodekloud/throw-dice
name: throw-dice
restartPolicy: Never
Next, create a Job using this POD definition file or from the imperative command and look at how many attempts does it take to get a ‘6’.
Then update the job definition to run as many times as required to get 3 successful 6’s
Answer
```bash
controlplane ~ ➜ k apply -f throw-dice-pod.yaml
pod/throw-dice-pod created
controlplane ~ ➜ k get po
NAME READY STATUS RESTARTS AGE
throw-dice-pod 0/1 ContainerCreating 0 3s
controlplane ~ ➜ k get po
NAME READY STATUS RESTARTS AGE
throw-dice-pod 0/1 Error 0 4s
controlplane ~ ➜ k logs throw-dice-pod
5
```
Create the job.
```bash
controlplane ~ ➜ k create job throw-dice-job --image kodekloud/throw-dice $do
apiVersion: batch/v1
kind: Job
metadata:
creationTimestamp: null
name: throw-dice-job
spec:
template:
metadata:
creationTimestamp: null
spec:
containers:
- image: kodekloud/throw-dice
name: throw-dice-job
resources: {}
restartPolicy: Never
status: {}
controlplane ~ ➜ k create job throw-dice-job --image kodekloud/throw-dice $do > job.yml
```
```bash
## job.yml
apiVersion: batch/v1
kind: Job
metadata:
creationTimestamp: null
name: throw-dice-job
spec:
backoffLimit: 15
template:
metadata:
creationTimestamp: null
spec:
containers:
- image: kodekloud/throw-dice
name: throw-dice-job
resources: {}
restartPolicy: Never
status: {}
```
```bash
controlplane ~ ➜ k apply -f job.yml
job.batch/throw-dice-job created
controlplane ~ ➜ k get job
NAME COMPLETIONS DURATION AGE
throw-dice-job 0/1 4s 4s
```
Update the job definition to run as many times as required to get 3 successful 6's
```yaml
apiVersion: batch/v1
kind: Job
metadata:
name: throw-dice-job
spec:
completions: 3
backoffLimit: 25 # This is so the job does not quit before it succeeds.
template:
spec:
containers:
- name: throw-dice
image: kodekloud/throw-dice
restartPolicy: Never
```
</br>
-
Using the same YAML file from the previous question, speed it up by running upto 3 jobs in parallel.
controlplane ~ ✦2 ➜ k get job
NAME COMPLETIONS DURATION AGE
throw-dice-job 3/3 15s 40s
Answer
```bash
controlplane ~ ✦2 ➜ k delete job throw-dice-job
job.batch "throw-dice-job" deleted
controlplane ~ ✦2 ➜ k get job
No resources found in default namespace.
```
```yaml
## job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: throw-dice-job
spec:
parallelism: 3
completions: 3
backoffLimit: 25 # This is so the job does not quit before it succeeds.
template:
spec:
containers:
- name: throw-dice
image: kodekloud/throw-dice
restartPolicy: Never
```
```bash
controlplane ~ ✦2 ➜ k apply -f job.yml
job.batch/throw-dice-job created
```
</br>
-
Using the same YAML file from the previous question, schedule that job to run at 21:30 hours every day.
Answer
```yaml
## cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
name: throw-dice-cron-job
spec:
schedule: "30 21 * * *"
jobTemplate:
spec:
completions: 3
parallelism: 3
backoffLimit: 25 # This is so the job does not quit before it succeeds.
template:
spec:
containers:
- name: throw-dice
image: kodekloud/throw-dice
restartPolicy: Never
```
```bash
controlplane ~ ✦5 ➜ k apply -f cronjob.yml
cronjob.batch/throw-dice-cron-job created
controlplane ~ ✦5 ➜ k get cronjobs.batch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
throw-dice-cron-job 30 21 * * * False 0 8s
```
</details>
</br>
Back to the top