k8s-cka考試題庫


個人博客:點擊這里進入

本次測試的所有問題都必須在指定的cluster配置環境中完成。為盡量減少切換,系統已對問題進行分組,同一cluster內的所有問題將連續顯示。
file

開啟TAB補全

做題前先配置k8s自動補齊功能,否則無法TAB補全命令:

  1. 登陸管理節點
  2. kubectl --help | grep bash,此步是為了找關鍵詞completion
    file
  3. sudo vim /etc/profile
  4. 添加source <(kubectl completion bash)
    file
    5.保存退出,source /etc/profile

1.4% k8s

- 設置配置環境 kubectl config use-context k8s 
Context
- 為部署管道創建一個新的 ClusterRole 並將其綁定到范圍為特定 namespace 的特定 ServiceAccount
  • 創建一個名字為 deployment-clusterrole 且僅允許創建以下資源類型的新ClusterRole:
    • Deployment
    • StatefulSet
    • DaemonSet
  • 在現有的 namespace app-team1 中創建有個名為 cicd-token 的新 ServiceAccount
  • 限 於 namespace app-team1 , 將 新 的 ClusterRole deployment-clusterrole 綁 定 到 新 的 ServiceAccount cicd-token。

解答:

1.kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet
2.kubectl create serviceaccount cicd-token -n app-team1
3.kubectl create rolebinding xxx(隨便起名字) --clusterrole=deployment-clusterrole --serviceaccount=cicd-token:app-team1 -n app-team1

2.4% ek8s

- 設置配置環境 kubectl config use-context ek8s 
- 將名為 ek8s-node-0 (vms25)的 node 設置為不可用,並重新調度該 node 上所有運行的 pods 

解答:

kubectl drain vms25.rhce.cc --ignore-daemonsets
file

3.7% mk8s

- 設置配置環境 kubectl config use-context mk8s 
- 現有的 kubernetes 集群正在運行的版本是 1.21.0。僅將主節點上的所有 kubernetes 控制平面 和節點組件升級到版本 1.21.1。
- 另外,在主節點上升級 kubelet 和 kubectl。 
[start-plane type="4"]確保在升級前 drain 主節點,並在升級后 uncordon 主節點。請不要升級工作節點,etcd,container管理器,CNI 插件,DNS服務或任何其他插件。[/start-plane]--etcd-upgrade=false 
kubeadm upgrade apply 1.21.1 --etcd-upgrade=false 

解答:

1.登陸官網k8s.io,可以右上角更換語言,點擊Learn Kubernetes Basics
2.搜索upgrade
file
3.開始升級,步驟官方文檔中都有步驟,步驟如下:

kubectl config use-context mk8s
kubectl get nodes
ssh vms28(28為mk8s的控制平面節點)
sudo su - (需用root用戶執行下方命令)

apt-get update && \ apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00 (安裝kubeadm包)

kubeadm upgrade apply v1.21.1 –etcd-upgrade=false(題中提示etcd不被升級,所以加后面的參數)
kubectl drain vms28.rhce.cc --ignore-daemonsets (升級kubelet和kubectl前騰空節點,官方文檔中流程都有,看着修改就好)

apt-get update && \ apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00(安裝kubelet和kubectl包)

systemctl daemon-reload
systemctl restart kubelet
kubectl uncordon vms28.rhce.cc

4.7%

  • 此項目無需更改配置環境
  • 首 先 為 運 行 在 https://127.0.0.1:2379 上 的 現 有 etcd 實 例 創 建 快 照 並 將 快 照 保 存 到 /srv/data/etcd-snapshot.db。
  • 為給定實例創建快照預計能在幾秒鍾內完成。如果該操作似乎掛起,則命令可能有問題。用 ctrl+c 來取消操作,然后重試。
  • 然后還原位於/srv/data/etcd-snapshot-previous.db 的現有先前快照.

提供了一下 TLS 證書和密鑰,以通過 etcdctl 連接到服務器。 CA 證書:/opt/KUIN00601/ca.crt 客戶端證書: /opt/KUIN00601/etcd-client.crt 客戶端密鑰:/opt/KUIN00601/etcd-client.key

解答:

使用root賬戶操作

etcdctl –help 查看是否有snapshot命令,有是版本3無為版本2

若是2.則手動導入3

export ETCDCTL_API=3
不知道命令怎么寫可以etcdctl snapshot save --help
主要三個參數為:-–cacert,--cert,--key

1.保存etcd實例快照:

考試環境:

