CKA 认证考试必过技巧分享
什么是CKA考試?
CKA (Certified Kubernetes Administrator) 考試是一種遠程在線、有監考、基于實操的認證考試,需要在運行Kubernetes的命令行中解決多個任務。CKA認證考試是專為Kubernetes管理員、云管理員和其他管理Kubernetes實例的IT專業人員而設的。已獲得認證的K8s管理員具備了進行基本安裝以及配置和管理生產級Kubernetes集群的能力。
考CKA有什么用?
考試內容
通過考試后您將會獲得由Linux基金會和云原生計算基金會(CNCF)頒發的CKA (Certified Kubernetes Administrator)證書,如下:
考試規則
考試模式:線上考試
考試時間:2小時
認證有效期:3年
軟件版本:Kubernetes v1.24
重考政策:可接受1次重考
經驗水平:中級
考試過程中你的PC機是可以通過瀏覽器訪問Kubernetes官網的,這一點很重要,相當于“開卷考試”,所以沒事多看看官網文檔很重要!知道考試內容在哪里,學會關鍵詞搜索。
https://kubernetes.io/zh-cn/docs/home/
更多關于考試的詳細內容可以前往linuxfoundation社區官網查看
https://training.linuxfoundation.cn/certificates/1
考試技巧
1. 別名設置
考試多半是通過命令行直接操作,已到達考試目標,頻繁的命令不僅容易出錯而且比較占用時間,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資源很多,像查看更多的話,可以執行 kubectl api-resources 命令來查看,表格中的簡稱一定要記住!尤其是英文不好的同學。
3. 學會看文檔
記住“這是一場開卷考試”,所以不要想著死記硬背那一堆yaml文件,學會使用搜索,這將事半功倍,例如:想要知道deployment里面有哪些可以配置的字段,直接在官網文檔搜索 deployment 即可,而且支持中文,考試中讓你創建一個 deployment,你完全可以把 yaml 粘貼過去,通過 vi 命令編輯一些名稱和docker image 即可,到這是不是感覺離通過考試又進了一步!
4. Help大法好
學會 kubectl xxx --help,會有不一樣的驚喜。
5.牢記pod的狀態
在k8s集群中,我們創建最多的資源應該就是pod了,因為這直接關系到我們的服務是否正常,了解pod不同狀態所代表的含義是更加有利于幫助我們排查問題
考試練習
集群安裝
平時學習、練習時是可以用kubeadm去安裝集群,目前這是官方比較推薦的方式。
1) 初始化集群
kubeadm init --kubernetes-version 1.24 \--pod-network-cidr=172.16.0.0/16 \ --apiserver-advertise-address=167.235.78.1912) 添加節點
kubeadm join 192.168.1.253:6443 --token ptildy.2nyolwhkd8g1p8pq \--discovery-token-ca-cert-hash sha256:581214693222568860b1887121aab546b87f6fbfc1342d4092aa18601b2c27c33) 維護、移除節點
cordon 將節點標記為不可調度 drain 節點準備維護,將有問題的node中的pod遷移到其他正常的node上 taint 更新一個或多個節點上的錯誤4) 恢復節點
uncordon 將節點標記為可調度工作負載:
1) Deployment(無狀態應用)
是kubernetes在1.2版本中引入的概念,用于更好的解決Pod的編排問題,Deployment在內部使用了ReplicaSet來實現目的,我們可以把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(有狀態應用)
和 Deployment 類似, StatefulSet 管理基于相同容器規約的一組 Pod。但和 Deployment 不同的是, StatefulSet 為它們的每個 Pod 維護了一個有粘性的 ID。這些 Pod 是基于相同的規約來創建的, 但是不能相互替換:無論怎么調度,每個 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 # 默認值是 1minReadySeconds: 10 # 默認值是 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
守護進程,DaemonSet會在每個k8s 節點運行一個pod,當有節點加入集群時, 也會為他們新增一個 Pod 。當有節點從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創建的所有 Pod。比如:Prometheus監控、日志收集的系統都需要
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:# 這些容忍度設置是為了讓該守護進程集在控制平面節點上運行# 如果你不希望自己的控制平面節點運行 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
任務,通常任務是臨時性的,Job 會創建一個或者多個 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服務和網絡:
1) service
將運行在一組 Pods上的應用程序公開為網絡服務的抽象方法。簡單來說就是起到一個自動注冊和對集群內部服務訪問的作用。試想一下因為pod重建后IP都會變,想要被其他服務一直被訪問不太現實,而且多個pod副本難道自己要搭建一個負載均衡,然后還要考慮pod怎么注冊進來?不需要!這就是 service 干的活兒。
通過 selector 可以選擇這個 service 后端的服務是什么,類似配置SLB負載均衡的Backend
apiVersion: v1 kind: Service metadata:name: my-service spec:selector:app.kubernetes.io/name: MyAppports:- protocol: TCPport: 80targetPort: 93762) ingress
提供將集群內部服務暴露到外部的能力,簡單理解就是起到一個負載均衡器的作用,目前開源的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)來動態制備。持久卷是集群資源,就像節點也是集群資源一樣。PV 持久卷和普通的 Volume 一樣, 也是使用卷插件來實現的,只是它們擁有獨立于任何使用 PV 的 Pod 的生命周期。此 API 對象中記述了存儲的實現細節,無論其背后是 NFS、iSCSI 還是特定于云平臺的存儲系統
apiVersion: v1 kind: PersistentVolume metadata:name: foo-pv spec:storageClassName: ""claimRef:name: foo-pvcnamespace: foo2) 持久卷申領(PersistentVolumeClaim)
簡稱PVC,PVC 表達的是用戶對存儲的請求。概念上與 Pod 類似。Pod 會耗用節點資源,而 PVC 申領會耗用 PV 資源。Pod 可以請求特定數量的資源(CPU 和內存);同樣 PVC 申領也可以請求特定的大小和訪問模式 (例如,可以要求 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不需要管理員單獨去創建PV,普通用于只需要根據需要指定用哪個SC,然后在PVC中指定存儲卷大小就可以自動申請下來存儲卷
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: nfs provisioner: fuseim.pri/ifs parameters:archiveOnDelete: "true" reclaimPolicy: Retain4) 存儲類型
emptyDir: Pod 啟動時為空,存儲空間來自本地的 kubelet 根目錄(通常是根磁盤)或內存,使用場景:如果Pod被刪除,那么數據也會被刪除,不具備持久化。Pod內的容器,需要共享數據卷的時候,使用的臨時數據卷。
hostpath:直接掛載主機目錄, 如果需要通過容器直接讀取宿主機磁盤中的內容,那么可以通過掛載hostpath 的卷實現
故障排除
1) 常用工具
kubectl describe: 當任何資源沒有進入一個正常狀態的時候,都可以通過kubectl describe查看這個資產的事件信息
kubectl logs:這個命令主要對于pod資源使用,當pod 進入 running 狀態后,服務已經有問題,這時候可能程序里面有報錯,可以使用 kubectl logs 查看pod中應用的具體日志
2) 網絡
遇到網絡問題可使用 ping 、mtr、telnet 等命令測試網絡連通性,判斷網絡故障點
總結
勤加練習是通過 CKA 考試的關鍵,本文只列舉了部分實操內容,更多考試內容以及詳細信息可以前往CNCF官網或Linux foundation查看,最后祝各位考試順利通過!
關于HummerRisk
HummerRisk 是開源的云原生安全平臺,以非侵入的方式對云原生環境進行全面安全檢測。
針對于 K8s 容器云的安全,我們提供多方面的檢測能力,可以幫助用戶快速發現K8s集群中的各種安全問題。
歡迎關注我們了解更多。
GitHub - HummerRisk/HummerRisk: HummerRisk 是云原生安全平臺,包括混合云安全治理和容器云安全檢測。
總結
以上是生活随笔為你收集整理的CKA 认证考试必过技巧分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CKA考试Tips
- 下一篇: 用计算机作品装扮校园,童心向党艺绽放