แชร์ประสบการณ์เตรียมสอบ CKA และ CKAD (Kubernetes Certification)

Nopnithi Khaokaew (Game)
5 min readJul 13, 2021

--

Update: 19 July 2021

สวัสดีครับทุกคน 🙏 ผมกำลังเริ่มทำ Facebook Page และ YouTube Channel ซึ่งจะแชร์เรื่อง cloud, infrastructure as code (IaC), automation/DevOps, programming, generative AI และอื่น ๆ ตามอารมณ์ 😅

และตั้งใจจะทำวิดีโอสอนพื้นฐาน(ยัน advanced)ฟรีตั้งแต่ AWS ไล่มา Git, Linux, networking, Terraform, Docker, Kubernetes, Python, Go, etc. ไม่ครบไม่เลิกทำ 😂

รบกวนทุกคนกด Follow/Subscribe ไว้ทุกช่องทางเลยนะครับ 🙏

ทำไมผมถึงสอบ CKA และ CKAD

  • เรียน Kubernetes อย่างมีแบบแผน (ผมไม่ชอบทำอะไรแบบซุย ๆ ขอไปที 😂)
  • เนื้อหาของ CKA อย่างเดียวไม่พอ เพราะมีบางหัวข้ออยู่ใน CKAD และถ้าสอบ CKAD อย่างเดียวก็ยังขาดเรื่อง underlying infrastructure อีกพอสมควร

ความแตกต่างระหว่าง CKA และ CKAD

  • CKA ครอบคลุมเนื้อหากว้างกว่า ส่วน CKAD เป็นเหมือน subset ของ CKA อีกที
  • ด้วยเวลาสอบเท่ากัน CKAD จึงเพิ่มความเข้มข้นของการทดสอบเพื่อเน้นในส่วนของ application deployment (แต่ก็ไม่ได้ยากอะไรครับ)
  • ตัวไหนยากกว่า? ผมว่า CKA ยากกว่าครับ

ถ้าจะสอบแค่ใบเดียว ควรเลือกตัวไหน?

  • ถ้าคุณเป็นทีม infra/operations → CKA
  • ถ้าคุณเป็นทีม developer → CKAD
  • ถ้าคุณเป็นทีม DevOps → CKA หรือ CKAD (ลองดู platform อีกที)

หรือจริง ๆ ให้ยึดตาม Kubernetes platform ดีกว่าครับ

  • ถ้าบริษัทขึ้น Kubernetes cluster เอง → CKA
  • แต่ถ้าใช้ managed Kubernetes service เช่น EKS, AKS, GKE → CKAD

ค่าสอบ CKA/CKAD เท่าไร?

  • ตอนผมสอบ $300 (ล่าสุดขึ้นเป็น $375 → $395 แล้ว)
  • พยายามหา discount code ให้ได้ครับ ซื้อแล้วไม่จำเป็นต้องสอบเลย มีเวลาหนึ่งปีนับจากวันซื้อที่จะ schedule exam
  • ผมซื้อ bundle แบบ CKA + CKAD ในช่วง black friday ปลายปี 2020 สรุปแล้วเหลือใบละ 5,500 บาท (รวม training จาก Linux Foundation ด้วย)

พูดถึงข้อสอบ Kubernetes

  • ข้อสอบ Kubernetes เป็น performance-based exam
  • เน้นทำจริง เน้นปฏิบัติเพื่อแก้ปัญหาจากโจทย์
  • แต่ละข้อจะมี scenario มาให้เราทำเป็น task ย่อย
  • อนุญาตให้เปิด Kubernetes documents ระหว่างการสอบได้
  • ใช้เวลาเป็นตัวบีบเรา ซึ่งถ้าไม่เข้าใจและมัวมานั่งหาก็จะทำไม่ทัน

เราต้องเข้าใจ concept และต้องเร็วด้วย ผมจึงมองว่าควรเน้นทำ lab ให้มาก และเป็นข้อสอบในแบบที่ผมชอบมากกว่า IT certification ของเจ้าอื่น ๆ เพราะรู้สึกว่ามัน practical และคล้ายคลึงกับชีวิตการทำงานจริงมากกว่า