#etcdctl snapshot save -–cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” -- /srv/data/etcd-snapshot.db

練習環境:

#etcdctl snapshot save /srv/data/etcd-snapshot.db

2.還原快照

考試環境:

#etcdctl snapshot restore –cacert=”/opt/KUIN00601/ca.crt” --cert=” /opt/KUIN00601/etcd-client.crt” --key=”/opt/KUIN00601/etcd-client.key” /srv/data/etcd-snapshot.db

練習環境:

#etcdctl snapshot restore /srv/data/etcd-snapshot.db

5.7% k8s

  • 設置配置環境 kubectl config use-context k8s
  • 在 internal 命名空間創建一個名為 allow-port-from-namespace 的確保新的 NetworkPolicy 允 許 namespace internal 中的 Pods 來連接到 namespace big-corp 中的端口 9200。
  • 確保新的 NetworkPolicy:
  • 不允許對沒有在監聽端口 9200 的 pods 訪問
  • 不允許不來自 namespace internal 的 pods 的訪問

解答:

1.先創建題中的命名空間(Namespace)

kubectl configuse-context k8s
kubectl get namespace
kubectl create namespace internal
kubectl create namespace big-corp
kubectl label namespace big-corp name=big-corp

2.打開官網,搜索ingress或egress或networkpolicy,然后第一個網絡策略
file
file
3.復制上方yaml代碼,新建yaml文件,例如networkpolicy.yaml,名字隨意起
4.將復制的代碼按照題意改為下圖所示:
file

kubectl apply -f networkpolicy.yaml
kubectl get networkpolicies.networking.k8s.io -n internal

file

6.7% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 請重新配置現有的部署 front-end 以及添加名為 http 的端口規范來公開現有容器 nginx 的端 口 80/tcp。
  • 創建一個名為 front-end-svc 的新服務,以公開容器端口 http。 配置此服務,以通過在排定的節點上的 NodePort 來公開各個 pods。

解答:

kubectl config use-context k8s
kubectl get deployments.apps
kubectl edit deployments.apps front-end (edit編輯時只能使用空格,不要TAB否則保存不了)

file

ports:
- name: http
  containePort: 80
  protocol: TCP

創建front-end-svc服務:
kubectl expose –-name=front-end-svc deployment front-end -–port=80 –-target-port=80 –-type=NodePort

7.7% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 如下創建一個新的 nginx ingress 資源:
  • 名稱:pong
  • namespace: ing-internal
  • 使用服務端口 5678 在路徑/hello 上公開服務 hello
  • 可以使用一下命令檢查服務 hello 的可用性,該命令返回 hello: curl -kL < INTERNAL_IP>/hello/

解答:

1.kubectl config use-context k8s
2.打開官方文檔,搜索ingress,選擇第一個結果即可,進入后復制yaml模板並新建一個yaml文件
3.vim ingress.yaml

file

4.kubectl apply -f 7-ing.yaml
5.kubectl get ing -n ing-internal 

8.4% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 將 deployment 從 webserver 擴展至 6pods

解答:

kubectl config use-context k8s
kubectl get deploy
kubectl scale deployment webserver –-replicas=6
kubectl get deploy

9.4% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 按如下要求調度一個 pod:
  • 名稱:nginx-kusc00401
  • image: nginx
  • Node selector: disk=ssd

解答:

kubectl run nginx-kusc00401 --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml > 9-pod.yaml
加入如下標紅代碼

file

kubectl apply -f 9-pod.yaml
kubectl get pods

10.4% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 檢查有多少個 worker nodes 已准備就緒(不包括被打上 Taint: NoSchedule 的節點),並將數 量寫入/opt/KUSC00402/kusc00402.txt

解答:

