真题:
模拟系统效果:
考试注意事项:
- 1. yaml文件名字可以用01.yaml,02.yaml等对应相应题,方便排错。yaml文件里面必须使用空格来缩进
- 2. vim编辑yaml文件,如果粘贴官网yaml过来需要设置:set paste
- 3. 题目能复制就复制。
- 4. 考试环境会在节点node进行,如遇到权限不够加sudo。
模拟试题脚本说明:
- 需要自行搭建k8s集群,并且所有节点Ready才能执行这个脚本,1master+2node即可。(我自己是3+2)
- 进入exam-CKA目录,执行exam-k8s.sh即可选择1. 加载试题,2. 检测对错,3. 重置考题。
- 脚本目前只能做到13题,后面14升级kubadm -17由于每人版本或环境没法模拟,只能自己跟步骤做。
- 每次重置完试题在exam-CKA目录执行一次rm -f *.yaml
- 请确保各个node节点Ready在加载试题,工作节点名字叫node01,node02,否则多题会判错误。如果你的node主机名不同,可以执行这个命令kubectl label nodes <node主机名> disk=ssd
模拟试题:
[root@master01 ~]# mkdir -p exam-CKA/yaml && cd exam-CKA [root@master01 exam-CKA]# vim yaml/bar.yaml apiVersion: v1 kind: Pod metadata: name: bar namespace: k8s labels: name: bar-log spec: containers: - name: bar-log image: nginx:1.14.2 ports: - containerPort: 8888 resources: requests: cpu: 50m limits: cpu: 100m command: ["/bin/sh","-c","while true;do echo file-not-foundtest;sleep 10000;done"] [root@master01 exam-CKA]# vim yaml/csi.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-hostpath-sc provisioner: hostpath.csi.k8s.io reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true [root@master01 exam-CKA]# vim yaml/loadbalance.yaml apiVersion: apps/v1 kind: Deployment metadata: name: loadbalancer namespace: k8s labels: name: nginx spec: replicas: 3 selector: matchLabels: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 88 [root@master01 exam-CKA]# vim yaml/cpu-utillizer.yaml apiVersion: v1 kind: Pod metadata: name: qq namespace: k8s labels: name: cpu-utilizer spec: containers: - name: cpu-utilizer image: nginx:1.14.2 ports: - containerPort: 8081 resources: requests: cpu: 50m limits: cpu: 100m command: ["/bin/bash"] args: - -c - | while : do echo "are you ok" sleep 0.2 done [root@master01 exam-CKA]# vim yaml/front-end.yaml apiVersion: apps/v1 kind: Deployment metadata: name: front-end namespace: k8s labels: name: front-end spec: replicas: 1 selector: matchLabels: name: front-end template: metadata: labels: name: front-end spec: containers: - name: nginx image: nginx:1.14.2 [root@master01 exam-CKA]# vim yaml/sidecar.yaml apiVersion: v1 kind: Pod metadata: name: legacy-app namespace: k8s spec: containers: - name: legacy-app image: busybox args: - /bin/sh - -c - > i=0; while true; do echo "$i: $(date)" >> /var/log/legacy-app.log; i=$((i+1)); sleep 1; done
创建一个exam.k8s.sh脚本
[root@master01 exam-CKA]# vim exam-k8s.sh [root@master01 exam-CKA]# chmod +x exam-k8s.sh #!/bin/bash function check() { #-------------------------------第一题 kubectl describe clusterrole deployment-clusterrole |grep daemonsets &>/dev/null && kubectl describe clusterrole deployment-clusterrole |grep deployments &>/dev/null && kubectl describe clusterrole deployment-clusterrole |grep statefulsets &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第一题:deployment-clusterrole 正确\033[0m" else echo -e "\033[31m第一题:deployment-clusterrole 错误\033[0m" fi kubectl describe serviceaccount cicd-token -n app-team1 |grep cicd-token &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第一题:app-team1 正确\033[0m" else echo -e "\033[31m第一题:app-team1 错误\033[0m" fi kubectl describe rolebinding -n app-team1| grep cicd-token &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第一题:deployment-rolebinding 正确\033[0m" else echo -e "\033[31m第一题:deployment-rolebinding 错误\033[0m" fi #-----------------第二题 if [ `cat /opt/KUTR00401/KUTR00401.txt` == qq ] then echo -e "\033[32m第二题top 正确\033[0m" else echo -e "\033[31m第二题top 错误\033[0m" fi #-----------------第三题 kubectl describe networkpolicies -nmy-app|grep "Namespace: my-app" &>/dev/null && kubectl describe networkpolicies -nmy-app|grep 8080/TCP &>/dev/null && kubectl describe networkpolicies -nmy-app|grep "NamespaceSelector: name=big-corp" &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第三题networkpolicies 正确\033[0m" else echo -e "\033[31m第三题networkpolicies 错误\033[0m" fi #-----------------第四题 kubectl get svc front-end-svc -owide -n k8s| grep 80 &>/dev/null && kubectl get svc front-end-svc -owide -n k8s| grep NodePort &>/dev/null && kubectl get svc front-end-svc -owide -n k8s| grep front-end-svc &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第四题front-end 正确\033[0m" else echo -e "\033[31m第四题front-end 错误\033[0m" fi #-----------------第五题 kubectl describe ingress -n ing-internal |grep pong &>/dev/null && kubectl describe ingress -n ing-internal |grep hello:5678 &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第五题ingress 正确\033[0m" else echo -e "\033[31m第五题ingress 错误\033[0m" fi #-----------------第六题 kubectl get deployment -n k8s | grep 5/5 &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第六题scale数量 正确\033[0m" else echo -e "\033[31m第六题scale数量 错误\033[0m" fi #-----------------第七题 kubectl get pods nginx-kusc00401 -owide -n k8s | grep Running &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第七题Node selector 正确\033[0m" else echo -e "\033[31m第七题Node selector 错误\033[0m" fi #-----------------第八题 ba1=`kubectl describe node | grep Taints | grep -I NoSchedule | wc -l ` ba2=`kubectl get node | grep -wc Ready` ba=$(( ba2 - ba1 )) if [ `cat /opt/KUSC00402/kusc00402.txt` == $ba ] then echo -e "\033[32m第八题woker 正确,正确数量:$ba \033[0m" else echo -e "\033[31m第八题woker 错误,正确数量:$ba \033[0m" fi #-----------------第九题 kubectl get pod kucc4 -n k8s| grep 3/3 &>/dev/null && kubectl get pod kucc4 -n k8s| grep Running &>/dev/null && kubectl get pod kucc4 -n k8s| grep 3/3 &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第九题3个images启动 正确\033[0m" else echo -e "\033[31m第九题3个images启动 错误\033[0m" fi #-----------------第十题 kubectl get pv |grep app-data &>/dev/null && kubectl get pv |grep 2Gi &>/dev/null && kubectl get pv |grep Available &>/dev/null if [ $? == 0 ] then echo -e "\033[32m第十题pv 正确\033[0m" else echo -e "\033[31m第十题pv 错误\033[0m" fi #-----------------第十一题 kubectl get pvc -n ok8s| grep csi-hostpath-sc &> /dev/null && kubectl get pvc -n ok8s| grep pv-volume &> /dev/null if [ $? == 0 ] then echo -e "\033[32m第十一题pvc 正确\033[0m" else echo -e "\033[31m第十一题pvc 错误\033[0m" fi #-----------------第十二题 grep file-not-foundtest /opt/KUTR00101/bar &> /dev/null if [ $? == 0 ] then echo -e "\033[32m第十二题log 正确\033[0m" else echo -e "\033[31m第十二题log 错误\033[0m" fi #-----------------第十三题 kubectl get pod legacy-app -oyaml -n k8s| grep "tail -n+1 -F /var/log/legacy-app.log" &> /dev/null && kubectl get pods legacy-app -n k8s| grep 2/2 &> /dev/null && kubectl get pods legacy-app -n k8s| grep Running &> /dev/null if [ $? == 0 ] then echo -e "\033[32m第十三题sidecar 正确\033[0m" else echo -e "\033[31m第十三题sidecar 错误\033[0m" fi } function frist() { kubectl create namespace k8s kubectl create namespace app-team1 kubectl create namespace ing-internal kubectl create namespace my-app kubectl create namespace big-corp kubectl create namespace hk8s kubectl create namespace ok8s kubectl config set-context hk8s --namespace=hk8s --cluster=kubernetes --user=kubernetes-admin kubectl config set-context k8s --namespace=k8s --cluster=kubernetes --user=kubernetes-admin kubectl config set-context ok8s --namespace=ok8s --cluster=kubernetes --user=kubernetes-admin kubectl label nodes node01 disk=ssd mkdir /opt/KUSC00402 && touch mkdir /opt/KUSC00402/KUTR00401.txt mkdir /opt/KUTR00401 && touch /opt/KUTR00401/KUTR00401.txt mkdir /opt/KUTR00101 && touch /opt/KUTR00101/bar kubectl apply -f ./yaml/front-end.yaml kubectl apply -f ./yaml/loadbalance.yaml kubectl apply -f ./yaml/bar.yaml kubectl apply -f ./yaml/cpu-utillizer.yaml kubectl apply -f yaml/sidecar.yaml } function rset() { >/opt/KUTR00401/KUTR00401.txt >/opt/KUSC00402/kusc00402.txt >/opt/KUTR00101/bar kubectl delete -f ./yaml/sidecar.yaml kubectl delete pod bar -n k8s kubectl delete clusterrole deployment-clusterrole kubectl delete rolebinding deployment-rolebinding -n app-team1 kubectl delete -f ./yaml/cpu-utillizer.yaml kubectl delete -f ./yaml/loadbalance.yaml kubectl delete networkpolicy allow-port-from-namespace -n my-app kubectl delete deployment front-end kubectl delete svc front-end-svc -n k8s kubectl delete pods nginx-kusc00401 kubectl delete pods kucc4 kubectl delete pv app-data kubectl label nodes node01 disk- kubectl delete namespace ok8s kubectl delete namespace my-app kubectl delete namespace big-corp kubectl delete namespace ing-internal kubectl delete namespace app-team1 kubectl delete namespace hk8s kubectl delete namespace k8s kubectl config use-context kubernetes-admin@kubernetes } #---------------------功能----------------------------------------------- while : do read -p "CKA模拟系统,请输入:1.开始加载试题,2.检测试题,3.重设考题,0.退出 :" ch case $ch in 1) frist echo ok! echo 模拟考试开始! exit ;; 3) rset echo ok!!! ;; 2) check ;; 0) echo 88~~ exit ;; *) esac done
脚本打包链接
压缩包是tar包,传到K8s集群,执行指令:tar -xf exam-CKA.tar.gz