img

目录

文章目录

我的CKA证书

img

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 授权模型的理解。

考题

image-20210713215013883

参考链接

没必要参考网址,使用-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/

解答
  • 考题答案

image-20210726093520206

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来验证下:

image-20220826182858841

  • 答题技巧
#说明:
解题三步骤:
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 命令的使用

考题

image-20210716071106131

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl top pod -h

https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods

解答

image-20210716071115456

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’

考题

image-20210715055756028

双重否定就是肯定,所以最后两句话的意思就是:
仅允许端口为 8080 的 pod 访问。
仅允许 my-app命名空间中的 pod 访问。

image-20220828150133091

⚠️ 码的,这个翻译起来真的有点别扭。。。。。

参考链接

image-20220826190158214

image-20220828144818768

image-20220831221542787

解答
  • 原课件答案

image-20210727194549671

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

image-20210715061254581

删除egress,ingress里的ipBlock,podSelector部分,修改spec.podSelector后面为空。

📍 另一个版本

image-20220826191259912

image-20220826191237207

检查:

image-20220828150738841

第4题 SVC 暴露应用(强制记忆)

考点:将现有的 deploy 暴露成 nodeport 的 service。

考题

image-20210715061357280

参考链接

强制记忆即可。

解答

image-20210728122902164

  • 解题
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
  • 答题技巧
无链接,理解记忆即可;

image-20210715061711377

📍 另一个版本(知道即可)

image-20220826192006634

image-20220826192012789

image-20220826192019623

image-20220826192049499

image-20220826192205770

image-20220826192300101

image-20220826192356066

image-20220826192452561

第5题 Ingress创建(拷贝yaml)📍(注意yaml位置)

考点:Ingress 的创建

考题

image-20210715062048831

-k:跳过SSL证书检测
-L:跟随跳转,比如网站做了重定向,不加这个选项的话只会看到一个302的访问代码就结束了,加上的话会看到完整的跳转情况

参考链接

image-20220826192700693

image-20220826192709136

⚠️ yaml路径:

image-20220831072755586

image-20220831072827404

image-20220826192717358

image-20220826192801196

参考资料:https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

解答
  • 课件答案

image-20210715075527325

image-20210715075534207

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的。

image-20210715074659516

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

📍 另一版本

image-20220826193229201

image-20220826193357208

image-20220826193425078

image-20220826193505875

image-20220826193534586

暂时忽略。。。

image-20220826193600391

image-20220826193607337

