目录
前言
1. 创建rabc权限
2. 查询cpu占用率最高的pod
3. deployment扩容副本
4. pod通过label标签指定节点部署
5. 创建pv
6. 查询pod日志
7. 排查集群故障节点
8. 查看集群可用节点
9. 创建包含多个容器的pod
10. 集群节点维护
前言
17道真题难度等级
一级 rbac cpu 扩容 pod指定节点 pv pod日志 排障 查看可用节点 多容器pod 节点维护
二级 networkpolicy service ingress pvc
三级 sidecar 升级集群 备份还原etcd
本系列有四篇博客,本博客为一级难度篇。
CKA注意事项:CKA考试注意事项--考前必看!_luo_guibin的博客-CSDN博客
第一篇:CKA认证真题(1)-- 必考_luo_guibin的博客-CSDN博客
第二篇:CKA考试真题(2)_luo_guibin的博客-CSDN博客
第三篇:CKA认证真题(3)-- 绝对干货!_luo_guibin的博客-CSDN博客
1. 创建rabc权限
Task
创建一个名为 deployment-clusterrole 且仅允许创建以下资源类型的新 ClusterRole:
Deployment
StatefulSet
DaemonSet
在现有的 namespace app-team1 中创建一个名为 cicd-token 的新 ServiceAccount。
限于 namespace app-team1 中,将新的 ClusterRole deployment-clusterrole 绑定到新的 ServiceAccount cicd-token。
#答案
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
kubectl -n app-team1 create serviceaccount cicd-token
kubectl -n app-team1 create rolebinding cicd-token-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。
题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
2. 查询cpu占用率最高的pod
Task
通过 pod label name=overloaded-cpu,找到运行时占用大量 CPU 的 pod,
并将占用 CPU 最高的 pod 名称写入文件 /opt/KUTR000401/KUTR00401.txt(已存在)。
#答案
kubectl top pod -l name=overloaded-cpu --sort-by=cpu -A
echo "查出来的 Pod Name" > /opt/KUTR000401/KUTR00401.txt
#将cpu占用最高的pod写入指定文件即可。
3. deployment扩容副本
Task
将 deployment webserver 扩展至 4 个 pods
#答案
kubectl scale deployment webserver --replicas=6
4. pod通过label标签指定节点部署
Task
按如下要求调度一个 pod:
名称:nginx-kusc00401
Image:nginx
Node selector:disk=ssd
参考文档:将 Pod 分配给节点 | Kubernetes
#答案
kubectl get nodes --show-labels | grep 'disk=ssd'
一般是已经存在的,如果不存在,任选一个节点手动新建label
kubectl label nodes node01 disk=ssd
vi label-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disk: ssd
kubectl apply -f label-pod.yaml
5. 创建pv
Task
创建名为 app-data 的 persistent volume,容量为 1Gi,访问模式为 ReadWriteMany。
volume 类型为 hostPath,位于 /srv/app-data
参考文档:配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes
#答案
vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-data
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/srv/app-data"
kubectl apply -f pv.yaml
#按照题目更改name、容量、访问模式、目录即可,类型固定是hostPath,删除label和storageclassname属性。
6. 查询pod日志
Task
监控 pod foobar 的日志并:
提取与错误 unable-to-access-website 相对应的日志行
将这些日志行写入 /opt/KUTR00101/foobar
#答案
kubectl logs foobar | grep "unable-to-access-website" > /opt/KUTR00101/foobar
7. 排查集群故障节点
Task
名为 wk8s-node-0 的 Kubernetes worker node 处于 NotReady 状态。
调查发生这种情况的原因,并采取相应的措施将 node 恢复为 Ready 状态,确保所做的任何更改永久生效。
本质原因就是wk8s-node-0的kubelet被停止运行了,重启kubelet并设置开机自启动即可。
#答案
ssh wk8s-node-0
sudo -i
systemctl start kubelet
systemctl enable kubelet
exit #退出root
exit #退出wk8s-node-0回到wk8s-node-1
8. 查看集群可用节点
Task
检查有多少 nodes 已准备就绪(不包括被打上 Taint:NoSchedule 的节点),
并将数量写入 /opt/KUSC00402/kusc00402.txt
#答案
kubectl describe nodes | grep -i Taints
echo "没有NoSchedule标记的节点数" > /opt/KUSC00402/kusc00402.txt
9. 创建包含多个容器的pod
Task
按如下要求调度一个 Pod:
名称:kucc4
app containers: 2
container 名称/images:
⚫ nginx
⚫ memcached
参考文档:Pod | Kubernetes
#更改pod的name,删除容器端口号属性,新增容器。
#答案
vi con-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kucc4
spec:
containers:
- name: nginx
image: nginx
- name: memcached
image: memcached
kubcctl apply -f con-pod.yaml
10. 集群节点维护
Task
将名为 ek8s-node-0 的 node 设置为不可用,并重新调度该 node 上所有运行的 pods。
#答案
kubectl cordon ek8s-node-0
kubectl drain ek8s-node-0 --ignore-daemonsets
# 但如果执行后有报错则需要加上--delete-emptydir-data --force,会强制将 pod 移除,一般用不到。
# kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force