การเตรียมตัวสอบ CKA และ CKAD

1. เรียนพื้นฐาน Kubernetes (ทั้ง CKA และ CKAD)

2. เรียนทฤษฎี CKA

3. ฝึกทำ Practice Test ของ CKA

  • Mock Exam จากคอร์ส Certified Kubernetes Administrator (CKA) with Practice Tests มีทั้งหมด 3 ชุด ชุดละประมาณ 8–12 ข้อ
  • สำคัญที่สุดคือฝึกทำข้อสอบจาก killer.sh ซึ่งโจทย์จะยากกว่าข้อสอบจริง แต่มี environment ในการสอบคล้ายของจริงที่สุด ตัวนี้เราจะได้ฟรีมา 2 เซสชั่นพร้อมกับที่เราซื้อ exam ครับ (ต้องทำท่าจะ schedule exam ก่อนจึงจะเห็น)
  • Practice exam ของ A Cloud Guru จะมีทั้งหมด 10 ชุด ชุดละประมาณ 3–5 ข้อย่อย (เป็น optional ละกัน)

4. เรียนทฤษฎี CKAD

  • คอร์ส Kubernetes Certified Application Developer (CKAD) with Tests
  • แต่ผมเรียนและสอบ CKA ก่อน ซึ่งเนื้อหาจาก CKA แทบจะครอบคลุม CKAD มิดอยู่แล้ว ดังนั้นผมจึงมาเรียนเพิ่มอีกนิดหน่อย ได้แก่ (ตกเรื่องไหนไปขออภัยด้วย)
- Liveness probes และ Readiness probes
- StatefulSets
- Jobs และ Cronjob
  • เสริมเนื้อหาบางส่วนด้วย Kubernetes documents เช่นเคย

5. ฝึกทำ Practice Test ของ CKAD

วิธีการซื้อคอร์สที่ผมแนะนำให้ได้ราคาถูก

1. คลิกที่นี่เพื่อ apply ส่วนลด มันจะ redirect ไปที่เว็บ Udemy ครับ

2. คลิก Link ไปที่คอร์ส หากได้ราคาไม่เกิน 500 บาทครับก็ถือว่าโอเคครับ

3. ดำเนินการซื้อตามระบบของ Udemy เลยครับ ใช้บัตรเครดิตในการจ่ายเงิน

รวม Tips ที่ผมใช้ในการสอบ CKA และ CKAD

  • เซ็ต auto completion และ alias ใน terminal
echo 'source <(kubectl completion bash)' >>~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc
source ~/.bashrc
  • ใช้ kubectl ช่วยสร้าง Kubernetes object เสมอ เช่น
k8s@terminal:~$ k run my-pod --image=nginx:alpine -n project-dog $do > pod.yaml# ไฟล์ pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: my-pod
environment: test # ใส่เพิ่ม
name: my-pod
namespace: project-dog
spec:
containers:
- image: nginx:alpine
name: my-pod
- image: busybox:1.31 # ใส่เพิ่ม
name: c2 # ใส่เพิ่ม
command: ["sh", "-c", "sleep 1d"] # ใส่เพิ่ม

resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
k8s@terminal:~$ k create -f pod.yaml
pod/my-pod created
  • ใช้ตัวอย่างจาก -h ในการเขียน kubectl command เช่น
k8s@terminal:~$ k create role -h
Create a role with single rule.
Examples:
# Create a Role named "pod-reader" that allows user to perform "get", "watch" and "list" on pods
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

# Create a Role named "pod-reader" with ResourceName specified
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

# Create a Role named "foo" with API Group specified
kubectl create role foo --verb=get,list,watch --resource=rs.extensions

# Create a Role named "foo" with SubResource specified
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status
...
<output omitted>
  • พยายามใช้ | grep ช่วยในการ filter คำตอบ
