CKA 模拟题库 | 17. 节点维护

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context ek8s

Task

将名为 node02 的 node 设置为不可用,并重新调度该 node 上所有运行的 pods。


参考:

任务 --> 管理集群 --> 安全地清空一个节点
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/safely-drain-node/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

kubectl get nodes
kubectl cordon node02
kubectl get nodes
kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force

检查:
kubectl get node
kubectl get pod -A -o wide | grep node02

CKA 模拟题库 | 16. 排查集群中故障节点

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context wk8s

Task

名为node02的Kubernetes worker node处于NotReady状态。
调查发生这种情况的原因,并采取相应的措施将node恢复为Ready状态,确保所做的任何更改永久生效。
可以使用以下命令,通过ssh连接到node02节点:
ssh node02
可以使用以下命令,在该节点上获取更高权限:
sudo -i


参考:

检查服务
https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/kubelet-integration/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

检查故障节点

kubectl get nodes

file
切换到故障节点

ssh node02
sudo -i
systemctl status kubelet
systemctl enable kubelet --now

检查:
systemctl status kubelet
kubectl get nodes

CKA 模拟题库 | 15. 备份还原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

参考:

任务 --> 管理集群 --> 为 Kubernetes 运行 etcd 集群
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

特别注意,etcd这道题,在考试时做完后,就不要回头检查或者操作了。因为它是用的前一道题的集群,所以一旦你回头再做时,切换错集群了,且又将etcd还原了,反而可能影响别的考题

备份etcd

export ETCDCTL_API=3
etcdctl  \
--endpoints="https://127.0.0.1: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

恢复etcd

sudo ETCDCTL_API=3
etcdctl \
--endpoints="https://127.0.0.1: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

检查:
etcdctl snapshot status /var/lib/backup/etcd-snapshot.db -wtable  
# 考试时,这些检查动作,都可以不做

CKA 模拟题库 | 14. 升级集群

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context mk8s

Task

现有的Kubernetes 集群正在运行版本1.25.1。仅将master节点上的所有 Kubernetes控制平面和节点组件升级到版本1.25.2。
确保在升级之前 drain master节点,并在升级后 uncordon master节点。
可以使用以下命令,通过ssh连接到master节点:
ssh master01
可以使用以下命令,在该master节点上获取更高权限:
sudo -i
另外,在主节点上升级kubelet和kubectl。
请不要升级工作节点,etcd,container 管理器,CNI插件, DNS服务或任何其他插件。


参考:

任务 --> 管理集群 --> 用 kubeadm 进行管理 --> 升级 kubeadm 集群
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

kubectl get nodes

维护和驱逐

kubectl cordon master01
kubectl drain master01 --ignore-daemonsets

连接master01 并 提升权限

ssh master01
sudo -i

更新软件列表查看可更新版本, 升级对应版本

apt-get update
apt-cache show kubeadm | grep 1.25.2
apt-get install kubeadm=1.25.2-00 kubelet=1.25.2-00 kubectl=1.25.2-00
kubeadm upgrade apply v1.25.2 --etcd-upgrade=false

更新时如果提示无法升级,可能是设置了hold,用unhold解除标记再更新

# 解除 阻止更新 标记
apt-mark unhold kubeadm kubectl kubelet

# 设置软件包保留,阻止自动更新
apt-mark hold kubeadm kubectl kubelet
kubeadm version
kubelet --version
kubectl version

重启kubelet

sudo systemctl daemon-reload
sudo systemctl restart kubelet

恢复master01 调度

kubectl uncordon master01

检查:
kubectl get node

CKA 模拟题库 | 13. 使用 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以外,请勿更改现有容器的规格。


参考:

概念 --> 集群管理 --> 日志架构
https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

导出pod文件并备份

kubectl get pod 11-factor-app -o yaml > varlog.yaml
cp varlog.yaml varlog-bak.yaml

删除原pod

kubectl delete pod 11-factor-app
kubectl get pod 11-factor-app

编辑文件

vim varlog.yaml
    - name: varlog
      mountPath: /var/log

  - name: count-log-2
    image: busybox:1.28
    args: [/bin/sh, -c, 'tail -n+1 -F /var/log/2.log']
    volumeMounts:
    - name: varlog
      mountPath: /var/log

  #volumes:
  - name: varlog
    emptyDir: {}

