说明:
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
本期的分享就到这里,过两天会出真题的其他题目,码字不易,希望大家点点关注,感谢!