Kubernetes CKA考试和真题(上)

时间:2024-10-28 08:00:23

说明:
CKA认证含金量的认识
CKA认证考试是专为Kubernetes管理员、云管理员和其他管理Kubernetes实例的IT专业人员而设的。已获得认证的K8s管理员具备了进行基本安装以及配置和管理生产级Kubernetes集群的能力。这个证书本身是有含金量的,但是就像红帽认证那些一样,考的人多了,也就有点烂大街的感觉。
我是这么理解的:就像以前只有少部分人练习了《九阴真经》,现在行业内人人都可以花钱买到一本。但是《九阴真经》就真的弱吗?那肯定不弱,只是业内的整体水平变高了。所以,趁大部分人还没有练《九阴真经》,我们先练起来走在前面,并不都是图个虚名,因为它确实实用才学。

考试介绍

考试形式

在线实操考试,考试前会让你登陆到考试系统(需要科学network),在网页上实操命令答题。

考试大纲

很多资料都这么说,但是考试就10来道题,只能说有几率考到,不会都考。
, Configuration & Validation 安装,配置和验证12%

  • 设计一个k8s 集群
  • 安装k8s master 和 nodes
  • 配置安全的集群通信
  • 配置高可用的k8s集群
  • 知道如何获取k8s的发行的二进制文件
  • 提供底层的基础措施来部署一个集群
  • 选择一个网络方案
  • 选择你的基础设施配置在你的集群上
  • 配置端对端的测试
  • 分析端对端测试结果
  • 运行节点的端对端测试

Concepts 核心概念 19%

  • 理解k8s api原理
  • 理解k8s 架构
  • 理解services和其它网络原理

Lifecycle Management 应用生命周期管理 8%

  • 理解Deployment, 并知道如何进行rolling update 和 rollback
  • 知道各种配置应用的方式
  • 知道如何为应用扩容
  • 理解基本的应用自愈相关的内容

网络 11%

  • 理解在集群节点上配置网络
  • 理解pod的网络概念
  • 理解service networking
  • 部署和配置网络负载均衡器
  • 知道如何使用ingress 规则
  • 知道如何使用和配置cluster dns
  • 理解CNI

存储 7%

  • 理解持久化卷(pv),并知道如何创建它们
  • 理解卷(volumes)的access mode
  • 理解持久化卷声明(pvc)的原语
  • 理解k8s的存储对象(kubernetes storage objects)
  • 知道如何为应用配置持久化存储

调度 5%

  • 使用label选择器来调度pods
  • 理解Daemonset的角色
  • 理解resource limit 会如何影响pod 调度
  • 理解如何运行多个调度器, 以及如何配置pod使用它们
  • 不使用调度器, 手动调度一个pod 查看和显示调度事件events
  • 知道如何配置kubernetes scheduler

安全 12%

  • 知道如何配置认证和授权
  • 理解k8s安全相关原语
  • 理解如何配置网络策略(network policies)
  • 配合使用镜像的安全性定义安全上下文
  • 安全的持久化保存键值

Maintenance 集群维护 11%

  • 理解k8s的集群升级过程
  • 促进操作系统的升级
  • 补充备份和还原的方法论

/ Monitoring 日志/监控 5%

  • 理解如何监控所有的集群组件
  • 理解如何监控应用
  • 管理集群组件日志
  • 管理应用日志

问题排查 10%

  • 排查应用失败故障
  • 排查控制层(control panel)故障
  • 排查工作节点(work node)故障
  • 排查网络故障

考试监考

考试过程中会有一个老外监考考试者,会要求你允许浏览器捕捉你的屏幕信息,允许笔记本摄像头监控你的人脸,考试过程需要随时保持人脸在画面内。不过也可以举手向考官示意去上厕所。

考试费用

300美金左右。

及格和证书发放

考试成绩在75分以上才会发放证书,一般会在考试后48小时内出结果并发证书到你的邮箱。要是第一次考不过会有一次重新预约补考机会。

证书分享

在这里插入图片描述

考试真题1-5

授权

切换集群环境:kubectl config use-context k8s
Context
为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的Namespace的特定ServiceAccount
Task:
创建一个名为deployment-clusterrole且仅允许创建一下资源类型的新ClusterRole:
Deployment
StatefulSet
DaemonSet
在现有的namespace app-team1中创建一个名为cicd-token的新ServiceAccount
限于namespace app-team1,将新的ClusterRole deployment-clusterrole绑定到新的ServiceAccount cicd-token
解题答案:

