CKA Note Section 13 Troubleshooting
Contents
235. Application Failure
厚,debug 到眼睛快脫窗
- 先開 App Web 頁面查看錯誤訊息 (不確定正式考試時網頁是不是也設計成顯示錯誤訊息),判斷可能出問題的地方
- 第一題網頁能開判斷 Web pod + service => 無問題,網頁顯示
-2 Name does not resolve
=> 連不到 DB => 往mysql-service
“DNS name” 查找 - 第二題一樣,網頁顯示
111 Connection refused
=>
(1) 拒絕 => DB credential 有問題 => 要嘛在 Web pod env 不然就是 db pod env
(2)svc
port 號OR
selector 錯誤OR
pod 身上 port 錯誤 - 第三題 網頁直接打不開啊! => 等待時間先去查 web svc =>
curl http://<svc_IP>:<port>
(1) 後來噴出 504 Gateway Error => 5xx 系列 server 內部問題 => 都要查! (包含 web svc)槓(2)k get all -o wide
先看一下能不能看出端倪,果然看到selector:name=sql00001
=>k get pod mysql --show-labels
- 第四題 env
DB_User
不符合題目要求。 - 第五題 兩個 issue,第一個承上題。
Access denied for user 'root'@'10.42.0.20' (using password: YES)
=> 這 error 是 DB 噴的代表 DB svc 沒問題 - 第六題 三個 issue
(1)web-service
NodePort
錯誤
(2) envDB_User
錯誤
▲ 使用 k get all -o wide
顯示的 svc ports 欄位格式是 <svc_port>:<NodePort>
,後者並不是 <targetPort>
!!
239. Practice Test - Control Plane Failure
- 基本上都能從
/etc/kubernetes/manifest/
底下的 static pod yaml conf 去做除錯 k describe pod
、k logs
打天下- 最後一台比較有趣,卡了一下~ host OS path 身上有
ca.crt
但 logs 顯示 no such file => mount 出問題
241. Worker Node Failure
▲ worker node 的茶包射手預備姿勢。六發裝子彈 裝子彈送上槍機 LastHeartbeatTime 可以看最後狀態時間
▲ 使用 openssl x509 -in <.crt> -text
查看 kubelet
的證書是否過期,或者 journalctl -f -u kubelet.service
查看 service 的 log。
kubelet
有兩個 config
/var/lib/kubelet/config.yaml
/etc/kubernetes/kubelet.conf
▲ kubelet daemond 使用的 config file
▲ kubelet 去跟 api-server 溝通用的 kubeconf
▲ journalctl -f -u kubelet.service
可以查 daemond log (-f
,fallow)
問問筆記
|
|
自問自答
- 位於
/var/lib
的是 kubelet system daemond 吃的 config。 etc
底下的是 kubeconfig,跟 api-server 溝通用的,所以跟~/.kube/config
一樣很正常。
debug 方向就是
1. daemond running good 但 kubectl get node 看到節點是死的 => 找跟 api-server 溝通的 kubeconfig
2. daemond not running => 找 /var/lib
daemond 自身的 config
244. Network Troubleshooting
- CKA 考試當中不會要你背如何安裝 CNI plugin (有考會給指示)
那我 Networking 那章在忙什麼 還專程去找/更新書籤
CoreDNS
pod
與service
越多,CoreDNS 的負擔就會越重,尤其 memory 是 QPS 效能指標。- CoreDNS 會需要以下 K8s resources:
(1) aservice account
named coredns
(2)cluster-roles
named coredns and kube-dns
(3)clusterrolebindings
named coredns and kube-dns
(4) adeployment
named coredns
(5) aconfigmap
named coredns
(6)service
named kube-dns
如果你看到 CoreDNS pod 處於 pending => 檢查 CNI plugin 是否安裝, CrashLoopBackOff or Error state =>
(1) 關閉 SELinux (2) Modify the coredns deployment to set allowPrivilegeEscalation to true
(不考) 248. Advanced Kubectl Commands
▲ 透過 -o=jsonpath '{PATH1}{"\t"}{PATH2}'
來達到客製化 kubectl
output。
▲ 如果想顯示成右邊的格式,就需要用到 range
,可以把它當成 Foreach 使用。
▲ 或者使用 -o=custom-columns
來達成相同效果。
▲ 想要排序的話可以使用 --sort-by=<JSON PATH>
。
Author
LastMod 2022-08-03 (13ba6cd)