CKA-模拟考题&检测脚本(2022年12月1日)

真题:

真题链接

模拟系统效果:

考试注意事项:

  • 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

脚本链接

猜你喜欢

转载自blog.csdn.net/weixin_72758284/article/details/128191581