互联网最全cka真题解析-2022.9.9
k8s cka
目录
文章目录
- 目录
- 我的CKA证书
- 1、CKA真题解析
- kubectl自动补全及帮助信息
- 第1题 RBAC 授权(强制记忆,3条命令)
- 第2题 统计使用 CPU 最高的 Pod(强制记忆,`送分题`)
- 第3题 网络策略(拷贝yaml)📍(注意yaml位置)
- 第4题 SVC 暴露应用(强制记忆)
- 第5题 Ingress创建(拷贝yaml)📍(注意yaml位置)
- 第6题 扩容 deployment 副本数量(强制记忆,`送分题`)
- 第7题 调度 pod 到指定节点(强制记忆,`送分题`)
- 第8题 查看可用节点数量(强制记忆,`送分题`)
- 第9题 创建多容器的 pod(强制记忆,`送分题`)
- 第10题 创建 PV(拷贝yaml)📍(注意yaml位置)
- 第11题 创建PVC(拷贝yaml)📍(注意yaml位置)
- 第12题 获取 Pod 错误日志(强制记忆,`送分题`)
- 第13题 使用 sidecar 代理容器日志(边车)(强制记忆)要注意下:🌹
- 第14题 升级集群(强制记忆)
- 第15题 etcd 备份与恢复(强制记忆,2个步骤)
- 第16题 排查集群中故障节点(强制记忆,`送分题`,一定要做完这道题,分值最高,最简单)
- 第17题 节点维护(强制记忆,`送分题`)
- 2、考试注意事项
- 3、CKA考试感受
- 附件
- 关于我
- 最后
我的CKA证书
1、CKA真题解析
kubectl自动补全及帮助信息
1、配置kubectl自动补全
apt install bash-completion
source <(kubectl completion bash)
2、kubectl explans 帮助信息
3、kubectl 命令 -h 帮助信息
4、官网
https://kubernetes.io/
第1题 RBAC 授权(强制记忆,3条命令)
考点:RBAC 授权模型的理解。
考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl create clusterrole -h
kubectl create serviceaccount -h
kubectl create rolebinding -h
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#command-line-utilities
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/
解答
- 考题答案
1、切换环境
kubectl config use-context kubernetes
2、配置
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create serviceaccount cicd-token -n app-team1
# 题目中写了“限于 namespace app-team1 中”,则创建 rolebinding。没有写的话,则创建 clusterrolebinding。
kubectl create rolebinding cicd-token-rolebinding --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
# rolebinding 后面的名字 cicd-token-rolebinding 随便起的,因为题目中没有要求,如果题目中有要求,就不能随便起了。
3、验证
#稍微验证下
kubectl describe rolebinding cicd-token-rolebinding -napp-team1
注意:我们可以用describle
命令看下刚才新建的rolebinding
来验证下:
- 答题技巧
#说明:
解题三步骤:
1.创建clusterrole
2.创建serviceaccount
3.将新的clusterrole绑定到新的serviceaccount :rolebinding
1.之前我们是通过yaml文件进行创建的,这次通过命令行进行创建;(直接强制记忆就好;)
2.从书签链接可以找到一些命令,但是尽量建议熟悉记忆上面3条命令,直接敲出来即可;(直接搜索`一些命令行工具`关键字即可)
此题注意事项:
一般来水,如下是对应绑定的:(但是也可以rolebinding和clusterrole对应)
role --> rolebinding 有ns之说
clusterrole --> clusterrolebinding 无ns之说
serviceaccount 有ns之说
第2题 统计使用 CPU 最高的 Pod(强制记忆,送分题
)
考点:kubectl top -l 命令的使用
考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl top pod -h
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods
解答
1、切换环境
kubectl config use-context kubernetes
2、配置
kubectl top pod -l name=cpu-utilizer --sort-by="cpu" -A #-A是所有namespace 不要忘记写哦,-l也要记得写哦。。。
echo "<podname>" > /opt/KUR00401.txt # 将第一个 Pod 名称写到文件
#写完后记得检查下那个保存结果的文件
3、验证
cat /opt/KUR00401.txt
- 答题技巧
metric-server已经准备好了,我们不用管;
第3题 网络策略(拷贝yaml)📍(注意yaml位置)
(考题知识点:kubernetes安全章节/网络策略)7’
考题
双重否定就是肯定,所以最后两句话的意思就是:
仅允许端口为 8080 的 pod 访问。
仅允许 my-app命名空间中的 pod 访问。
⚠️ 码的,这个翻译起来真的有点别扭。。。。。
参考链接
解答
- 原课件答案
1、切换环境
kubectl config use-context hk8s
2、配置
#如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
给命名空间打标签:kubectl label namespace big-corp name=big-corp
编写一个 yaml 文件
vim networkpolicy.yaml
#注意 :set paste,防止 yaml 文件空格错序。
apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app #被访问者的命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: big-corp #访问者的命名空间的标签
ports:
- protocol: TCP
port: 8080 #被访问者公开的端口
kubectl apply -f networkpolicy.yaml
3、验证
kubectl get networkpolicy -nmy-app
- 答题技巧
这个题也是争议比较大,这个题目翻译后比较模糊,先按照下面答案来做就行。这个题一直也没变过;直接从官方yaml拷贝过来,删除没用的,修改为题目要求的,就好;
- 官方yaml
apiVersion: networking.kubernetes.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。
📍 另一个版本
检查:
第4题 SVC 暴露应用(强制记忆)
考点:将现有的 deploy 暴露成 nodeport 的 service。
考题
参考链接
强制记忆即可。
解答
- 解题
1、切换环境
kubectl config use-context kubernetes
2、配置
kubectl edit deployment front-end
…
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- name: http #额额,这里要加一个-横杠的。。。
protocol: TCP #protocol不写也是可以的,因为默认就是TCP
containerPort: 80
…
kubectl expose deployment front-end --port=80 --target-port=80 --type=NodePort --name=front-end-svc #注意:这里--name(不要忘记了。。。。)svc类型:NodePort/ClusterIP; --port是svc的端口号,--target-port是deployment里pod的容器的端口号
#验证:(看下他们的SELECTOR标签是否一致)
kubectl get svc front-end-svc -owide
kubectl get deployment front-end -owide
curl 节点名/节点ip:NodePort
curl svcIP:port
- 答题技巧
无链接,理解记忆即可;
📍 另一个版本(知道即可)
第5题 Ingress创建(拷贝yaml)📍(注意yaml位置)
考点:Ingress 的创建
考题
-k:跳过SSL证书检测
-L:跟随跳转,比如网站做了重定向,不加这个选项的话只会看到一个302的访问代码就结束了,加上的话会看到完整的跳转情况
参考链接
⚠️ yaml路径:
参考资料:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/
解答
- 课件答案
1、切换环境
kubectl config use-context k8s
2、配置
vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pong
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
#如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
# 注意,如果等待5min后,这个还是出不来Ip时,可以看下那个hello服务类型是不是ClusterIP类型,如果不是,请修改为ClusterIp
3、验证
kubectl get ingress -ning-internal
curl -kL internal_IP/hello
- 答题技巧
1.直接从官方代码复制过来修改下即可;
2.如果测试结果没有hello输出,则可以尝试删除annotations字段内容;
3.注意,一般自己的学习环境是看不到这个ingress 的 IP 地址的,而考试环境是可以的;
- 官方yaml代码需要修改的地方
注意:ingress资源还要加上一个namesapce的。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pong
namespace: ing-internal
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /hello
pathType: Prefix
backend:
service:
name: hello
port:
number: 5678
📍 另一版本
暂时忽略。。。
第6题 扩容 deployment 副本数量(强制记忆,送分题
)
(考题知识点:kubernetes管理应用声明周期pod)4’
考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl scale deployment -h
https://kubernetes.io/zh-cn/docs/tasks/run-application/scale-stateful-set/
解题
1、切换环境
kubectl config use-context k8s
2、配置
kubectl scale deployment loadbalancer --replicas=5
3、验证
kubectl get po
kubectl get deployment
- 这里可以先检查下pod数量哈哈
第7题 调度 pod 到指定节点(强制记忆,送分题
)
考点:nodeSelect 属性的使用
考题
参考链接
解答
参考资料:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/
https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ 这个需要打开pod的链接。。。nodeSelector那里的链接不见了的。。。。
- 解题
1、切换环境
kubectl config use-context k8s
2、配置
vim nodeSelector.yaml
aoiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx-kusc00401
image: nginx
nodeSelector: #这个是和containers同一级别的。
disk: ssd
kubectl apply -f nodeSelector.yaml
# kubectl label node node01 disk=ssd 打标签
# kubectl get node --show-lables
3、验证
kubectl get po -owide
- 答题技巧
直接打开书签,拷贝yaml,删除2处内容,并修改pod名称即可,很简单;
。。。注意下:这个网址是改变了的。。。
📍 另一版本
第8题 查看可用节点数量(强制记忆,送分题
)
考点:检查节点角色标签,状态属性,污点属性的使用
考题考题
参考链接
没必要参考网址,使用-h 帮助更方便。
kubectl -hD
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/
解答
1、切换环境
kubectl config use-context k8s
2、配置
kubctl describle nodes $(kubectl get node|grep Ready|awk '{print $1}')|grep Taints|grep -vc NoSchedule
3、验证
cat /opt/KUSC00402/kusc00402.txt
2
- 答题技巧
1、自己测试过程
#统计all准备就绪的节点
[root@kubernetes-master ~]#kubectl get nodes|grep Ready
kubernetes-master Ready control-plane,master 43d v1.21.2
kubernetes-node1 Ready <none> 43d v1.21.2
kubernetes-node2 Ready <none> 43d v1.21.2
[root@kubernetes-master ~]#kubectl get nodes|grep Ready|awk '{print $1}'
kubernetes-master
kubernetes-node1
kubernetes-node2
[root@kubernetes-master ~]#
#统计没有打上污点的节点
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
Taints: <none>
Taints: <none>
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -v NoSchedule
Taints: <none>
Taints: <none>
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint|grep -cv NoSchedule
2
#最终代码
[root@kubernetes-master ~]#kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule
2
kubectl describe node $(kubectl get nodes|grep Ready|awk '{print $1}') |grep Taint|grep -vc NoSchedule > /opt/KUSC00402/kusc00402.txt
2.如果不熟悉shell的话,那么手动统计应该也可以;
[root@kubernetes-master ~]#kubectl get node
NAME STATUS ROLES AGE VERSION
kubernetes-master Ready control-plane,master 43d v1.21.2
kubernetes-node1 Ready <none> 43d v1.21.2
kubernetes-node2 Ready <none> 43d v1.21.2
[root@kubernetes-master ~]#kubectl describe nodes |grep Taint
Taints: node-role.kubernetes.io/master:NoSchedule
Taints: <none>
Taints: <none>
[root@kubernetes-master ~]#
3.
-c代表统计个数;
污点tag也不全是NoSchedule;
📍 另一版本
第9题 创建多容器的 pod(强制记忆,送分题
)
考点:pod 概念
考题
参考链接
答题
1、配置环境
kubectl config use-context k8s
2、配置
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kucc4
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
- name: memcached
image: memcached
kubectl apply -f pod.yaml
3、验证
kuebctl get po
- 答题技巧
这道题简单,直接写就好;
📍 另一版本
第10题 创建 PV(拷贝yaml)📍(注意yaml位置)
考点:hostPath 类型的 pv
考题
参考链接
⚠️ 注意:官方yaml位置
官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:
解答
参考资料:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
1、切换环境
kubectl config use-context hk8s
2、配置
vim pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-data
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/srv/app-data"
kubectl appy -f pv.yaml
3、验证
kubectl get pv
- 答题技巧
这个是直接创建pv的,不需要去用;
把标签和存储类给去掉;
📍 另一版本
第11题 创建PVC(拷贝yaml)📍(注意yaml位置)
pvc 的创建 class 属性的使用,–record 记录变更
考题
参考链接
⚠️ 注意:官方yaml位置
官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:
解答
参考资料:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
1、切换环境
kubectl config use-context ok8s
2、配置
vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-volume
spec:
storageClassName: csi-hostpath-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: pv-volume
containers:
- name: web-server
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
kubectl apply -f pvc.yaml
3、验证
kubectl get pvc
kubectl get pv
kubectl get po
#kubectl edit pvc pv-volume --config-save #淦。。。。。是--save-config ,自己写错了。。。。
kubectl edit pvc pv-volume --save-config #可能要等个1分钟的时间才会发生变化;
# kubectl edit pvc pv-volume --record 这种方法也是可以的。。。。
70Mi
- 解题技巧
这里会用到存储类,会动态的供给;
1.先创建一个pvc
2.再创建一个pod
端口这边写不写都无所谓:在写svc时候,如果你没指定--target-port的话,那么就会以你定义的为准;
volumes定义在上面和下面都无所谓,只要和container同级就好;
kubectl get pvc,可能要等个1分钟的时间才会发生变化;
📍 另一版本
第12题 获取 Pod 错误日志(强制记忆,送分题
)
考点:kubectl logs 命令
考题
参考链接
参考资料:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
没必要参考网址,使用-h 帮助更方便。
kubectl -h
https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#examine-pod-logs
解答
1、切换环境
kubectl config use-context k8s
2、配置
kubectl logs bar |grep file-not-found > /opt/KUTR00101/bar
3、验证
cat /opt/KUTR00101/bar
- 答题技巧
记住命令即可;
第13题 使用 sidecar 代理容器日志(边车)(强制记忆)要注意下:🌹
考点:pod 两个容器共享存储卷
考题
参考链接
解答
参考资料:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/
- 注:由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply
原yaml文件:
1、切换环境
kubectl config use-context k8s
2、配置
kubectl get po leagcy-app -oyaml > sidecar.yaml #由于 Pod 不能在线增加容器,可先导出 yaml 再添加最后 apply
kubectl delet po leagcy-app
vim sidecar.yaml
……
metadata:
name: leagcy-app
spec:
volumes:
- name: varlog
emptyDir: {}
containers:
- name: xx
image: xx
volumeMounts:
- name: varlog
mountPath: /var/log
- name: sidecar
image: busybox
args: [/bin/sh, -c, "tail -n+1 -f /var/log/legacy-app.log"] #。。。。里面是单引号。。。
volumeMounts: #要注意:volumes和volumeMounts这里都是复数。。。
- name: varlog #这里是有一个name的。。。
mountPath: /var/log
kubectl apply -f sidecar.yaml
3、验证
kubectl logs legacy-app
kubectl exec legacy-app -c xx -- tail -f /var/log/legacy-app.log
kubectl exec legacy-app -c siecar -- tail -f /var/log/legacy-app.log
解题yaml:
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: leagcy-app
image: busybox
args:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/legacy-app.log;
i=$((i+1));
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: sidecar
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -F /var/log/legacy-app.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}
- 答题技巧
这个题目也是争议比较的大一个题目,能做出来的人很少;
考题中文翻译描述的问题很奇怪。。;
sidecar边车容器不是作为主容器,而是辅助主容器做一些功能;
注意:kubectl get pod big-corp-app -o yaml > big-corp-app.yaml 这里面的东西一个都不要删;
这个地方也容器出错;
加这一块比较容易出错,加着加着,这个对齐方式找不到了;
导出来,找到你的位置,然后直接粘贴过来修改即可;
这一块,比较考验你的yaml能力;
验证的话:
1.可以查看下kubectl get pod 看刚才那个pod是否有2个容器
2.用tail -f 查看下边车容器是否会有日志文件持续输出;
📍 另一版本
第14题 升级集群(强制记忆)
考点:如何离线主机,并升级控制面板和升级节点
考题
题目要求不升级 etcd,这里手动补上。
参考链接
没必要参考网址,建议多练习,背过命令就行。
记不清的,可以使用 kubectl -h 来帮助。
如果非要参考,可以按照下面方法。
依次点击 Tasks → Administer a Cluster → Administration with kubeadm → Upgrading kubeadm clusters (看不懂英文的,可右上角翻译成中文)
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
解答
原课件答案
- 解题
1、切换环境
kubectl config use-context mk8s
2、配置
#升级kueadm
kubectl drain mk8s-master-0 --ignore=daemonsets
ssh mk8s-master-0
sudo -i
apt install kubeadm=1.20.1-00 -y
kubeadm upgrade plan
#这里可以先查下的:apt-cache show|grep kubeadm
#kubeadm upgrade install v1.20.1 #。。。淦,这个写错了。。。。。。。是apply,并且要加上--ectd-ugrade=false。。。。。。题目要求不升级 etcd; 注意下这2个版本号写法的区别。。。。
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false
#升级kubelt
apt install kubelet=1.20.1-00 kubectl=1.20.1-00 -y
systemctl restart kubelet #这里要重启下kubelt的,切记。。。
exit
exit
kubectl uncordon mk8s-master-0
3、验证
kubectl get node -owide
kubectl --version
kubelet --version
参考资料:https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadmupgrade/
- 答题技巧
03 升级 kubernetes 版本; 7分 简单;有链接但 强制记忆;
这个使用的是ubuntu操作系统;(唯一 一个需要用到ubuntu命令的考题;)
ubuntu使用sudo -i 切换root,使用apt-get安装软件包;
ununtu默认禁止root登录;
因此,考试时,只有升级kubernetes这一道题需要用到ubuntu系统,其他都不需要用到;
直接用sudo -i切换到root用户,再开始答题;(不需要输入密码)
注意:这里切换kubernetes集群后,直接使用`kubectl drain kubernetes-master-0 --ignore-daemonsets`命令进行配置,不需要先ssh到mkubernetes-master-0节点;(这个需要注意下)
确定要升级到哪个版本
使用操作系统的包管理器找到最新的稳定 1.21:
apt update
apt-cache policy kubeadm
# 在列表中查找最新的 1.21 版本
# 它看起来应该是 1.21.x-00,其中 x 是最新的补丁版本
#ubuntu和centos查看kubeadm最新版本的方法
apt-cache policy kubeadm #ubuntu查看方式
1.20.5-00
yum list --showduplicates kubeadm --disableexcludes=kubernetes #centos查看方式
1.21.2-0
#注意如下的2种格式:
ubuntu系统:1.20.5-00
centos系统:1.21.2-0
#注意:
ubuntu中apt install kubeadm=1.20.1-00 –y或者apt-get install kubeadm=1.20.1-00 –y都是可以的;(我们这里使用apt install方式)
📍 另一版本
第15题 etcd 备份与恢复(强制记忆,2个步骤)
考点:etcd 的备份和还原命令
考题
参考链接
参 考 资 料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
解答
- 解题
⚠️ 如下2条命令很容易忘记呀,要多次记忆呀。。。。。(特别注意下这个题目。。。)
1、确定当前环境
kubectl get node
2、配置
#备份
ETCDCTL_API=3 etcdctl snapshot save /data/backup/etcd-snapshot.db --endpoints=https://127.0.0.1:2379 --cacert=xx --cert=xx --key=xx
#还原
sudo -i
systemctl stop etcd
systemctl cat etcd #。。。。。淦:注意这里是systemctl cat etcd
mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak # 。。。。淦:注意这里是default.etcd
exit
ll /data/backup/etcd-snapshot-previous.db
sudo ETCDCTL_API=3 etcdctl restore /data/backup/etcd-snapshot-previous.db --data-dir=/var/lib/etcd/default.etcd
chown -R etcd:etcd /var/lib/etcd #淦。。。。注意,不要忘记了。。。。
syetmctl start etcd
注:执行备份命令如果提示没证书文件,exit 退回上一步操作
参考资料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configureupgrade-etcd/
- 答题技巧
04 etcd 备份与恢复 ;7分 简单;有链接但 强制记忆;(此题可先搁置)!!!
#备份etcd
etcdctl snapshot save --cacert --cert --key
#恢复etcd
关闭etcd服务
确认etcd数据目录:systemctl cat etcd
etcdctl snapshot restore --data-dir
给权限: /var/lib/etcd
启动etcd
恢复:这里需要给大家强调一下
1.这里恢复用的是已经存在的一个备份文件,而不是说我们之前备份的那个文件;
2.这里的etcd是二进制方式部署的,重启需要使用systemctl start etcd命令;
3.这个ectd的备份与恢复考题:恢复这里一直是个坑;你恢复了之后,这个etcd起不来了,这个就JJ了。。。。;
4.这个题是个坑:可以直接放弃,把稳起见;(可以做个etcd备份,恢复就不需要做了。。。可以看情况)
📍 另一版本
先忽略。。。。
第16题 排查集群中故障节点(强制记忆,送分题
,一定要做完这道题,分值最高,最简单)
考题
参考链接
强制记忆。
解答
1、切换环境
kubectl config use-context wk8s #考试时切到这道题的集群后,那个 node 就是异常的。 真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。
2、配置
kubectl get node #查看Not Ready的node节点
ssh wk8s-node-0
sudo -i
systemctl status kubelet
systemctl start kubelet
systemctl enable kubelet
exit #退出root用户
exit #退出故障节点
3、验证
kubectl get node
#jounarlctl -u kubelet 查看kubelet日志
- 答题技巧
通过 get nodes 查看异常节点,登录节点查看 kubelet 等组件的 status 并判断原因。
真实考试时,这个异常节点的 kubelet 服务没有启动导致的,就这么简单。
考试时切到这道题的集群后,那个 node 就是异常的。
如果systemctl start kubelet没起来的话,就要看它的日志了;(一般是会起来的)
如果kubelt的日志没起来,该如何看kubelet的日志?
journalctl -u kubelet
第17题 节点维护(强制记忆,送分题
)
考点:cordon 和 drain 命令的使用
考题
参考链接
强制记忆就好。
解答
1、切换环境
kubectl config use-context ek8s
2、配置
#kubectl coredon ek8s-node-1 #淦:我一直把这个单词拼错。。。。。;是cordon,不是coredon。。。;
📍 kubectl cordon ek8s-node-1 #设置次节点为不可调度
kubectl drain ek8s-node-1 --ignore-daemonsets #设置次节点为不可调度,并且排空次节点
#如果上面命令报错就加上一个 --delete-local-data --force
kubectl drain ek8s-node-1 --ignore-daemonsets --delete-local-data --force
kubectl drain ek8s-node-1 --ignore-daemonsets --delete-emptydir-data --force
3、验证
kubectl get node
⚠️ 注意下就好:
- 答题技巧
注意:
执行`kubectl drain ekubernetes-node-1 --ignore-daemonsets`这条命令其实就包括了上面设置为不可调度,但是考试尽量按考试题目和给出的答案来;
kubectl uncordon kubernetes-master #取消不可调度
2、考试注意事项
kubecctl 命令自动补全
apt install bash-completion
source <(kubectl completion bash)
能复制就不要手敲代码;
能用yaml就不要手敲代码;
要善于用考试环境的记事本的;
👉 注意:不允许访问自己的浏览器书签
2022年8月28日
如何一步步找到找官网资料
- 打开火狐浏览器
- 输入k8s官网:https://kubernetes.io/
- 点击
Docementation
:
https://kubernetes.io/docs/reference/
https://kubernetes.io/zh-cn/docs/reference/
- 这里也是可以直接搜索的
考试时间及通过分数
2 个小时,17 道题目,66 分通过;
有效期。
考试房间环境
考试需要在封闭无人的房间进行,要求桌面没有其他东西;
考试前注意事项
提前 15 分钟左右就可以在倒计时页面进入考试系统了,尽量提前进入,以便监考老师我们的环境。刚开始考官会让你出示证件,然后考官会让你拿摄像头环绕考试环境一周,
再然后考官会让我们打开共享屏幕和摄像头,并且摄像头;最后考官会告诉我们一些注意事项,比如记事本功能,以及可以查阅哪些网站资料等等。考试过程中如有意外状况,可以在线与考官交流(文字),并争取你应有的权益;
开始需要出示证件,有护照最好。如果没有可以使用身份证;如果有必要确认你的英文名可以用信用卡给他们看;
考试网络问题
在线考试,考试系统国内访问速度比较慢,需要一个稳定网络环境(强烈建议考试时间约在早上,越早越好,因为早上网络比较稳定,如果你的网络访问预约考试系统很慢,建议购买可翻墙工具);中途掉一2次网是没问题的,原来做的数据会被保存的;
- 考试时间:24h都可以预约,不分节假日(但其实后面预约时就不是24小时了……)
vpn问题
考试是可以查阅k8s官网的
考试中是可以查阅 kubernestes.io 官网(主要是概念栏),并且可以使用事先定义好****的书签,来快速查找到自己之前查看过得内容;
只允许打开两个标签页,一个是考试系统,另一个建议打开官网文档 https://kubernetes.io/zh/docs/home/;
考试过程中是可以切换对照下题目要求的
在考试过程中,可以选择国家语言,选择中文,可能有的翻译不是很准确,可以切换对照下;
考试环境是用的ubuntu系统
kubernetes 集群环境采用 ubuntu 系统,不用担心,会普通用户执行 sudo -i 切 root 就行了,除 了 kubernetes 升级版本这题用了 apt 软件包管理执行安装外,其他题操作都一样。
自己的当前所在节点和登录用户
考试考试环境是多k8s集群的,切记要注意切命名空间
考试全部都是实际操作题,会给出多个 kubernetes 集群,要求你在指定集群完成指定的操作;
最后,考试环境中一定要留意 kubernetes 环境,尤其是主机名,默认可以使用 ssh 进入 node, 进入 node 做完题目后记得退出,不然节点内是无法 ssh 到下一个题目的 node 当中去。
注意:切记要注意切命名空间
考试环境中可能有4-套kubernetes集群环境,为了防止考试题目冲突,因此在每做一个题目之前,必须先执行切kubernetes集群命令,查看并确认后,方可开始进行答题;
注意,可通过kubectl get node
输出的NAME字段和考题中设置配置环境的保持一致即可。
有时可能出现要做的这道题和上一个考题的kubernetes集群是同一套,切不切都无所谓,保险起见还是建议都要且,并确认后,开始进行答题;
要注意题干里的小细节
答题技巧
平时多敲多练习,熟练使用 kubectl,了解 kubernetes 资源 yaml 文件结构,把下面提供的真题练习好;
可以事先把官方文档示例页面放到浏览器的收藏夹里,这样遇到相关的考题就可以快速打开参考;
考试系统里有记事本,多多利用,临时存储;
考试中的终端可以使用复制黏贴,尽量避免手敲 yaml,多使用命令创建,例如 Pod、Service、Deployment;
命令参数不记得,多查看帮助信息,例如 kubectl --help,etcdctl --help 的命令,都有示例;
-
建议:要尽早考试,课程学习完后,就要马上考试;(尽量不要去拖)
-
cka考试:可能做一些微调,例如某些路径或者字段,要看清楚!
-
监控摄像头问题:🍀
监控摄像头:720p,1080p以上的就可以了;
60/70快钱;
笔记本自带的摄像头可以吗?–一般都可以的,只要能看清楚你身份证上的名字就可以了;https://www.onlinemictest.com/webcam-test/
这个是只能用来对外置摄像头测试; -
windows桌面不需要清理,因为是在web里考试的;
-
收藏栏不要太明显了,尽量按照技术去标记; -
注意:我们没必要去测试的,考试也没要求进行测试,只要你保证自己写的没问题就好;
-
考试:不管你是用yaml还是用命令行,只要你把提议能做出来就好;
考试系统界面
答题结束后,在 Exam Controls 里结束考试。
哈哈,还有模拟环境的
3、CKA考试感受
- 提前考试30min就可以登录考试系统了,老师会进行一系列的检查操作。
- 如果第一次你网站上填的那个报考名字,在老师核验身份时,一直核验不通过的话。不要担心,下次再拷考呗,一般问题不大;
- 最好给自己的pc配一个外置摄像头,不然你就要抱着自己的电脑然后环绕考试环境四周了,很不方便;
- 考试前会有一系列比较繁琐的事情,例如安装psi安全浏览器(如果自己电脑有vmware workstation软件,尽量要提早卸载哦,不会会检测通不过),老师核对你的姓名,检查周围环境等等,耐心按流程昨晚就好。即使超过了考试时间,后面也会给你给足2小时;
- 考试过程,etcd那个备份提,可以做下备份,还原就不要做了哈哈,安全起见;
- ingress那个题目,自己一直没出效果,很奇怪,后面也就没去排查了;
- 其他有模糊的题目,可以在terminal终端创建一个error.txt文件记录下,后面回去再看下;
- 自己把cka的17道题牢记于脑子里,一般问题不大的哈哈。
其他任何有关于cka考试题目及现场问题的话,欢迎小伙伴加微信交流哦。
附件
链接:https://pan.baidu.com/s/1sJa12MEx9vE2RUw33X-TyQ?pwd=nrl4
提取码:nrl4
–来自百度网盘超级会员V7的分享
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 博客
www.onlyyou520.com
🍀 知乎
https://www.zhihu.com/people/foryouone
🍀 语雀
https://www.yuque.com/xyy-onlyone
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!
更多推荐
所有评论(0)