添加如下行
file

应用文件

kubectl apply -f 11-factor-app.yaml

检查:
kubectl logs 11-factor-app sidecar
kubectl  exec 11-factor-app -c sidecar -- tail -f /var/log/11-factor-app.log
kubectl  exec 11-factor-app -c count-- tail -f /var/log/11-factor-app.log

file
file
file

CKA 模拟题库 | 12. 查看Pod日志

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context k8s

Task

监控 pod foo 的日志并:
提取与错误 RLIMIT_NOFILE相对应的日志行
将这些日志行写入 /opt/KUTR00101/foo


参考:

kubectl log -h
https://kubernetes.io/zh-cn/docs/tasks/debug/debug-application/debug-running-pod/#examine-pod-logs


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

kubectl logs foo | grep -i "RLIMIT_NOFILE" > /opt/KUTR00101/foo

检查:
cat /opt/KUTR00101/foo

file

CKA 模拟题库 | 11. 创建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,并记录此更改。


参考:

任务 --> 配置 Pods 和容器 --> 配置 Pod 以使用 PersistentVolume 作为存储
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

vim pvc.yaml

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume  #pvc名字
spec:
  storageClassName: csi-hostpath-sc  # class名
  accessModes:
    - ReadWriteOnce  # 注意,考试时的访问模式可能有ReadWriteMany和ReadOnlyMany和ReadWriteOnce,根据题目要求写。
  resources:
    requests:
      storage: 10Mi  # 大小
kubectl apply -f pvc.yaml
vim pvc-pod.yaml

pvc-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  volumes:
    - name: task-pv-storage # 两处name需要一样
      persistentVolumeClaim:
        claimName: pv-volume  # 这个要使用上面创建的pvc名字
  containers:
    - name: nginx
      image: nginx:1.16  # 使用指定镜像
      volumeMounts:
        - mountPath: "/usr/share/nginx/html" # 挂载容器内位置
          name: task-pv-storage # 两处name需要一样
kubectl apply -f pvc-pod.yaml

修改PVC配置

kubectl edit pvc pv-volume --record

修改 大小 70Mi
file


检查:
kubectl get pvc
kubectl get pod web-server

CKA 模拟题库 | 10. 创建PV

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context hk8s

Task

创建名为 app-config 的 persistent volume,容量为 1Gi,访问模式为 ReadWriteMany。
volume 类型为 hostPath,位于 /srv/app-config


参考:

任务 --> 配置 Pods 和容器 --> 配置 Pod 以使用 PersistentVolume 作为存储
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-persistent-volume-storage/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

vim pv.yaml

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
 # labels:
 #   type: local
spec:
 # storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"

应用文件

kubectl apply -f pv.yaml

检查:
kubectl get pv

file

CKA 模拟题库 | 9. 创建多容器Pod

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context k8s

Task

按如下要求调度一个Pod:
名称:kucc8
app containers: 2
container 名称/images:

  • nginx
  • consul

参考:

概念 --> 工作负载 --> Pod
https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

vim pod-kucc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kucc8
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  - name: consul
    image: consul
    imagePullPolicy: IfNotPresent

应用文件

kubectl apply -f pod-kucc.yaml

也可以通过 --dry-run 生成一个简单yaml文件,然后编辑

kubectl run kucc8 --image=nginx --dry-run client -oyaml > pod-kucc.yaml
vim pod-kucc.yaml

检查:
kubectl get pod kucc8

file

CKA 模拟题库 | 8. 查看可用节点数量

模拟题目:

设置配置环境:
[candidate@node-1] $ kubectl config use-context k8s

Task

检查有多少 nodes 已准备就绪(不包括被打上 Taint:NoSchedule 的节点),
并将数量写入 /opt/KUSC00402/kusc00402.txt


参考:

概念 --> 调度、抢占和驱逐 --> 污点和容忍度
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/


解答:

考试的时候务必记住切换集群, 注意集群名称
kubectl config use-context k8s

ready 的数量 减去 noschedule 的数量为可用节点数

kubectl get nodes
kubectl describe nodes | grep -i taints
echo "结果" > /opt/KUSC00402/kusc00402.txt

file


检查:
cat /opt/KUSC00402/kusc00402.txt