Whilst I was concerned about my scoring, I still passed. It scored 72%, with a pass mark of 66%
So I did the CKAD exam and it was one of the latest exams I’ve done, starting at 22:45 and finishing at 00:45. The CKAD exam is 2 hours versus the CKA’s 3 hours
And I went into the exam feeling relatively confident. But, damn, the 2 hours goes by really quickly.
Had several questions I wasn’t able to complete or only partially complete.
Liveness and Readiness Probes
This question wanted a pod to be restarted if an endpoint returns 500. Simple enough, but there was a catch, if another endpoint returns 500, then the application is starting, and so disregard the check.
I used similar by implementing this check as a
curl command in a real life scenario (I should write a blog entry on that some time).
So in the exam, I did both the liveness and readiness checks to chain two
curl commands together, if the first endpoint (
/starting) in this case, returned 200, then it would do the next endpoint (
/healthz) and return a fail if that gave a 500.
Buuuuut, the image didn’t have
curl installed so the probes failed. I could use the hack I’ve used in my image and install curl as part of the check, but time constraints wouldn’t let me.
Similar to the CKA question, there was a quirkily worded question here which wanted me to add a file to a node, create a pod that used
hostPath and reserve a 1Gi PV. The documentation does not provide an example of that, just a pod with a hostPath as an internal volume: https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
A technology I haven’t used in Kubernetes yet. They gave several policies, one that allowed “app:proxy” and one that allowed “app:db” and wanted ius to edit a pod to only be allowed to talk to only those.
We were not allowed to modify the policies. I can’t remember whether we were allowed to create new policies for this question
But both those policies use the app label. And the pod can’t have the same label with two values (I did try)
Though thinking about it now, and after a few checks, the NetworkPolicy object describes how to restrict traffic to the pods in question — so those selectors may be related to the pods the policy is restricting. I think I should have looked inside the policies more carefully to see what it was saying on the ingress rule and see if it was saying something like “app:frontend”, and then making sure the pod was labelled accordingly.
“Ambassador” Sidecar Pattern
A big chunk of the exam time was taken up by the sidecar questions — far more time than I would have liked, to be honest.
They had a question on adaptor, using fluentd, which was fine, I got that to work, but also had another where I had to use HAProxy to proxy requests do a different port (ambassador pattern). A useful use case, but I ran out of time to finish it. I wanted to come back and revisit it if I had time, but didn’t.
Terminate a cronjob if it lasts longer than 17 seconds. There’s a startup deadline but not a duration deadline. It could be implemented within the command of the application itself, or by specifying to replace any previous running version of the jobs.
I don’t think I passed this, having so many issues is probably going to take me into the 60s mark.