2023 K8s 认证工程师 CKA 考题分析和题库练习(下)

目录

10、考核知识:检查可用节点数量

题目内容

题目内容中文解释

做题解答

11、考核知识:一个 Pod 封装多个容器

题目内容

题目内容中文解释  

官方文档搜索关键字:pod

​编辑做题解答

12、考核知识:持久卷 PersistentVolume

题目内容

题目内容中文解释  

官方文档搜索关键字:pv

做题解答

13、考核知识:PersistentVolumeClaims

题目内容

题目内容中文解释  

官方文档搜索关键字:pvc

做题解答 

14、考核知识:查看 Pod 日志

题目内容

题目内容中文解释  

官方文档搜索关键字:kubectl logs

做题解答

15、考核知识:Sidecar 代理

题目内容

题目内容中文解释  

官方文档搜索关键字:logging

做题解答

16、考核知识:查看 Pod 的 cpu

题目内容

题目内容中文解释  

官方文档搜索关键字:kubectl top pod

做题解答

17、考核知识:集群故障排查 - kubelet 故障

题目内容

题目内容中文解释  

做题解答


  • CKA 证书展示:

提示:

我的 cak 模拟环境:

10、考核知识:检查可用节点数量

题目内容

题目内容中文解释

切换 k8s 集群环境:kubectl config use-context k8s

Task

        检查集群中有多少节点为 Ready 状态(不包括被打上 Taint: NoSchedule 的节点),之后将数量写到 /opt/KUSCO0402/kusc00402.txt。

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context k8s

# 模拟环境中创建题目指定的目录,考试时不需要,已存在
root@cka-master1:~# mkdir -pv /opt/KUSCO0402

# 开始解题:
# 查看集群中状态为 Ready 的节点
root@cka-master1:~# kubectl get nodes | grep -w "Ready"
cka-master1   Ready    control-plane,master   26h   v1.23.1
cka-node1     Ready    <none>                 26h   v1.23.1

# 统计 Ready 数量
root@cka-master1:~# kubectl get nodes | grep -w "Ready" | wc -l
2

# 统计具有污点 NoSchedule 的数量
root@cka-master1:~# kubectl describe nodes cka-master1 cka-node1 | grep "Taint" | grep "NoSchedule" | wc -l
1

# 把结果(2-1=1)写入题目中指定的文件
root@cka-master1:~# echo "1" > /opt/KUSCO0402/kusc00402.txt
root@cka-master1:~# cat /opt/KUSCO0402/kusc00402.txt 
1

11、考核知识:一个 Pod 封装多个容器

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context k8s

Task

        创建一个 Pod,名字为 kucc1,这个 Pod 包含 4 个容器,为 nginx、redis、memcached、consul。

官方文档搜索关键字:pod

使用 Pod:Pod | Kubernetes

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context k8s

# 编写 yaml 文件
root@cka-master1:~# vim kucc1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kucc1
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  - name: redis
    image: redis
    imagePullPolicy: IfNotPresent
  - name: memcached
    image: memcached
    imagePullPolicy: IfNotPresent
  - name: consul
    image: consul
    imagePullPolicy: IfNotPresent

root@cka-master1:~# kubectl apply -f kucc1.yaml 

root@cka-master1:~# kubectl get pods kucc1
NAME    READY   STATUS    RESTARTS   AGE
kucc1   4/4     Running   0          3s 

12、考核知识:持久卷 PersistentVolume

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context hk8s

Task

        创建一个 pv,名字为 app-config,大小为 2Gi, 访问权限为 ReadWriteMany。Volume 的类型为 hostPath,路径为 /srv/app-config。

官方文档搜索关键字:pv

创建 PersistentVolume:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context hk8s

# 创建题目中的目录,考试是不需要,已存在
root@cka-master1:~# mkdir -pv /srv/app-config

# 开始解题:
# 创建 pv
root@cka-master1:~# vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config            # 题目中指定的 pv 名称
spec:
  capacity:
    storage: 2Gi              # 题目指定的 pv 大小  
  accessModes:
    - ReadWriteMany           # 题目指定的访问模式
  hostPath:
    path: "/srv/app-config"   # 题目指定的 url 

root@cka-master1:~# kubectl apply -f pv.yaml 
persistentvolume/app-config created

root@cka-master1:~# kubectl get pv
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
app-config   2Gi        RWX            Retain           Available                                   6s

13、考核知识:PersistentVolumeClaims

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context ok8s