# นับบรรทัด เช่น นับจำนวน pod
k get pods --no-headers | wc -l
8
# ดู certificate และ key ของ ETCD
root@cluster1-master1:~# cat /etc/kubernetes/manifests/etcd.yaml | grep crt
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
root@cluster1-master1:~# cat /etc/kubernetes/manifests/etcd.yaml | grep key
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
# ดู labels ของ node (นอกจากใช้ --show-labels)
k8s@terminal:~$ k describe nodes cluster1-master1 | grep -i labels -A10
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=cluster1-master1
kubernetes.io/os=linux
node-role.kubernetes.io/control-plane=
node-role.kubernetes.io/master=
node.kubernetes.io/exclude-from-external-load-balancers=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
# ดู IP CIDR ของ service
root@cluster1-master1:~# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep service-cluster
- --service-cluster-ip-range=10.96.0.0/12
  • ดู label ให้ใส่ --show-labels แทนการใช้ kubectl describe
k get pods --show-labels 
NAME READY STATUS RESTARTS AGE LABELS
am-i-ready 1/1 Running 0 6h8m id=cross-server-ready
multi-container-playground 3/3 Running 0 5h36m run=multi-container-playground
pod1 1/1 Running 0 6h12m run=pod1
ready-if-service-ready 1/1 Running 0 6h9m run=ready-if-service-ready
special 0/1 Pending 0 67d run=special
web-test-6c77dcfbc-gx4g9 1/1 Running 0 67d id=web-test,pod-template-hash=6c77dcfbc
web-test-6c77dcfbc-mklkf 1/1 Running 0 67d id=web-test,pod-template-hash=6c77dcfbc
web-test-6c77dcfbc-rslcd 1/1 Running 0 67d id=web-test,pod-template-hash=6c77dcfbc
  • ใช้ alias สำหรับ object ใน kubectl
Pods = po
ReplicaSets = rs
Deployments = deploy
Services = svc
Namespaces = ns
Network Policies = netpol
Persistent Volumes = pv
PersistentVolumeClaims = pvc
Service Accounts = sa
  • ทำ bookmark แต่ละหน้าใน Kubernetes documents ด้วยตัวเอง (ใช้เปิดตอนสอบ) ทำไปให้ถึง configuration example เลย
  • ตอนฝึกทำ practice test หรือ mock exam อย่าเปิดดู training slide ให้พยายามเปิด Kubernetes documents แทนเพื่อให้คุ้นมือ
  • อย่าแก้ไฟล์ YAML ด้วย vi เลย แปะใน text editor แล้วแก้เอาเร็วกว่า (คงแล้วแต่คน)
  • ถ้ามีพื้นฐานของ vi/vim, Linux และ Docker ที่ดีจะพอช่วยได้บ้าง
  • ติดข้อไหนให้ข้ามไปก่อนเดี๋ยวค่อยย้อนกลับมา เพราะมันมีทั้งข้อง่ายและยากสลับกันไป คะแนนผ่านคือ 66% (ก.ค. 2021)
  • ตอนสอบใช้ 2 จอ (monitor) ได้ จะได้เปิด docs สะดวก
  • ถ้าเวลาเหลืออย่าลืม verify คำตอบอีกรอบ
  • อย่าไปกังวลมาก ถ้าตกก็กลับมาทวนแล้วสอบอีกรอบได้ (free re-take)

ลิงค์สำคัญเกี่ยวกับการสอบ

สอบผ่าน CKA หรือ CKAD แล้วควรทำอะไรต่อ?

  • สำหรับผม Kubernetes certification เป็นแค่ก้าวแรก
  • ศึกษาเกี่ยวกับ Kubernetes platform ต่อ เช่น EKS (AWS), GKE (Google) และอื่น ๆ หรือจะเป็น OpenShift, Rancher หรือ Tanzu สำหรับ on-premise
  • ศึกษาเกี่ยวกับ Helm / Kustomize
  • ศึกษาเกี่ยวกับ autoscaler ได้แก่ horizontal pod, vertical pod และ cluster
  • ศึกษาเกี่ยวกับ service mesh เช่น Istio
  • ศึกษาเกี่ยวกับ EFK stack (ElasticSearch, Fluentd, Kibana) สำหรับเรื่อง logging และ Prometheus + Grafana สำหรับ monitoring

อย่าลืมนะครับ รบกวนทุกคนกด Follow/Subscribe ไว้ทุกช่องทางเลยนะครับ 🙏

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.

Responses (1)