Kubectl get nodes
查看節點是否有污點
kubectl describe nodes [vms22.rhce.cc](http://vms22.rhce.cc) | grep Taint
kubectl describe nodes [vms23.rhce.cc](http://vms23.rhce.cc) | grep Taint
echo 1 > /opt/KUSC00402/kusc00402.txt

file

11.4% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 創建一個名字為kucc4的pod,在pod里面分別為以下每個images單獨運行一個app container (可能會有 1-4 個 images):
  • nginx+redis+memcached+consul

解答:

kubectl run kucc4 1–image=nginx –1image-pull-policy=IfNotPresent –1dry-run=client -o yaml > 11-pod.yaml
vim 11-pod.yaml(將圖中標紅項復制3次並修改pod名字即可)

file

kubectl apply -f 11-pod.yaml
kubectl get pod

12.4% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 創建名為 app-data 的 persistent volume,容量為 1Gi,訪問模式為 ReadWriteMany。volume 類型為 hostPath,位於/srv/app-data

解答:

1.官方文檔中搜索persistent volume,第一個案例即可
file
2.vim 12-pv.yaml,按照題意修改
file
3.kubectl apply -f 12-pv.yaml
4.kubectl get pv

13.7% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 創建一個新的 PersistentVolumeClaim:
  • 名稱:pvvolume
  • class:csi-hostpath-sc
  • 容量:10Mi
  • 創建一個新的 pod,此 pod 將作為 volume 掛載到PersistentVolumeClaim:
  • 名稱:web-server
  • image: nginx
  • 掛載路徑: /usr/share/nginx/html
  • 配置新的 pod,以對 volume 具有 ReadWriteOnce 權限。
  • 最后,使用 kubectl edit 或者 kubectl patch 將 PersistentVolumeClaim 的容量擴展為 70Mi,並 記錄此次更改。

解答:

kubectl config use-context k8s
繼續在上題中的官方文檔中找到下方案例:
file

vim 13-pvc.yaml,講案例復制,注意更改標紅項,其他項刪除(此步目的:創建新的 PersistentVolumeClaim)

file
kubectl apply -f 13-pvc.yaml
繼續在上題的官方文檔中下滑找到下方案例:
file

vim 13-pvc-pod.yaml,將案例復制(此步目的:創建一個新的 pod,此 pod並掛載到PersistentVolumeClaim)

file
kubectl apply -f 13-pvc-pod.yaml
file

kubectl edit pvc pvvolume –-record,將10Mi改為70Mi(--record目的為記錄此次更改,不加--record的話第三小題沒有分數)

file

14.5% k8s √

  • 設置配置環境 kubectl config use-context k8s
  • 監控 pod foo 的日志並:
    • 提取與錯誤 unable-to-access-website 相對應的日志行
    • 將這些日志行寫入到/opt/KUTR00101/foo

解答:

$ kubectl config use-context k8s
$ kubectl logs foo | grpe unable-to-access-website > /opt/KUTR00101/foo

15.7% k8s

  • 設置配置環境 kubectl config use-context k8s
    • 在不更改其現有容器的情況下,需要將一個現有的 pod 集成到 kubernetes 的內置日志記錄 體系結構中(例如 kubectl logs)。添加 streamimg sidecar 容器是實現此要求的一種好方法。
    • 將一個 busybox sidecar 容器添加到現有的 pod legacy-app。新的 sidecar 容器必須運行一下命令:
      /bin/sh -c tail -n+1 -f /var/log/legacy-app.log
  • 使用名為 logs 的 volume mount 來讓文件/var/log/legacy-app.log 可用於 sidecar 容器。
    不要更改現有容器。不要修改日志文件的路徑,兩個容器必須通過/var/log/legacy-app.log 來訪問該文件

解答:

kubectl config use-context k8s
kubectl get pod legacy-app -o yaml > 15-pod.yaml
vim 15-pod.yaml
1.添加pod及vomuleMount掛載點
file
2.添加volumes
file
3.修改掛載目錄及名稱
file
4.kubectl apply -f 15-pod.yaml
5.刪除legacy-app,否則再運行yaml時會提示legacy-app已存在
kubectl delete pod legacy-app -–force
file

16.5% k8s√

  • 設置配置環境 kubectl config use-context k8s
  • 通過 pod label name=cpu-user,找到運行時占用大量 CPU 的 pod,並將占用 CPU 最高的 pod 名稱寫入到文件/opt/KUTR000401/KUTR00401.txt(已存在)

解答:

kubectl top pods -l name=cpu-user
echo "占比最高的機器名" > /opt/KUTR000401/KUTR00401.txt

17.13% ek8s

  • 設置配置環境 kubectl config use-context ek8s
  • 名為wk8s-node-0(練習環境使用 vms26.rhce.cc)的 kubernetes worker node 處於 Not Ready狀態。調查發生這種情況的原因,並采取相應措施將 node 恢復為Ready狀態,確保所做的任何更改永久生效。
  • 可使用以下命令通過ssh連接到故障node:
    • ssh wk8s-node-0 (vms26.rhce.cc)
  • 可使用以下命令在該node上獲取更高權限:
    • sudo -i

解答:

kubectl get nodes
ssh vms26.rhce.cc
sudo -i
systemctl start kubelet ; systemctl enable kubectl
Exit退出
$kubectl get nodes


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM