本文共分為倆部分kubernetes雙證考試感悟和具體報考流程
一 最近參加了kubernetes的雙證考試認證即CKA、CKS,總體感覺倆點
1 認證目的不是拿證而是學習知識點,單純的考試還是比較好考的 前提是相關的知識點已經掌握。
CKA的知識點包括RBAC授權,節點調度,升級版本,etcd備份與還原,網絡策略,svc應用,ingress應用,pod擴容,pod配置多個容器,pv/pvc使用
,獲取pop日志,增加收集日志容器
2 考試題目都是相同或者相類似的考試期間可以使用--help和官網文檔,考試全是實際上機操作題,感覺CNCF的主旨是想培養使用者的解決問題的能力。
二報考流程
大致流程:

第一步:賬號登錄 CKA+CKS雙證考試資格購買地址: https://training.linuxfoundation.org/certification/certified-kubernetes-securityspecialist 打開會有一個彈窗,點擊繼續英文站點,



第二步:下單交費


第三步:預約考試前檢查
支付成功后跳轉到儀表盤,如果沒跳轉可直接訪問儀表盤查看我的課程https://portal.linuxfoundation.org/portal 正常情況下會看到CKA和CKS認證課程及有效期,至此購買考試資格已經完成,等確定考試的時候再完成后續操作。


第四步:預約考試 完成上述六項打鈎后,點擊Schedule 預約考試:



第五步:考試環境檢查 環境檢查


預約完成,等待考試。 如果有事參加不了,要在考試前24小時且工作日內修改時間。 考試系統:https://www.examslocal.com
考前須知
考試形式
盡量提前10分鍾左右進入倒計時頁面(https://www.examslocal.com 點擊登錄->Or Sign In With->點擊按鈕 My Exams),等待出現進入考試系統的按鈕(考官到位會出現),剛開始考官會讓你出示證件,然后考官會讓你拿攝像頭環繞考試環境一周,確保房間無外人、桌面上沒雜物,然后考官會讓我們在考試系統里打開共享屏幕和攝像頭按鈕;最后考官會告訴我們一些注意事項,比如記事本功能,以及可以查閱哪些網站資料等等。考試過程中如有意外狀況,可以在線與考官交流(文字),並爭取你應有的權益;
開始需要出示證件,有護照最好,如果沒有可以使用身份證;如果有必要確認你的英文名可以用信用卡給他們看;
在線考試,考試系統國內訪問速度比較慢,需要一個穩定網絡環境(強烈建議考試時間約在早上,越早越好,因為早上網絡比較穩定,如果你的網絡訪問預約考試系統很慢,建議購買可FQ工具,我是早上6點考的沒有使用梯子網絡也是很好);
只允許打開兩個標簽頁,一個是考試系統,另一個建議打開官網文檔 https://kubernetes.io/zh/docs/home/,將官網相關參考資料保存好書簽,方便快速查找內容;
考試全部都是實操任務題,會給出多個 K8s 集群,要求你在指定集群完成指定的操作;
K8s集群環境采用ubuntu系統,不用擔心,會普通用戶執行sudo -i切root就行了,除了k8s升級版本這題用了apt軟件包管理執行安裝外,其他題操作都一樣
CKA
1RBAC授權
Kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployment,statefulset,daemonset
kubectl create -napp-team1 serviceaccount cicd-token
kubectl create rolebinding cicd-token -napp-team1 --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
2節點設置不可用
kubectl drain master-k8s --ignore-daemonsets
3升級版本
apt-get install -y kubeadm=1.20.1-00
kubectl drain master-k8s --ignore-daemonsets
kubectl upgrade plan
kubectl upgrade apply kubeadm=1.20.1-00
apt-get install -y kubectl=1.20.1-00 kubelet=1.20.1-00 --etcd-upgrade=false
systemctl restart kubele
kubectl uncordon master-k8s
kubectl get node
4etcd備份與恢復
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-clent.crt --key=/opt/KUIN00601/etcd-clent.key \
snapshot save /data/backup/etcd-snapshot.db
systemctl stop etcd
ps -ef |grep etcd
mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcdback
ETCDCTL_API=3 etcdctl --data-dir /data/backup/etcd-snapshot-previous.db snapshot restore snapshotdb
chown -R etcd:etcd /var/lib/etcd/default.etcd
systemctl start etcd
5 網絡策略
kubectl lable namepace big-corp name=big-corp
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-namespace
namespace: my-app
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: big-corp
ports:
- protocol: TCP
port: 8080
6SVC暴露應用
kubectl edit deployment front-end
ports:
- name: http
protocol: TCP
containerPort: 80
kubectl expose deployment front-end --port=80 --target-port=80 --type=NodePort --name=front-end-svc
7Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pond
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
8擴容Pod數量
kubectl scale deployment loadbalancer --replicas=5
9nodeSelector
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
disk: ssd
10統計准備就緒節點數量
kubectl get nodes
kubectl describe node |grep Taint
11Pod配置多容器
apiVersion: v1
kind: Pod
metadata:
name: kucc4
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
- name: memcache
image: memcache
12創建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-data
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/svc/app-data"
13 Pod使用PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-volume
spec:
storageClassName: csi-hostpath-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
volumes:
- name: pv-volume
persistentVolumeClaim:
claimName: pv-volume
containers:
- name: web-server
image: nginx
ports:
- containerPort: 80
name: "web-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pv-volume
kubectl edit pvc pv-volume --save-config
14獲取Pod錯誤日志
kubectc logs pod bar |grep file-not-found >/opt/KUTR00101/bar
15給Pod增加一個容器(邊車)
kubectl get pod legacy-app -o yaml >sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
name: legacy-app
spec:
containers:
- name: legacy-app
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/legacy-app.log;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: sidecar
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
16統計使用CPU最高的Pod
kubectl top pod -l name=cup-utilizer --sort-by='cpu' -A
echo "podname" >>/opt/KUR00401.txt
17 節點NotReady處理
kubectl config use-context wk8s
ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet
