แชร์ประสบการณ์เตรียมสอบ CKA และ CKAD (Kubernetes Certification)
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 ไว้ทุกช่องทางเลยนะครับ 🙏
- 💙 Facebook: Nopnithi Tech
- ❤️ YouTube: Nopnithi Tech
- 💙 LinkedIn: Nopnithi (Game) Khaokaew
ทำไมผมถึงสอบ 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
- คอร์ส Certified Kubernetes Administrator (CKA) with Practice Tests
- เสริมเนื้อหาบางส่วนด้วย Kubernetes documents
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
- Mock Exam จากคอร์ส Kubernetes Certified Application Developer (CKAD) with Tests มีทั้งหมด 2 ชุด ชุดละประมาณ 8–12 ข้อ
- ฝึกทำข้อสอบจาก exam simulator ของ killer.sh
วิธีการซื้อคอร์สที่ผมแนะนำให้ได้ราคาถูก
1. คลิกที่นี่เพื่อ apply ส่วนลด มันจะ redirect ไปที่เว็บ Udemy ครับ
2. คลิก Link ไปที่คอร์ส หากได้ราคาไม่เกิน 500 บาทครับก็ถือว่าโอเคครับ
- คอร์ส Kubernetes for the Absolute Beginners — Hands-on
- คอร์ส Certified Kubernetes Administrator (CKA) with Practice Tests
- คอร์ส Kubernetes Certified Application Developer (CKAD) with Tests
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)
ลิงค์สำคัญเกี่ยวกับการสอบ
- https://www.cncf.io/certification/cka/
- https://www.cncf.io/certification/ckad/
- FAQ
- Important Instructions
- Kubernetes Certification Curriculum
- Linux Foundation Candidate Handbook
สอบผ่าน 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 ไว้ทุกช่องทางเลยนะครับ 🙏
- 💙 Facebook: Nopnithi Tech
- ❤️ YouTube: Nopnithi Tech
- 💙 LinkedIn: Nopnithi (Game) Khaokaew