Task

        创建一个名字为 pv-volume 的 pvc,指定 storageClass 为 csi-hostpath-sc,大小为 10Mi。然后创建一个 Pod,名字为 web-server,镜像为 nginx,并且挂载该 PVC 至 /usr/share/nginx/html,挂载的权限为 RedWriteOnce。之后通过 kubectl edit 或者 kubectl path 将 pvc 改成 70Mi,并且记录修改记录。

官方文档搜索关键字:pvc

创建 PersistentVolumeClaim:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes

做题解答 

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context ok8s

# 创建 pvc 和 pod
root@cka-master1:~# vim pvc-pod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume                    # 题目指定的 pvc 名称
spec:
  storageClassName: csi-hostpath-sc  # 题目指定的存储类名称
  accessModes:
    - ReadWriteOnce                  # 题目指定的访问模式
  resources:
    requests:
      storage: 10Mi                  # 题目指定的 pvc 大小  
---
apiVersion: v1
kind: Pod
metadata:
  name: web-server                   # 题目指定的 pod 名称 
spec:
  volumes:
    - name: pv-volume                # 与 volumeMounts.name 一致
      persistentVolumeClaim:
        claimName: pv-volume         # 使用的 pvc 名称
  containers:
    - name: nginx
      image: nginx                   # 题目指定的镜像 
      volumeMounts:
        - mountPath: "/usr/share/nginx/html" # 题目指定的挂载目录
          name: pv-volume            

root@cka-master1:~# kubectl apply -f pvc-pod.yaml 

# 查看是否创建成功。之所以是 pending 状态是模拟环境中没有存储类 storageClassName: csi-hostpath-sc,考试环境中存在,无需担心
root@cka-master1:~# kubectl get pvc pv-volume 
NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS      AGE
pv-volume   Pending                                      csi-hostpath-sc   21s
root@cka-master1:~# kubectl get pods web-server 
NAME         READY   STATUS    RESTARTS   AGE
web-server   0/1     Pending   0          31s

# pvc 扩容。将 storage: 10Mi 修改为 70Mi
root@cka-master1:~# kubectl edit pvc pv-volume
······
  resources:
    requests:
      storage: 70Mi
  storageClassName: csi-hostpath-sc
······

14、考核知识:查看 Pod 日志

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context k8s

Task

        监控名为 foobar 的 Pod 的日志,并过滤出具有 unable-access-website 信息的行,然后将写入到 /opt/KUTR00101/foobar。

官方文档搜索关键字:kubectl logs

示例:常用操作:命令行工具 (kubectl) | Kubernetes

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context k8s

[student@node-1] $ kubectl logs foobar | grep unable-access-website > /opt/KUTR00101/foobar

15、考核知识:Sidecar 代理

题目内容

题目内容中文解释  

Context

        将一个现有的 Pod 集成到 Kubernetes 的内置日志记录体系结构中 (例如 kubectl logs)。添加 streaming sidecar 容器是实现此要求的一种好方法。

Task

        使用 busybox lmage 来将名为 sidecar 的 sidecar 容器添加到现有的 Pod legacy-app 上,新的 sidecar 容器必须运行以下命令:
/bin/sh -c tail -n+1 -f /var/log/legacy-app.log

使用 volume 挂载 /var/log/ 目录,确保 sidecar 能访问 /var/log/legacy-app.log 文件。

官方文档搜索关键字:logging

使用边车容器运行日志代理:日志架构 | Kubernetes

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context k8s

# 在模拟环境中创建题目中提到的 pod legacy-app,考试不需要,已存在
root@cka-master1:~# vim legacy-app.yaml
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$(date) INFO $i" >> /var/log/legacy-app.log;
        i=$((i+1));
        sleep 1;
      done    

root@cka-master1:~# kubectl apply -f legacy-app.yaml 
root@cka-master1:~# kubectl get pods legacy-app 
NAME         READY   STATUS    RESTARTS   AGE
legacy-app   1/1     Running   0          17s

# 开始解题:
# 首先将题目中现有的 pod legacy-app 的 yaml 导出
root@cka-master1:~# kubectl get pods legacy-app -o yaml > sidecar.yaml

# 删除一些导出的内容,结果如下
root@cka-master1:~# vim sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
  namespace: default
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - "i=0; while true; do\n  echo \"$(date) INFO $i\" >> /var/log/legacy-app.log;\n
      \ i=$((i+1));\n  sleep 1;\ndone      \n"
    image: busybox
    imagePullPolicy: Always
    name: count

# 在 sidecar.yaml 中添加 sidecar 容器和 volume
root@cka-master1:~# vim sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
  name: legacy-app
  namespace: default
