CKA认证考题+解析
CKA認證考題
1.RBAC 4%
Context
為部署管道創建一個新的ClusterRole并將其綁定到范圍內特定的namespace的特定ServiceAccount
Task
創建一個名為deployment-clusterrole且僅允許創建以下資源類型的新ClusterRule
Deployment
StatefulSet
DaemonSet
在現有的namespace app-team1中創建一個名為cicd-token的新ServiceAccount
限于namespace app-team1,將新的ClusterRole deployment-clusterrole綁定到新的ServiceAccount cicd-
token
解題思路:
#第一步:命令補全 source < (kubectl completion bash) #第二步:創建ClusterRole(通過kubectl create clusterrule -h) kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets #第三步:創建ServiceAccount kubectl create serviceaccount cicd-token -napp-team1 #第四步:將ClusterRole和ServiceAccount進行綁定(指定ns就創建rolebinding,不指定ns就創建clusterrolebinding) kubectl create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -napp-team12.驅逐節點 4%
Task
將名為ek8s-node-1的節點設置為不可用,并重新調度在其上運行的所有Pod。
解題思路:
#第一步:驅逐node上所有pod,node狀態變為noschedule Kubectl drain ek8s-node-1 --ignore-daemonsets --force3.集群升級 7%
Task
現有的Kubernetes集群正在運行版本1.18.8.僅將主節點上的所有Kubernetes控制平面和節點組件升級到版本
1.19.0
另外,在主節點上升級Kubelet和Kubectl
確定在升級之前drain主節點,并在升級后uncordon主節點。請不要升級工作節點,etcd,container管理器,
CNI插件,DNS服務或任何其他插件。
解題思路:
#第一步:連接到master節點 ssh k8s-master #第二步:使用root用戶驅逐節點 su root Kubectl drain k8s-master #第三步:安裝1.19版本 apt-cache show kubeadm|grep 1.19.0 apt-get install kubeadm=1.19.0-00 #第四步:使用Kubeadm升級K8s kubeadm upgrade apply 1.19.0 --etcd-upgrade=false #第五步:升級kubelet apt-get install kubectl=1.19.0-00 #第六步:恢復master節點 kubectl uncordon k8s-master4.ETCD備份恢復 7%
Task
首先,為運行在https://127.0.0.2379上的現有etcd實例創建快照并將快照保到/var/lib/backup/etcd-snapshot.db
然后還原位于 /var/lib/bakup/etcd-snapshot-previous.db
提供了以下TLS證書與密鑰,以通過etcdctl連接到服務器
CA證書:/opt/KUIN00601/ca.crt
客戶端證書:/opt/KUIN00601/etcd-client.crt
客戶端密鑰:/opt/KUIN00601/etcd-client.key
解題思路:
#第一步:指定etcdctl版本 export ETCDCTL_API=3 #第二步:給etcd做快照 etcdctl --endpoints=https://127.0.0.2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot save /var/lib/backup/etcd-snapshot.db #第三步:查看快照是否創建成功 etcdctl --endpoints=https://127.0.0.2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot status /var/lib/backup/etcd-snapshot.db -wtable #第四步:恢復快照 etcdctl snapshot restore /var/lib/bakup/etcd-snapshot-previous.db #第五步:查看恢復快照狀態 etcdctl snapshot status /var/lib/bakup/etcd-snapshot-previous.db -wtablePS:做完題目之后退回work節點終端界面
5.網絡策略 4%
Task
在已有的namespace foobar中創建一個名為allow-port-from-namespace的新NetworkPolicy,以允許
namespace corp-bar訪問其Pods的端口9200
解題思路:
6.SVC 4%
Task
重新配置現有的deployment front-end,并添加名為HTTP的端口規范,以暴露現有容器nginx的端口80/
tcp。
創建一個名為front-end-svc的新服務,以暴露容器端口HTTP。
配置新服務以通過調度它們的節點上的NodePort暴露各個Pod
解題思路:
#第一步:修改deployment的yaml 添加以下一行:spec.template.spec.containers name: nginx ports: - containerPort: 80name: http #第二步:創建svc kubectl create svc front-end-svc nodeport --tcp=80:80 #第三步:檢查svc和deployment的標簽是否一致 kubectl get deployment front-end --show-labels kubectl get svc front-end-svc --show-labels #第四步:檢查是否成功 kubectl get svc front-end-svc curl $ClusterIP curl $nodeIP+隨機端口PS:在檢查時一定進入k8s集群中,考試中不能跨集群curl,ssh到任何一個work節點再curl
7.Ingress 7%
Task
創建一個名為nginx的Ingress并遵守以下規則
Name:pong
Namespace:ing-internal
Exposing service hello on path /hello 使用端口5678
驗證
curl -KL <INTERNAL_IP>/hello
解題思路:
#第一步:在k8s官網拷貝ingress模板 vim ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: pongnamespace: ing-internalannotations:nginx.ingress.kubernetes.io/rewrite-target: / spec:rules:- http:paths:- path: /hellopathType: Prefixbackend:service:name: helloport:number: 5678 #第二步:創建ingress kubectl apply -f ingress.yaml #第三步:驗證 kubectl get ingress pong -n ing-internal -o yaml(查看INTERNAL_IP) curl -KL <INTERNAL_IP>/hello #返回hello證明成功8.擴容 4%
Task
將deployment web-server擴容到4個pods
解題思路:
kubectl get deployment -A kubectl scale --replicas=4 deployment web-server kubectl get pod9.通過node標簽調度pod 4%
Task
按以下規則調度pod:
name:ngux-kusc00401
image:nginx
Node selector:disk=ssd
解題思路:
#第一步:查看當前集群所有node的標簽 kubectl get node --show-labels #第二步:創建pod kubectl run --generator=run-pod/v1 ngux-kusc00401 --image=nginx --dry-run -o yaml>nginx1.yaml (V1.17.0) kubectl run ngux-kusc00401 --image=nginx --dry-run=client -o yaml>nginx1.yaml (V1.20.0以上) #第三步:編輯yaml vim nginx.yaml apiVersion: v1 kind: Pod metadata:creationTimestamp: nulllabels:run: ngux-kusc00401name: ngux-kusc00401 spec:containers:- image: nginxname: ngux-kusc00401resources: {} #添加一行:nodeSelector:disk: ssddnsPolicy: ClusterFirstrestartPolicy: Always #第四步:執行yaml并檢查是否running kubectl apply -f nginx.yaml10.節點數量 4%
Task
檢查并查看有多少個節點準備就緒(不包括已獲得Noschedule的節點)并將其寫
入/opt/KUSC00402/kusc00402.txt
解題思路:
#第一步:查看當前集群中的Node有沒有污點 kubectl describe node|grep Taint #第二步:將結果輸入到文件中 echo 2>/opt/KUSC00402/kusc00402.txt11.創建多容器pod 4%
Task
創建一個名為kucc8的pod,并且使用以下鏡像(可能指定了1至4個鏡像)
nginx+redis+memcached+consul
解題思路:
#第一步:創建yaml模板文件 kubectl run kucc8 --image=nginx --dry-run=client -o yaml>kucc8.yaml #第二步:編輯yaml文件 vim kucc8.yaml apiVersion: v1 kind: Pod metadata:creationTimestamp: nulllabels:run: kucc8name: kucc8 spec:containers:- image: nginxname: nginx #添加以下內容:- image: redisname: redis- image: memcachedname: memcached- image: consulname: consulresources: {}dnsPolicy: ClusterFirstrestartPolicy: Always status: {} #第四步:查看結果 kubectl apply -f kucc8.yaml12.pv 4%
Task
創建一個名為app-config的的pv,1Gi大小,權限為ReadOnlyMany便用hostPath類型掛載本地位置
為/srv/app-config
解題思路:
#第一步:從官網復制模板 vim app-config.yaml apiVersion: v1 kind: PersistentVolume metadata:name: app-configlabels:type: local spec:storageClassName: manualcapacity:storage: 1GiaccessModes:- ReadOnlyManyhostPath:path: "/srv/app-config" #第二步:創建pv并檢查 kubectl apply -f app-config.yaml kubectl get pv13.pvc 7%
Task
創建一個pvc滿足以下要求:
Name:pv-volume
Class:csi-hostpath-sc
Capcity: 10Mi
創建一個pod并掛載PVC:
name:test
image.:nginx
Mount path:/usr/share/nginx/html
編輯pod volume權限為ReadWriteOnce
最后,使用kubectl edit或者kubectl patch將pvc大小改為70Mi
解題思路:
#創建pvc vim pv-volume.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: pv-volume spec:storageClassName: csi-hostpath-scaccessModes:- ReadWriteOnceresources:requests:storage: 10Mikubectl apply -f vim pv-volume.yaml #創建pod apiVersion: v1 kind: Pod metadata:name: test spec:volumes:- name: pv-volumepersistentVolumeClaim:claimName: pv-volumecontainers:- name: nginximage: nginxports:- containerPort: 80name: "http-server"volumeMounts:- mountPath: "/usr/share/nginx/html"name: pv-volume kubectl apply -f nginx.yaml #修改PVC大小 kubectl edit pv-volume --record14.輸出日志 5%
Task
監控bar的日志
并將error字段內容輸出到 /opt/KUTR00101/bar
解題思路:
kubectl logs bar |grep error >>/opt/KUTR00101/bar15.sidecar 13%
Task
在pod big-corp-app中增加一個busybox的sidecar,新的sidecar容器使用以下命令:
/bin/sh -c tail -n+1-f /var/log/big-corp-app.log
掛載一個卷的名字叫logs并確保/var/log/big-corp-app.log文件在sidecar中可達
不要修改已經存在的容器
不要修改日志路徑與文件
解題思路:
#編輯yaml文件 kubectl get pod big-corp-app -o yaml>new.yaml vim new.yaml #找對位置分別添加以下內容:volumeMounts:- name: logsmountPath: /var/log- name: busyboximage: busyboxargs: [/bin/sh, -c, 'tail -n+1 -f /var/log/big-corp-app.log']volumeMounts:- name: logsmountPath: /var/logvolumes:- name: logsemptyDir: {}kubectl delete -f new.yaml kubectl apply -f new.yaml #檢查pod狀態和日志 kubectl exec big-corp-app -c busybox -- tail -f /var/log/big-corp-app.log16.top 5%
Task
從pod標簽為name=cpu-loader中找到CPU負載最大的pod名稱,并輸出到
/opt/KUTR00401/KUTR00401.txt(該文件已經存在)
解題思路:
kubectl top pod -A -l name=cpu-loader --sort-by='cpu' echo ${pod_name}>>/opt/KUTR00401/KUTR00401.txt17.kubelet 13%
Task
名為wk8s-node-0的工作節點狀態為NotReady,找到并解決此問題
解題思路:
ssh wk8s-node-0 systemctl status kubelet systemctl start kubelet systemctl enable kubelet exit18. pod 的滾動更新與回滾
Task
將 deployment 的 image 更新為 v2 版本.
驗證是否更新完成.
回滾到 v1 版本.
解題思路:
題目yaml:
總結
以上是生活随笔為你收集整理的CKA认证考题+解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wincap函数用法简述
- 下一篇: js逆向巨潮mcode