日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CKA考题[k8s1.24]

發布時間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CKA考题[k8s1.24] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第一題 權限控制 RBAC
  • 第二題 查看 pod 的 CPU
  • 第三題 配置網絡策略 NetworkPolicy
  • 第四題 暴露服務 Service
  • 第五題 創建 Ingress
  • 第六題 擴容 deployment 副本數
  • 第七題 調度 pod 到指定節點
  • 第八題 查看可用node數量
  • 第九題 創建多容器的pod
  • 第十題 創建 PV
  • 第十一題 創建 PVC
  • 第十二題 查看 pod 日志
  • 第十三題 使用 sidecar 代理容器日志
  • 第十四題 升級集群
  • 第十五題 備份還原 etcd
  • 第十六題 排查集群中故障節點
  • 第十七題 節點維護

相關鏈接:
Containerd【輕量級容器管理工具】:https://blog.csdn.net/qq_41822345/article/details/126677121
從0開始安裝k8s1.25:https://blog.csdn.net/qq_41822345/article/details/126679925
CKA考題[k8s1.21]:https://blog.csdn.net/qq_41822345/article/details/127038941

【摘要】 (CKA)認證Kubernetes管理員,由Linux基金會和云原生計算基金會(CNCF)推出,是關于kubernetes技術的官方認證。當前考題考試環境kubernetes1.24。考試共計17道題,線上考試,2小時之內完成。

注意,官方的 CKA 考試環境是有多套的,考試時,不一定抽到哪套。不同考試環境里面部分題目的內容有很小的變化,但題干都是一樣的。另外,每道題都是有步驟分的,不要全空不寫。

《題庫》跟《真題》的題干是一樣的,區別在于里面的一些 pod、deployment、namespace、ServiceAccount 等參數可能不同而已,因為在真實考試中,也是會時常變換里面的這些變量參數的。注意理解這些變量的含義,而不要死記硬背答案。

考試時,可以打開考試環境 Ubuntu 20.04 桌面上的火狐瀏覽器,訪問 K8S 官網 https://kubernetes.io/

kubectl 備忘單:https://kubernetes.io/zh-cn/docs/reference/kubectl/cheatsheet/

第一題 權限控制 RBAC

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Context

為部署流水線創建一個新的 ClusterRole 并將其綁定到范圍為特定的 namespace 的特定 ServiceAccount。

Task

創建一個名為 deployment-clusterrole 且僅允許創建以下資源類型的新 ClusterRole: Deployment 、StatefulSet 、DaemonSet。

在現有的 namespace app-team1 中創建一個名為 cicd-token 的新 ServiceAccount。

限于 namespace app-team1 中,將新的 ClusterRole deployment-clusterrole 綁定到新的 ServiceAccount cicd-token。

  • 考點

k8s RBAC 授權模型。

kubectl create clusterrole -h

kubectl create rolebinding -h

  • 解答

切換到kubectl config use-context k8s。

kubectl create clusterrole deployment-clusterrole--verb=create--resource=Deployment,StatefulSet,DaemonSetkubectl -n app-team1 create serviceaccourt cicd-tokenkubectl create rolebinding cicd-token --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token --namespace=app-team1
  • 驗證
kubectl describe -n app-team1 rolebindings cicd-bind

第二題 查看 pod 的 CPU

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

通過 pod label name=cpu-loader,找到運行時占用大量 CPU 的 pod,

并將占用 CPU 最高的 pod 名稱寫入文件 /opt/KUTR000401/KUTR00401.txt(已存在)。

  • 考點

kubectl top pod -h

  • 解答

切換到kubectl config use-context ek8s。

kubectl top pod -l name=cpu-loader --sort-by=cpu -A echo "查出來的 Pod Name" > /opt/KUTR000401/KUTR00401.txt
  • 驗證
cat /opt/KUTR000401/KUTR00401.txt

第三題 配置網絡策略 NetworkPolicy

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context hk8s

Task

在現有的 namespace my-app 中創建一個名為 allow-port-from-namespace 的新 NetworkPolicy。

確保新的 NetworkPolicy 允許 namespace echo 中的 Pods 連接到 namespace my-app 中的 Pods 的 9000 端口。

進一步確保新的 NetworkPolicy:

不允許對沒有在監聽 端口 9000 的 Pods 的訪問。

不允許非來自 namespace echo 中的 Pods 的訪問。

  • 考點

NetworkPolicy 的創建:

https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

  • 解答

切換到kubectl config use-context mk8s