第6题 扩容 deployment 副本数量(强制记忆,送分题

(考题知识点:kubernetes管理应用声明周期pod)4’

考题

image-20210715075630344

参考链接

没必要参考网址,使用-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数量哈哈

image-20220827100243382

第7题 调度 pod 到指定节点(强制记忆,送分题

考点:nodeSelect 属性的使用

考题

image-20210715080020951

参考链接

image-20220827100608736

image-20220827100618836

image-20220827100631351

解答

image-20210715173935292

参考资料: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名称即可,很简单;

。。。注意下:这个网址是改变了的。。。

image-20210801142311364

📍 另一版本

image-20220827101147988

image-20220827101215461

第8题 查看可用节点数量(强制记忆,送分题

考点:检查节点角色标签,状态属性,污点属性的使用

考题考题

image-20220827101359396

参考链接

没必要参考网址,使用-h 帮助更方便。

kubectl -hD

https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/

解答

image-20220827101421474

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;

📍 另一版本

image-20220827102130573

image-20220827102031426

image-20220827102112239

第9题 创建多容器的 pod(强制记忆,送分题

考点:pod 概念

考题

image-20210715232803767

参考链接

image-20220827102407895

image-20220827102416424

image-20220827102424905

答题

image-20210715233658685

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
  • 答题技巧
这道题简单,直接写就好;

📍 另一版本

image-20220827102451524

image-20220827102522055

第10题 创建 PV(拷贝yaml)📍(注意yaml位置)

考点:hostPath 类型的 pv

考题

image-20210715233910336

参考链接

image-20220827102708927

⚠️ 注意:官方yaml位置

官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:

image-20220831065333803

image-20220831065422742

image-20220827102740110

image-20220828163341573

解答

image-20210715233927014

参考资料: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的,不需要去用;
把标签和存储类给去掉;

image-20210803194920979

📍 另一版本

image-20220827102819259

image-20220827102845801

第11题 创建PVC(拷贝yaml)📍(注意yaml位置)

pvc 的创建 class 属性的使用,–record 记录变更

考题

image-20210716053710957

参考链接

image-20220827103747875

⚠️ 注意:官方yaml位置

官网-任务-配置Pods和容器-配置Pod以使用pv作为存储:

image-20220831065333803

image-20220831065422742

image-20220827103803095

image-20220827103825624

image-20220828165031599

解答

image-20210716053720936

image-20210716053730672

参考资料: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分钟的时间才会发生变化;

image-20210803200306850

image-20210803200422968

📍 另一版本

image-20220827103859360

image-20220827103913559

image-20220827103923459

image-20220827103951021

image-20220827104021085

image-20220827104136823

第12题 获取 Pod 错误日志(强制记忆,送分题

考点:kubectl logs 命令

考题

image-20220827104211600

参考链接

参考资料: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

解答

image-20220827104229219

1、切换环境
kubectl config use-context k8s

2、配置
kubectl logs bar |grep file-not-found > /opt/KUTR00101/bar

3、验证
cat /opt/KUTR00101/bar
  • 答题技巧
记住命令即可;

image-20220827104322098

第13题 使用 sidecar 代理容器日志(边车)(强制记忆)要注意下:🌹

考点:pod 两个容器共享存储卷

考题

image-20210716060519641

参考链接

image-20220827152223020

image-20220827152251569

解答

image-20210716060526856

image-20210716060537735

参考资料: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 查看下边车容器是否会有日志文件持续输出;

image-20210716064409073

image-20210716061301960

📍 另一版本

image-20220827152204308

image-20220827152354962

image-20220827152413457

image-20220827152557484

image-20220827152603819

image-20220827152617860

image-20220827152720598

第14题 升级集群(强制记忆)

考点:如何离线主机,并升级控制面板和升级节点

考题

image-20210714231652952

题目要求不升级 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/

image-20220827153142854

image-20220827153157918

image-20220827153206116

解答

原课件答案

image-20210726144930096

image-20210726145241293

  • 解题
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.21apt 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方式)

image-20210715053343964

📍 另一版本

image-20220827153054119

image-20220827153312838

image-20220827153343984

image-20220827153408035

image-20220827153432863

image-20220827153500900

image-20220827153552273

第15题 etcd 备份与恢复(强制记忆,2个步骤)

考点:etcd 的备份和还原命令

考题

image-20210715054658138

参考链接

image-20220827153743928

image-20220827153751485

image-20220827153854686

image-20220827153859845

参 考 资 料 : https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

解答

image-20210726212744238

  • 解题

⚠️ 如下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备份,恢复就不需要做了。。。可以看情况)

📍 另一版本

image-20220827153839310

image-20220827154142707

image-20220827154225495

image-20220827154314865

先忽略。。。。

image-20220827154325551

image-20220827154336478

image-20220827154347606

image-20220827154400741

image-20220827154410399

第16题 排查集群中故障节点(强制记忆,送分题,一定要做完这道题,分值最高,最简单)

考题

image-20210716073857712

参考链接

强制记忆。

解答

image-20210716073904573

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 命令的使用

考题

image-20210714230141984

参考链接

强制记忆就好。

解答

image-20210726142200757

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

⚠️ 注意下就好:

image-20220827155508073

  • 答题技巧
注意:
执行`kubectl drain ekubernetes-node-1 --ignore-daemonsets`这条命令其实就包括了上面设置为不可调度,但是考试尽量按考试题目和给出的答案来;

kubectl uncordon kubernetes-master #取消不可调度

2、考试注意事项

kubecctl 命令自动补全

image-20220826124820145

apt install bash-completion

source <(kubectl completion bash)

能复制就不要手敲代码;

能用yaml就不要手敲代码;

要善于用考试环境的记事本的;

👉 注意:不允许访问自己的浏览器书签

2022年8月28日

image-20220826124253913

如何一步步找到找官网资料

  1. 打开火狐浏览器
  2. 输入k8s官网:https://kubernetes.io/
  3. 点击Docementation

image-20220826124934707

image-20220826125019113

https://kubernetes.io/docs/reference/

https://kubernetes.io/zh-cn/docs/reference/

image-20220826125032802

image-20220826125039714

  • 这里也是可以直接搜索的

image-20220828100237978

考试时间及通过分数

 2 个小时,17 道题目,66 分通过

有效期。

image-20211128223905541

image-20211128224031940

考试房间环境

 考试需要在封闭无人的房间进行,要求桌面没有其他东西

考试前注意事项

提前 15 分钟左右就可以在倒计时页面进入考试系统了,尽量提前进入,以便监考老师我们的环境。刚开始考官会让你出示证件,然后考官会让你拿摄像头环绕考试环境一周,
再然后考官会让我们打开共享屏幕和摄像头,并且摄像头;最后考官会告诉我们一些注意事项,比如记事本功能,以及可以查阅哪些网站资料等等。考试过程中如有意外状况,可以在线与考官交流(文字),并争取你应有的权益;

 开始需要出示证件,有护照最好。如果没有可以使用身份证;如果有必要确认你的英文名可以用信用卡给他们看;

考试网络问题

 在线考试,考试系统国内访问速度比较慢,需要一个稳定网络环境(强烈建议考试时间约在早上,越早越好,因为早上网络比较稳定,如果你的网络访问预约考试系统很慢,建议购买可翻墙工具);中途掉一2次网是没问题的,原来做的数据会被保存的;

  • 考试时间:24h都可以预约,不分节假日(但其实后面预约时就不是24小时了……)

vpn问题

image-20220826124139518

考试是可以查阅k8s官网的

 考试中是可以查阅 kubernestes.io 官网(主要是概念栏),并且可以使用事先定义好****的书签,来快速查找到自己之前查看过得内容;

 只允许打开两个标签页,一个是考试系统,另一个建议打开官网文档 https://kubernetes.io/zh/docs/home/;

考试过程中是可以切换对照下题目要求的

 在考试过程中,可以选择国家语言,选择中文,可能有的翻译不是很准确,可以切换对照下;

考试环境是用的ubuntu系统

 kubernetes 集群环境采用 ubuntu 系统,不用担心,会普通用户执行 sudo -i 切 root 就行了,除 了 kubernetes 升级版本这题用了 apt 软件包管理执行安装外,其他题操作都一样。

自己的当前所在节点和登录用户

image-20220826123833007

考试考试环境是多k8s集群的,切记要注意切命名空间

image-20220826123856713

 考试全部都是实际操作题,会给出多个 kubernetes 集群,要求你在指定集群完成指定的操作;

 最后,考试环境中一定要留意 kubernetes 环境,尤其是主机名,默认可以使用 ssh 进入 node, 进入 node 做完题目后记得退出,不然节点内是无法 ssh 到下一个题目的 node 当中去。

注意:切记要注意切命名空间

​ 考试环境中可能有4-套kubernetes集群环境,为了防止考试题目冲突,因此在每做一个题目之前,必须先执行切kubernetes集群命令,查看并确认后,方可开始进行答题;

image-20210714211714465

注意,可通过kubectl get node输出的NAME字段和考题中设置配置环境的保持一致即可。

有时可能出现要做的这道题和上一个考题的kubernetes集群是同一套,切不切都无所谓,保险起见还是建议都要且,并确认后,开始进行答题;

image-20210714211640196

要注意题干里的小细节

image-20220826124730945

答题技巧

 平时多敲多练习,熟练使用 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还是用命令行,只要你把提议能做出来就好;

考试系统界面

image-20210713210027523

答题结束后,在 Exam Controls 里结束考试。

哈哈,还有模拟环境的

image-20220826124834190

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的分享

image-20220915161243491

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码
x2675263825 (舍得), qq:2675263825。

image-20211002091450217

🍀 微信公众号
《云原生架构师实战》

image-20211002141739664

🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20211002092344616

🍀 博客
www.onlyyou520.com

image-20220513150311181

🍀 知乎

https://www.zhihu.com/people/foryouone

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20220915160734622

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20220717221838425

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