spec:
  containers:
  - args:
    - /bin/sh
    - -c
    - "i=0; while true; do\n  echo \"$(date) INFO $i\" >> /var/log/legacy-app.log;\n
      \ i=$((i+1));\n  sleep 1;\ndone      \n"
    image: busybox
    imagePullPolicy: IfNotPresent
    name: count
    volumeMounts:
    - name: logs
      mountPath: /var/log
  - name: sidecar
    image: busybox
    imagePullPolicy: IfNotPresent
    args: [/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-app.log']
    volumeMounts:
    - name: logs
      mountPath: /var/log
  volumes:
  - name: logs
    emptyDir: {}  

# 先删除原有的 pod 才能更新
root@cka-master1:~# kubectl delete -f sidecar.yaml 

# 如果删除很慢的话,就强制删除
root@cka-master1:~# kubectl delete -f sidecar.yaml --force --grace-period=0

root@cka-master1:~# kubectl apply -f sidecar.yaml 
pod/legacy-app created
root@cka-master1:~# kubectl get pods legacy-app 
NAME         READY   STATUS    RESTARTS   AGE
legacy-app   2/2     Running   0          3s

# 查看 sidecar 容器日志
root@cka-master1:~# kubectl logs legacy-app -c sidecar

16、考核知识:查看 Pod 的 cpu

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context k8s

Task

        找出标签是 name=cpu-user 的 Pod,并过滤出使用 CPU 最高的 Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt 文件里(注意他没有说指定 namespace,所以需要使用 -A 指定所有 namespace)。

官方文档搜索关键字:kubectl top pod

指定内存请求和限制:为容器和 Pod 分配内存资源 | Kubernetes

显示资源(CPU、内存、存储)的使用情况:

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context k8s

# 将 addon.tar.gz、metrics-server-amd64-0-3-6.tar.gz 上传到 node 并解压
root@cka-node1:~# docker load -i addon.tar.gz

root@cka-node1:~# docker load -i metrics-server-amd64-0-3-6.tar.gz

# 将 metrics.yaml 上传到 master 并创建
root@cka-master1:~# kubectl apply -f metrics.yaml 

# 给 pod 打上标签
root@cka-master1:~# kubectl label pods -n kube-system metrics-server-875fcb674-snp99 name=cpu-user

# 创建题目给的目录
root@cka-master1:~# mkdir -pv /opt/KUTR00401

# 以上步骤在模拟环境中创建,模拟题目给出的环境,考试时不需要,已存在
# 开始解题:
# 查看标签为 name=cpu-user 并且是 cpu 使用最高的 pod
root@cka-master1:~# kubectl top pods -l name=cpu-user --sort-by=cpu -A
NAMESPACE     NAME                             CPU(cores)   MEMORY(bytes)   
kube-system   metrics-server-875fcb674-snp99   2m           17Mi

# 将查到的 pod 名字写入 /opt/KUTR00401/KUTR00401.txt 文件中
root@cka-master1:~# echo "metrics-server-875fcb674-snp99" > /opt/KUTR00401/KUTR00401.txt
root@cka-master1:~# cat /opt/KUTR00401/KUTR00401.txt 
metrics-server-875fcb674-snp99

17、考核知识:集群故障排查 - kubelet 故障

题目内容

题目内容中文解释  

切换 k8s 集群环境:kubectl config use-context wk8s

Task

        一个名为 wk8s-node-0 的节点状态为 NotReady,让其他恢复至正常状态,并确认所有的更改开机自动完成。

可以使用以下命令,通过 ssh 连接到 wk8s-node-0 节点:ssh wk8s-node-0

可以使用以下命令,在该节点上获取更高权限:sudo -i

做题解答

# 考试时执行,切换集群。模拟环境中不需要执行
[student@node-1] $ kubectl config use-context wk8s

# 开始解题:
[student@node-1] $ ssh wk8s-node-0
[student@node-1] $ sudo -i

[root@wk8s-node-0 ~]# systemctl status kubelet
[root@wk8s-node-0 ~]# systemctl restart kubelet
[root@wk8s-node-0 ~]# systemctl enable kubelet
[root@wk8s-node-0 ~]# systemctl status kubelet

# 退出 root,退回到 student@wk8s-node-0
[root@wk8s-node-0 ~]# exit

# 退出 wk8s-node-0,退回到 student@node-1
[student@wk8s-node-0 ~]# exit

# 不要输入 exit 太多,否则会退出考试环境

上一篇文章:2023 K8s 认证工程师 CKA 考题分析和题库练习(上)_Stars.Sky的博客-CSDN博客

下一篇文章:

【Kubernetes 企业项目实战】02、基于 Prometheus 和 K8s 构建智能化监控告警系统(上)_Stars.Sky的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_46560589/article/details/128548686