vim networkpolicy.yaml cat networkpolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata:name: allow-port-from-namespacenamespace: my-app #被訪問者的命名空間 spec:podSelector: #這兩行必須要寫,或者也可以寫成一行為 podSelector: {}matchLabels: {} # 注意 matchLabels:與{}之間有一個空格policyTypes:- Ingress #策略影響入棧流量ingress:- from: #允許流量的來源- namespaceSelector:matchLabels:project: echo #訪問者的命名空間的標簽 label#- podSelector: {} #注意,這個不寫。如果 ingress 里也寫了- podSelector: {},則會導致 my-app 中的 pod 可以訪問 my-app 中 pod 的 9000 了,這樣不滿足題目要求不允許非來自 namespace echo 中的 Pods 的訪問。ports:- protocol: TCPport: 9000 #被訪問者公開的端口
  • 驗證
# 創建并驗證 kubectl apply -f networkpolicy.yaml kubectl describe networkpolicy -n my-app

第四題 暴露服務 Service

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

請重新配置現有的 deployment front-end 以及添加名為 http 的端口規范來公開現有容器 nginx 的端口 80/tcp。

創建一個名為 front-end-svc 的新 service,以公開容器端口 http。

配置此 service,以通過各個 Pod 所在的節點上的 NodePort 來公開他們。

  • 考點

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/

  • 解答

切換到kubectl config use-context mk8s

vim deploy-nginx.yaml cat deploy-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata:name: front-end spec:selector:matchLabels:app: nginxreplicas: 3 # 告知 Deployment 運行 3 個與該模板匹配的 Podtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80name: http # 端口名為 httpprotocol: TCP

創建 deployment 并暴露端口

kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc
  • 驗證
[root@node-1 mycka]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE front-end-svc NodePort 10.1.16.135 <none> 80:31365/TCP 72m [root@node-1 mycka]# curl node-1:31365 Hello world!

第五題 創建 Ingress

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

如下創建一個新的 nginx Ingress 資源:

名稱: ping

Namespace: ing-internal

使用服務端口 5678 在路徑 /hello 上公開服務 hello

可以使用以下命令檢查服務 hello 的可用性,該命令應返回 hello:

curl -kL <INTERNAL_IP>/hello

  • 考點

Ingress 的創建:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

  • 解答

切換到kubectl config use-context hk8s。

vim ingress-min.yaml cat ingress-min.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: pingnamespace: ing-internal#annotations:#kubernetes.io/ingress.class: "nginx"#nginx.ingress.kubernetes.io/rewrite-target: / spec:rules:- http:paths:- path: /hellopathType: Prefixbackend:service:name: helloport:number: 5678

創建ingress:

kubectl apply -f ingress-min.yaml
  • 驗證
kubectl get ingress -n ing-internal

第六題 擴容 deployment 副本數

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

將 deployment presentation 擴展至 4 個 pods

  • 考點

kubectl scale deployment -h

  • 解答

切換到kubectl config use-context k8s。

kubectl scale deployment presentation --replicas=4
  • 驗證
kubectl get deployments presentation -o wide kubectl get pod -l app=presentation

第七題 調度 pod 到指定節點

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

按如下要求調度一個 pod:

名稱:nginx-kusc00401

Image:nginx

Node selector:disk=ssd

  • 考點

nodeSelect 屬性的使用。

  • 解答

切換到kubectl config use-context k8s。

Vim node-selector.yaml cat node-selector.yaml apiVersion: v1 kind: Pod metadata:name: nginx-kusc00401 spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresent #這句的意思是,如果此 image 已經有了,則不重新下載。考試時寫不寫這個都是可以的。nodeSelector:disk: ssd
  • 驗證
kubectl apply -f node-selector.yaml kubectl get pod nginx-kusc00401 -owide

第八題 查看可用node數量

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

檢查有多少 nodes 已準備就緒(不包括被打上 Taint:NoSchedule 的節點),

并將數量寫入 /opt/KUSC00402/kusc00402.txt

  • 考點

kubectl -h

  • 解答

切換到kubectl config use-context k8s。

# grep 的-i 是忽略大小寫,grep -v 是排除在外,grep -c 是統計查出來的條數。 kubectl describe nodes | grep -i Taints | grep -vc NoSchedule echo "查出來的數字" > /opt/KUSC00402/kusc00402.txt
  • 驗證
cat opt/KUSC00402/kusc00402.txt

第九題 創建多容器的pod

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

創建一個名字為kucc8的pod,里面包含2個容器redis和consul。

  • 考點

pod 概念

  • 解答

切換到kubectl config use-context k8s。

vim pod-two-containers.yaml cat pod-two-containers.yaml apiVersion: v1 kind: Pod metadata:name: kucc8 spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresent- name: consulimage: consulimagePullPolicy: IfNotPresent
  • 驗證
kubectl apply -f pod-two-containers.yaml pod/kucc8 created kubectl get pod

第十題 創建 PV

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context hk8s

Task

創建名為 app-config 的 persistent volume,容量為 1Gi,訪問模式為 ReadWriteMany。

