CKA Practice Exam Notes

1. Create an HPA

Node: cluster1-controlplane

Create an HPA named frontend-deployment:

kubectl autoscale deployment frontend-deployment \
--cpu-percent=70 \
--min=2 \
--max=10

2. Update ClusterRole Permissions

kubectl edit clusterrole green-role-cka22-arch

Add:

- apiGroups:
  - "*"
  resources:
  - namespaces
  verbs:
  - get

Verify:

kubectl auth can-i get namespaces \
--as=system:serviceaccount:default:green-sa-cka22-arch

Expected Output: yes

3. Deployment Desired Count ≠ Current Count

Node: cluster4-controlplane

ssh cluster4-controlplane
kubectl get deployment

Check kube-controller-manager:

kubectl get pods -n kube-system

View events:

kubectl get event \
--field-selector involvedObject.name=kube-controller-manager-cluster4-controlplane \
-n kube-system

Error found:

exec: "kube-controller-manage":
executable file not found in $PATH

Fix manifest:

vi /etc/kubernetes/manifests/kube-controller-manager.yaml

Change:

kube-controller-manage

To:

kube-controller-manager

Restart pod:

kubectl delete pod kube-controller-manager-cluster4-controlplane \
-n kube-system

Verify:

kubectl get deployment

CURRENT count should match DESIRED count.

4. Resize PVC

Node: cluster1-controlplane

Export PV:

kubectl get pv papaya-pv-cka09-str -o yaml \
> /tmp/papaya-pv-cka09-str.yaml

Remove:

uid:
annotations:
status:
claimRef:

Export PVC:

kubectl get pvc papaya-pvc-cka09-str -o yaml \
> /tmp/papaya-pvc-cka09-str.yaml

Change:

storage: 50Mi

To:

storage: 80Mi

Recreate resources:

kubectl delete pvc papaya-pvc-cka09-str
kubectl delete pv papaya-pv-cka09-str

kubectl apply -f /tmp/papaya-pv-cka09-str.yaml
kubectl apply -f /tmp/papaya-pvc-cka09-str.yaml

Exam Tip: Always verify PVC returns to Bound state.

5. Fix Helm Chart and Deploy

Node: cluster2-controlplane

ssh cluster2-controlplane

Verify namespace:

kubectl get ns
kubectl create ns frontend-apd

Update Chart.yaml:

appVersion: 1.20.0

Update values.yaml:

replicaCount: 3
type: NodePort

Lint chart:

helm lint /opt/webapp-color-apd/

Fix template issues:

Install chart:

helm install webapp-color-apd \
-n frontend-apd \
/opt/webapp-color-apd

Verify:

helm ls -n frontend-apd

6. Create Gateway API HTTPRoute

Node: cluster2-controlplane

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: web-route
  namespace: nginx-gateway
spec:
  hostnames:
  - cluster2-controlplane
  parentRefs:
  - name: web-gateway
  rules:
  - backendRefs:
    - name: web-service
      port: 80

Test:

curl http://cluster2-controlplane:30080

7. DNS Resolution Lab

Node: cluster1-controlplane

Create pod:

kubectl run nginx-resolver-cka06-svcn \
--image=nginx

Create service:

kubectl expose pod nginx-resolver-cka06-svcn \
--name=nginx-resolver-service-cka06-svcn \
--port=80 \
--target-port=80 \
--type=ClusterIP

Test service DNS:

kubectl run test-nslookup \
--image=busybox:1.28 \
--rm -it --restart=Never \
-- nslookup nginx-resolver-service-cka06-svcn \
> /root/CKA/nginx.svc.cka06.svcn

Get pod DNS:

IP=$(kubectl get pod nginx-resolver-cka06-svcn \
-o wide --no-headers | awk '{print $6}' | tr '.' '-')

Test pod DNS:

kubectl run test-nslookup \
--image=busybox:1.28 \
--rm -it --restart=Never \
-- nslookup $IP.default.pod \
> /root/CKA/nginx.pod.cka06.svcn

8. Rolling Updates and Rollback

Create deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ocean-tv-wl09
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 40%
      maxSurge: 55%

Create deployment:

kubectl create -f deployment.yaml

Update image:

kubectl set image deploy ocean-tv-wl09 \
webapp-color=kodekloud/webapp-color:v2

Check history:

kubectl rollout history deploy ocean-tv-wl09

Save revision count:

echo "2" > /opt/revision-count.txt

Rollback:

kubectl rollout undo deployment ocean-tv-wl09

Verify image:

kubectl describe deploy ocean-tv-wl09

Expected Image: kodekloud/webapp-color:v1