CKA 认证考试必过技巧分享
什么是CKA考試?
CKA (Certified Kubernetes Administrator) 考試是一種遠(yuǎn)程在線、有監(jiān)考、基于實操的認(rèn)證考試,需要在運行Kubernetes的命令行中解決多個任務(wù)。CKA認(rèn)證考試是專為Kubernetes管理員、云管理員和其他管理Kubernetes實例的IT專業(yè)人員而設(shè)的。已獲得認(rèn)證的K8s管理員具備了進(jìn)行基本安裝以及配置和管理生產(chǎn)級Kubernetes集群的能力。
考CKA有什么用?
考試內(nèi)容
通過考試后您將會獲得由Linux基金會和云原生計算基金會(CNCF)頒發(fā)的CKA (Certified Kubernetes Administrator)證書,如下:
考試規(guī)則
考試模式:線上考試
考試時間:2小時
認(rèn)證有效期:3年
軟件版本:Kubernetes v1.24
重考政策:可接受1次重考
經(jīng)驗水平:中級
考試過程中你的PC機(jī)是可以通過瀏覽器訪問Kubernetes官網(wǎng)的,這一點很重要,相當(dāng)于“開卷考試”,所以沒事多看看官網(wǎng)文檔很重要!知道考試內(nèi)容在哪里,學(xué)會關(guān)鍵詞搜索。
https://kubernetes.io/zh-cn/docs/home/
更多關(guān)于考試的詳細(xì)內(nèi)容可以前往linuxfoundation社區(qū)官網(wǎng)查看
https://training.linuxfoundation.cn/certificates/1
考試技巧
1. 別名設(shè)置
考試多半是通過命令行直接操作,已到達(dá)考試目標(biāo),頻繁的命令不僅容易出錯而且比較占用時間,2小時很寶貴!通過別名來偷個懶吧!
vi ~/.bashrc --- alias k='kubectl' alias kg='k get' alias kd='k describe' alias kl='k logs' alias kc='k create' source <(kubectl completion bash) source <(kubectl completion bash | sed 's/kubectl/k/g' ) complete -F __start_kubectl k ---2. 資源簡稱-SHORTNAMES
下面只是列舉了部分比較常見的資源,因為k8s資源很多,像查看更多的話,可以執(zhí)行 kubectl api-resources 命令來查看,表格中的簡稱一定要記住!尤其是英文不好的同學(xué)。
3. 學(xué)會看文檔
記住“這是一場開卷考試”,所以不要想著死記硬背那一堆yaml文件,學(xué)會使用搜索,這將事半功倍,例如:想要知道deployment里面有哪些可以配置的字段,直接在官網(wǎng)文檔搜索 deployment 即可,而且支持中文,考試中讓你創(chuàng)建一個 deployment,你完全可以把 yaml 粘貼過去,通過 vi 命令編輯一些名稱和docker image 即可,到這是不是感覺離通過考試又進(jìn)了一步!
4. Help大法好
學(xué)會 kubectl xxx --help,會有不一樣的驚喜。
5.牢記pod的狀態(tài)
在k8s集群中,我們創(chuàng)建最多的資源應(yīng)該就是pod了,因為這直接關(guān)系到我們的服務(wù)是否正常,了解pod不同狀態(tài)所代表的含義是更加有利于幫助我們排查問題
考試練習(xí)
集群安裝
平時學(xué)習(xí)、練習(xí)時是可以用kubeadm去安裝集群,目前這是官方比較推薦的方式。
1) 初始化集群
kubeadm init --kubernetes-version 1.24 \--pod-network-cidr=172.16.0.0/16 \ --apiserver-advertise-address=167.235.78.1912) 添加節(jié)點
kubeadm join 192.168.1.253:6443 --token ptildy.2nyolwhkd8g1p8pq \--discovery-token-ca-cert-hash sha256:581214693222568860b1887121aab546b87f6fbfc1342d4092aa18601b2c27c33) 維護(hù)、移除節(jié)點
cordon 將節(jié)點標(biāo)記為不可調(diào)度 drain 節(jié)點準(zhǔn)備維護(hù),將有問題的node中的pod遷移到其他正常的node上 taint 更新一個或多個節(jié)點上的錯誤4) 恢復(fù)節(jié)點
uncordon 將節(jié)點標(biāo)記為可調(diào)度工作負(fù)載:
1) Deployment(無狀態(tài)應(yīng)用)
是kubernetes在1.2版本中引入的概念,用于更好的解決Pod的編排問題,Deployment在內(nèi)部使用了ReplicaSet來實現(xiàn)目的,我們可以把Deployment理解為ReplicaSet的一次升級,兩者的相似度超過90%。
apiVersion: apps/v1 kind: Deployment metadata:name: nginx-deploymentlabels:app: nginx spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 802) StatefulSet(有狀態(tài)應(yīng)用)
和 Deployment 類似, StatefulSet 管理基于相同容器規(guī)約的一組 Pod。但和 Deployment 不同的是, StatefulSet 為它們的每個 Pod 維護(hù)了一個有粘性的 ID。這些 Pod 是基于相同的規(guī)約來創(chuàng)建的, 但是不能相互替換:無論怎么調(diào)度,每個 Pod 都有一個永久不變的 ID。
apiVersion: v1 kind: Service metadata:name: nginxlabels:app: nginx spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata:name: web spec:selector:matchLabels:app: nginx # 必須匹配 .spec.template.metadata.labelsserviceName: "nginx"replicas: 3 # 默認(rèn)值是 1minReadySeconds: 10 # 默認(rèn)值是 0template:metadata:labels:app: nginx # 必須匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- name: nginximage: registry.k8s.io/nginx-slim:0.8ports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "my-storage-class"resources:requests:storage: 1G3) DaemonSet
守護(hù)進(jìn)程,DaemonSet會在每個k8s 節(jié)點運行一個pod,當(dāng)有節(jié)點加入集群時, 也會為他們新增一個 Pod 。當(dāng)有節(jié)點從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創(chuàng)建的所有 Pod。比如:Prometheus監(jiān)控、日志收集的系統(tǒng)都需要
apiVersion: apps/v1 kind: DaemonSet metadata:name: fluentd-elasticsearchnamespace: kube-systemlabels:k8s-app: fluentd-logging spec:selector:matchLabels:name: fluentd-elasticsearchtemplate:metadata:labels:name: fluentd-elasticsearchspec:tolerations:# 這些容忍度設(shè)置是為了讓該守護(hù)進(jìn)程集在控制平面節(jié)點上運行# 如果你不希望自己的控制平面節(jié)點運行 Pod,可以刪除它們- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedule- key: node-role.kubernetes.io/masteroperator: Existseffect: NoSchedulecontainers:- name: fluentd-elasticsearchimage: quay.io/fluentd_elasticsearch/fluentd:v2.5.2resources:limits:memory: 200Mirequests:cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/logterminationGracePeriodSeconds: 30volumes:- name: varloghostPath:path: /var/log4) Job
任務(wù),通常任務(wù)是臨時性的,Job 會創(chuàng)建一個或者多個 Pod,Pod中的程序計算完成后會自動終止
apiVersion: batch/v1 kind: Job metadata:name: pi spec:template:spec:containers:- name: piimage: perl:5.34.0command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4服務(wù)和網(wǎng)絡(luò):
1) service
將運行在一組 Pods上的應(yīng)用程序公開為網(wǎng)絡(luò)服務(wù)的抽象方法。簡單來說就是起到一個自動注冊和對集群內(nèi)部服務(wù)訪問的作用。試想一下因為pod重建后IP都會變,想要被其他服務(wù)一直被訪問不太現(xiàn)實,而且多個pod副本難道自己要搭建一個負(fù)載均衡,然后還要考慮pod怎么注冊進(jìn)來?不需要!這就是 service 干的活兒。
通過 selector 可以選擇這個 service 后端的服務(wù)是什么,類似配置SLB負(fù)載均衡的Backend
apiVersion: v1 kind: Service metadata:name: my-service spec:selector:app.kubernetes.io/name: MyAppports:- protocol: TCPport: 80targetPort: 93762) ingress
提供將集群內(nèi)部服務(wù)暴露到外部的能力,簡單理解就是起到一個負(fù)載均衡器的作用,目前開源的ingress有 nginx-ingress、traefik,商用的F5、A10都有
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: minimal-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: / spec:ingressClassName: nginxrules:- http:paths:- path: /apppathType: Prefixbackend:service:name: my-appport:number: 80存儲
1) 持久卷(Persistent Volume)
簡稱 PV,PV是集群中的一塊存儲,可以由管理員事先制備, 或者使用存儲類(Storage Class)來動態(tài)制備。持久卷是集群資源,就像節(jié)點也是集群資源一樣。PV 持久卷和普通的 Volume 一樣, 也是使用卷插件來實現(xiàn)的,只是它們擁有獨立于任何使用 PV 的 Pod 的生命周期。此 API 對象中記述了存儲的實現(xiàn)細(xì)節(jié),無論其背后是 NFS、iSCSI 還是特定于云平臺的存儲系統(tǒng)
apiVersion: v1 kind: PersistentVolume metadata:name: foo-pv spec:storageClassName: ""claimRef:name: foo-pvcnamespace: foo2) 持久卷申領(lǐng)(PersistentVolumeClaim)
簡稱PVC,PVC 表達(dá)的是用戶對存儲的請求。概念上與 Pod 類似。Pod 會耗用節(jié)點資源,而 PVC 申領(lǐng)會耗用 PV 資源。Pod 可以請求特定數(shù)量的資源(CPU 和內(nèi)存);同樣 PVC 申領(lǐng)也可以請求特定的大小和訪問模式 (例如,可以要求 PV 卷能夠以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一來掛載
kind: PersistentVolumeClaim apiVersion: v1 metadata:name: test-claimannotations:volume.beta.kubernetes.io/storage-class: "nfs" spec:storageClassName: "nfs"accessModes:- ReadWriteManyresources:requests:storage: 10Gi3) 存儲類 (storageClass)
簡稱SC,通過SC不需要管理員單獨去創(chuàng)建PV,普通用于只需要根據(jù)需要指定用哪個SC,然后在PVC中指定存儲卷大小就可以自動申請下來存儲卷
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: nfs provisioner: fuseim.pri/ifs parameters:archiveOnDelete: "true" reclaimPolicy: Retain4) 存儲類型
emptyDir: Pod 啟動時為空,存儲空間來自本地的 kubelet 根目錄(通常是根磁盤)或內(nèi)存,使用場景:如果Pod被刪除,那么數(shù)據(jù)也會被刪除,不具備持久化。Pod內(nèi)的容器,需要共享數(shù)據(jù)卷的時候,使用的臨時數(shù)據(jù)卷。
hostpath:直接掛載主機(jī)目錄, 如果需要通過容器直接讀取宿主機(jī)磁盤中的內(nèi)容,那么可以通過掛載hostpath 的卷實現(xiàn)
故障排除
1) 常用工具
kubectl describe: 當(dāng)任何資源沒有進(jìn)入一個正常狀態(tài)的時候,都可以通過kubectl describe查看這個資產(chǎn)的事件信息
kubectl logs:這個命令主要對于pod資源使用,當(dāng)pod 進(jìn)入 running 狀態(tài)后,服務(wù)已經(jīng)有問題,這時候可能程序里面有報錯,可以使用 kubectl logs 查看pod中應(yīng)用的具體日志
2) 網(wǎng)絡(luò)
遇到網(wǎng)絡(luò)問題可使用 ping 、mtr、telnet 等命令測試網(wǎng)絡(luò)連通性,判斷網(wǎng)絡(luò)故障點
總結(jié)
勤加練習(xí)是通過 CKA 考試的關(guān)鍵,本文只列舉了部分實操內(nèi)容,更多考試內(nèi)容以及詳細(xì)信息可以前往CNCF官網(wǎng)或Linux foundation查看,最后祝各位考試順利通過!
關(guān)于HummerRisk
HummerRisk 是開源的云原生安全平臺,以非侵入的方式對云原生環(huán)境進(jìn)行全面安全檢測。
針對于 K8s 容器云的安全,我們提供多方面的檢測能力,可以幫助用戶快速發(fā)現(xiàn)K8s集群中的各種安全問題。
歡迎關(guān)注我們了解更多。
GitHub - HummerRisk/HummerRisk: HummerRisk 是云原生安全平臺,包括混合云安全治理和容器云安全檢測。
總結(jié)
以上是生活随笔為你收集整理的CKA 认证考试必过技巧分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CKA考试Tips
- 下一篇: 用计算机作品装扮校园,童心向党艺绽放