volume 類型為 hostPath,位于 /srv/app-config

  • 考點

PV創建:

https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

  • 解答

切換到kubectl config use-context k8s。

vim pv.yaml cat pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: app-config#labels: #不需要寫#type: local spec:capacity:storage: 1GiaccessModes:- ReadWriteMany # 注意,考試時的訪問模式可能有 ReadWriteMany 和 ReadOnlyMany 和 ReadWriteOnce,根據題目要求寫。hostPath:path: "/srv/app-config"
  • 驗證
kubectl apply -f pv.yaml persistentvolume/app-config created kubectl get pv

第十一題 創建 PVC

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context ok8s

Task

創建一個新的 PersistentVolumeClaim:

名稱: pv-volume

Class: csi-hostpath-sc

容量: 10Mi

創建一個新的 Pod,來將 PersistentVolumeClaim 作為 volume 進行掛載:

名稱:web-server

Image:nginx:1.16

掛載路徑:/usr/share/nginx/html

配置新的 Pod,以對 volume 具有 ReadWriteOnce 權限。

最后,使用 kubectl edit 或 kubectl patch 將 PersistentVolumeClaim 的容量擴展為 70Mi,并記錄此更改。

  • 考點

PVC與pod掛載:

https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

  • 解答

切換到kubectl config use-context k8s。

Vim pvc.yaml cat pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: pv-volume #pvc 名字 spec:storageClassName: csi-hostpath-scaccessModes:- ReadWriteOnce # 注意,考試時訪問模式可能有 ReadWriteMany 和 ReadOnlyMany 和 ReadWriteOnce,根據題目要求寫。resources:requests:storage: 10Mi

創建pvc

kubectl apply -f pvc.yaml

創建pod,綁定pvc

vim pvc-pod.yaml cat pvc-pod.yaml apiVersion: v1 kind: Pod metadata:name: web-server spec:volumes:- name: task-pv-storagepersistentVolumeClaim:claimName: pv-volume #這個要使用上面創建的 pvc 名字containers:- name: nginximage: nginx:1.16volumeMounts:- mountPath: "/usr/share/nginx/html"name: task-pv-storage #要與volumes的name一樣。
  • 驗證
kubectl apply -f pvc-pod.yaml kubectl get pvc kubectl get po

第十二題 查看 pod 日志

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Task

監控 pod foo 的日志并:

提取與錯誤 RLIMIT_NOFILE 相對應的日志行

將這些日志行寫入 /opt/KUTR00101/foo

  • 考點

pod日志輸出

  • 解答

切換到kubectl config use-context hk8s。

kubectl logs foo | grep "RLIMIT_NOFILE" > /opt/KUTR00101/foo
  • 驗證
cat /opt/KUTR00101/foo

第十三題 使用 sidecar 代理容器日志

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context k8s

Context

將一個現有的 Pod 集成到 Kubernetes 的內置日志記錄體系結構中(例如 kubectl logs)。

添加 streaming sidecar 容器是實現此要求的一種好方法。

Task

使用 busybox Image 來將名為 sidecar 的 sidecar 容器添加到現有的 Pod 11-factor-app 中。

新的 sidecar 容器必須運行以下命令:

/bin/sh -c tail -n+1 -f /var/log/11-factor-app.log

使用掛載在/var/log 的 Volume,使日志文件 11-factor-app.log 可用于 sidecar 容器。

除了添加所需要的 volume mount 以外,請勿更改現有容器的規格。

  • 考點

pod 兩個容器共享存儲卷

  • 解答

切換到kubectl config use-context k8s。

# (輸出其yaml文件) kubectl get pod 11-factor-app -o yaml > app.yaml # (先備份一份,刪除managed部分,刪除status部分,不刪會有問題。) vim app.yaml # 在container下添加: containers:- name: sidecar #新加內容,注意 name 別寫錯了image: busybox #新加內容args: [/bin/sh, -c, 'tail -n+1 -f /var/log/11-factor-app.log'] #新加內容,注意文件名別寫錯了。另外是用逗號分隔的,而題目里是空格。volumeMounts: #新加內容- name: varlog #新加內容mountPath: /var/log #新加內容# 在原容器下添加:volumeMounts:- name: varlog #新加內容mountPath: /var/log #新加內容#注意:在pod的volumes為emptyDir。volumes:- name: varlogemptyDir: {}

重新創建pod應用

kubectl delete pod 11-factor-app kubectl apply -f app.yaml kubectl logs 11-factor-app sidecar
  • 驗證
kubectl logs 11-factor-app sidecar

第十四題 升級集群

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context mk8s

Task

現有的 Kubernetes 集群正在運行版本 1.24.2。僅將 master 節點上的所有 Kubernetes 控制平面和節點組件升級到版本 1.24.3。

確保在升級之前 drain master 節點,并在升級后 uncordon master 節點。

可以使用以下命令,通過 ssh 連接到 master 節點:

ssh master01

可以使用以下命令,在該 master 節點上獲取更高權限:

sudo -i

另外,在主節點上升級 kubelet 和 kubectl。

請不要升級工作節點,etcd,container 管理器,CNI 插件, DNS 服務或任何其他插件。

  • 考點

如何離線主機,并升級控制面板和升級節點

  • 解答

切換到kubectl config use-context k8s。

kubectl get nodes kubectl cordon master01 kubectl drain master01 --ignore-daemonsetsapt-cache show kubeadm|grep 1.24.3 apt-get update apt-get install kubeadm=1.24.3-00# 檢查 kubeadm 升級后的版本 kubeadm version # 驗證升級計劃 kubeadm upgrade plan # 排除 etcd,升級其他的,提示時,輸入 y。 kubeadm upgrade apply v1.24.3 --etcd-upgrade=false# 升級 kubelet apt-get install kubelet=1.24.3-00 kubelet --version# 升級 kubectl apt-get install kubectl=1.24.3-00 kubectl version# 恢復 master01 調度 kubectl uncordon master01 #檢查 master01 是否為 Ready kubectl get node

第十五題 備份還原 etcd

  • 考題

設置配置環境

此項目無需更改配置環境。但是,在執行此項目之前,請確保您已返回初始節點。

[candidate@master01] $ exit #注意,這個之前是在 master01 上,所以要 exit 退到 node01,如果已經是 node01 了,就不要再 exit 了。

Task

首先,為運行在 https://11.0.1.111:2379 上的現有 etcd 實例創建快照并將快照保存到 /var/lib/backup/etcd-snapshot.db

(注意,真實考試中,這里寫的是 https://127.0.0.1:2379)

為給定實例創建快照預計能在幾秒鐘內完成。 如果該操作似乎掛起,則命令可能有問題。用 CTRL + C 來取消操作,然后重試。

然后還原位于/data/backup/etcd-snapshot-previous.db 的現有先前快照。

提供了以下 TLS 證書和密鑰,以通過 etcdctl 連接到服務器。

CA 證書: /opt/KUIN00601/ca.crt

客戶端證書: /opt/KUIN00601/etcd-client.crt

客戶端密鑰: /opt/KUIN00601/etcd-client.key

  • 考點

etcd 的備份和恢復

  • 解答

切換到kubectl config use-context k8s。

# 備份: # 如果不使用 export ETCDCTL_API=3,而使用 ETCDCTL_API=3,則下面每條 etcdctl 命令前都要加 ETCDCTL_API=3。 # 如果執行時,提示 permission denied,則是權限不夠,命令最前面加 sudo 即可。 export ETCDCTL_API=3 etcdctl --endpoints=https://11.0.1.111: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 snapshot status /var/lib/backup/etcd-snapshot.db -wtable# 恢復 # 不加 sudo 會報錯 permission denied sudo ETCDCTL_API=3 etcdctl --endpoints=https://11.0.1.111:2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" -- key="/opt/KUIN00601/etcd-client.key" snapshot restore /data/backup/etcd-snapshot-previous.db

第十六題 排查集群中故障節點

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context wk8s

Task

名為 node02 的 Kubernetes worker node 處于 NotReady 狀態。

調查發生這種情況的原因,并采取相應的措施將 node 恢復為 Ready 狀態,確保所做的任何更改永久生效。

可以使用以下命令,通過 ssh 連接到 node02 節點:

ssh node02

可以使用以下命令,在該節點上獲取更高權限:

sudo -i

  • 考點

控制面組件故障排查【api-server、etcd、scheduler、controller、kubelet、docker等】

  • 解答

切換到kubectl config use-context k8s。

# (查看kubelet為啥沒起來,按需修復) systemctl status kubelet systemctl start kubelt systemctl enable kubelet
  • 驗證
# (狀態為Ready) kubectl get node

第十七題 節點維護

  • 考題

設置配置環境:

[candidate@node-1] $ kubectl config use-context ek8s

Task

將名為 node02 的 node 設置為不可用,并重新調度該 node 上所有運行的 pods。

  • 考點

cordon 和 drain 命令的使用

  • 解答

切換到kubectl config use-context k8s。

kubectl get node kubectl cordon node02 kubectl get node kubectl drain node02 --ignore-daemonsets # 注意,還有一個參數--delete-emptydir-data --force,這個考試時不用加,就可以正常 draini node02 的。 # 但如果執行后,有跟測試環境一樣的報錯(如下截圖),則需要加上--delete-emptydir-data --force,會強制將 pod 移除。 # kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force
  • 驗證
kubectl get node

總結

以上是生活随笔為你收集整理的CKA考题[k8s1.24]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。