kubectl config use-context k8s
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets
kubectl create serviceaccount cicd-token -n app-team1
kubectl create rolebinding cicd-token --serviceaccount=app-team1:cicd-token --clusterrole=deployment-clusterrole -n app-team1
测试服务账号(SA)权限:
kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.设置节点为不可用

切换集群环境:kubectl config use-context ek8s
tasks:将名为eks-node-1的节点调度为不可用,并重新调度该节点上运行的所有pods
解题答案:

kubectl config use-context ek8s
kubectl cordon ek8s-node-1 # 设置为不可调度
kubectl drain ek8s-node-1 --ignore-daemonsets # 驱逐节点上 Pod
# 如果执行 drain 提示错误,根据提示再加上选项,例如--delete-local-data --force

  • 1
  • 2
  • 3
  • 4
  • 5

3.升级k8s版本

切换集群环境:kubectl config use-context mk8s
Tasks:现有的Kubernetets运行在版本1.20.0,仅将主节点上的所有Kubernetes控制平面和节点组件升级到版本1.20.1
确保在升级前drain主节点,并在升级后uncordon主节点。
这个题目仍然是叫我使用mk8s集群。
可以使用以下命令连接到 主节点:

ssh  mk8s-master-0
  • 1

使用sudo获取更大的权限:

sudo -i
  • 1

另外,在主节点上升级kubelet和kubectl
解题:

kubectl config use-context mk8s
kubectl drain k8s-master-0 --ignore-daemonsets
ssh mk8s-master-0
sudo -i
apt install kubeadm=1.20.1-00 –y
kubeadm upgrade plan
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false # 题目要求不升级 etcd
kubectl uncordon k8s-master-0 
# 升级 kubelet 和 kubectl
apt install kubelet=1.20.1-00 kubectl=1.20.1-00 -y
systemctl restart kubelet
# 查看升级结果
kubectl get node
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

官方文档:/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

备份和恢复

此项目无需更改配置环境。但是,在执行此项目之前,确保已经返回初始点

[root@mk8s-master-0] # exit
[student@mk8s-master-0] $ exit
  • 1
  • 2

Task
首先,为运行在https://127.0.0.1:2379shang上的现有etcd实例创建快照并将快照保存到/data/backup/
为给定的实例创建快照,在考试环境预计能在几秒内完成。如果该操作似乎挂起,则命令可能有问题。用ctrl+c终止操作,然后重试。
然后还原位于/data/backup/的现有快照
提供了以下TLS证书和密钥,以通过etcdctl 连接到服务器。
CA证书:/opt/KUIN0021/
Client证书:/opt/KUIN0021/
Client密钥:/opt/KUIN0021/

解题:

# 备份
ETCDCTL_API=3 
etcdctl snapshot save /data/backup/ --endpoints=https://127.0.0.1:2379 --cacert=/opt/KUIN0021/ --cert=/opt/KUIN0021/ --key=/opt/KUIN0021/

# 恢复
systemctl stop etcd
systemctl cat etcd # 确认下数据目录
mv /var/lib/etcd/ /var/lib/etcd/
ETCDCTL_API=3 
etcdctl snapshot restore /data/backup/ --data-dir=/var/lib/etcd/
chown -R etcd:etcd /var/lib/etcd
systemctl start etcd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.网络策略

切换集群:

kubectl config use-context hk8s
  • 1

Task
在现有namespace my-app中创建一个名为allow-port-from-namespace的新的NetworkPolicy。
确保新的NetworkPolicy允许namespace my-app中的pods来连接到namespace demo-corp中的端口8080
进一步确保新的NetworkPolicy:
不允许对没有在监听端口8080的pods的访问
不允许不来自namespace my-app中的pods的访问
解题

kubectl config use-context hk8s
# 给命名空间打标签:kubectl label namespace big-corp name=demo-corp

apiVersion: networking./v1
kind: NetworkPolicy
metadata:
 name: allow-port-from-namespace
 namespace: my-app
spec:
 podSelector: {} 
 policyTypes:
 - Ingress
 ingress:
 - from:
 - namespaceSelector:
 matchLabels:
 name: demo-corp
 ports:
 - protocol: TCP
 port: 8080
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

本期的分享就到这里,过两天会出真题的其他题目,码字不易,希望大家点点关注,感谢!