K8s证书--运维之最佳选择
No
-Number-
01
一个月速通CKA
为了速通CKA,主要办了两件事情
1. 在官方的Killercoda上,练习CKA的题目。把命令敲熟悉。 //
https://killercoda.com/killer-shell-ckad
2. 使用K3s在多台虚拟机上快速搭建了K8s集群,然后在CSDN上找了别人分享的真题来练习。
别人两天速通CKA的教程
https://segmentfault.com/a/1190000044723122
考试有两次机会,挺严格的,需要开摄像头,拿着摄像头将整个房间扫描一遍。还需要开着全局的VPN才能流畅考试。
考试过程中无法切屏,人不能离开摄像头范围,也不能发出声音,嘴巴也不能做口型。
CKA 60分就算过,不过会有分数,过了就不会有分数,只有证书。
K8s的使用就是一些kubectl,大部分也就是一些yaml文件的配置。但是很多options会经常忘记,一些yaml的key-value格式也经常忘。
总之就是熟能生巧,使用K3s可以搭建集群来复习。或者直接使用Killercoda来复习。
No
-Number-
02
拿着CKA没找到工作
CKA全称是Certified Kubernetes Administrator。对应的中文就是K8s管理员。
在花了一个月考取了CKA证书之后,想凭着这个证书在Boss上收获更多的面试,甚至能找到一个K8s相关的offer。
然而联系了两百个K8s相关的岗位后,投递出去约100家后,只有不到7个的K8s相关面试。当然最后,也全挂了。
K8s的岗位,要么是大厂的K8s开发(golang开发),要么是大厂和小厂的K8s运维。
这两者都不是说,你有了CKA之后,就有面试机会。而是相关经验很匹配,然后又有CKA这个加分项,面试机会才会更大。
很多网站也在鼓吹CKA有多重要,多重要。甚至开始卖课了,零基础拿下CKA认证。但属实是有点贩卖焦虑了。
它直接给我贴大厂K8s相关岗位的薪资,用红圈圈出,CKA优先等字体。
要不要考CKA还是要认清楚三个现状
1. 要做K8s相关的开发,需要了解Kubernetes的很多原理,并且这些原理考完CKA,在遇到面试官提问K8s问题时,你也不一定会回答出来,因为在考CKA时不需要关注这些。
2. 要做K8s相关的开发,基本只有大厂才有,要求很高。不管是K8s相关的要求,还是golang相关的要求,都不低。几百个人的公司,对此要求也不低。
3. 要做K8s相关的运维,基本只有大厂和一些非IT类的企业需要运维K8s集群才有岗位。通常这些岗位会要求有各种各样的运维经验。数据库、Linux、各种中间件。并且运维招聘的人就很少。
总的来说,如果没有相关的经验,再去应聘。只拿着CKA证书,基本没有面试。
No
-Number-
03
Operator了解吗
在考完了CKA,想拿着这个证书去市场叱咤风云,但是各种没有听过的K8s八股文直接把我问懵了
问题:kubectl创建一个pod,kubectl背后发生的通信链路是?
回答:kubectl和kube-apiserver通信,api-server负责解析yaml文件
1. kube-apiserver --- kubectl直接与apiserver交互。间接和其它组件交互
2. etcd --- 由kube-apiserver直接与etcd交互
3. kubelet --- 这是宿主机的进程,负责与容器运行时交互
4. kube-controller-manager --- 重点关注,因为没有在图片上体现出来 和kube-apiserver交互,主动watch controller,确保controller的状态和预期一致 //controller通过监听kube-apiserver的事件,delete事件、watch事件、add事件等等
5. kube-scheduler ---- 负责调度pod--- 只在master节点上有,不直接与kubelet交互 --- kube-apiserver发送new pod事件通知kube-scheduler,然后将调度策略通知给kube-apiserver
总结就是kubectl、etcd、kube-controller-manager、kube-scheduler、kubelet进程都是直接和kube-apiserver直接通信,然后这些组件之间通过kube-apiserver间接通信。
还有一个kube-proxy进程运行在每个节点上的进程。负责集群内部,节点之间的流量转发。也就是三层IP层。kube-proxy、ingress、network-policy比较容易混淆
组件 | 组件 |
---|---|
kube-proxy进程 | 运行在每个节点上的进程。负责集群内部,节点之间的流量转发。也就是三层IP层 |
ingress-controller(pod来的) | 用于http/https层,也就是7层。用于集群外部的流量,进入内部时,哪一些路由,应该访问哪些pod |
network-policy(具体由CNI控制,CNI以Daemonset部署) | 主要是针对ip去做分流,实现pod、service之间的访问控制 |
问题:K8s的Operator了解吗?
回答:operator指的是一种模式。允许用户自定义自己的crd,deployment等等。以及可以自定义控制pod的运行
operator主要有3个组件
1. CR custom resource // 自定义资源
2. Controller---Observe the current state, compare it to the desired state and adjust the state // Controller is just some logic // 这个controller也是以pod的形式来运行。但是会监视CR的状态
3. State --- The state just holds the information of what the desired state of the resource is and the resource is the thing that you are managing. // 具体的表现形式就是yaml
官网是直接给了一个demo。参考:https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/operator/
1.有一个名为 SampleDB 的自定义资源,你可以将其配置到集群中。
2.一个包含 Operator 控制器部分的 Deployment,用来确保 Pod 处于运行状态。// 控制器Controller本身也是一种Pod
3.Operator 代码的容器镜像。
4.控制器代码,负责查询控制平面以找出已配置的 SampleDB 资源。
5.Operator 的核心是告诉 API 服务器,如何使现实与代码里配置的资源匹配。
- 如果添加新的 SampleDB,Operator 将设置 PersistentVolumeClaims 以提供持久化的数据库存储, 设置 StatefulSet 以运行 SampleDB,并设置 Job 来处理初始配置。
- 如果你删除它,Operator 将建立快照,然后确保 StatefulSet 和 Volume 已被删除。
6.Operator 也可以管理常规数据库的备份。对于每个 SampleDB 资源,Operator 会确定何时创建(可以连接到数据库并进行备份的)Pod。这些 Pod 将依赖于 ConfigMap 和/或具有数据库连接详细信息和凭据的 Secret。
7.由于 Operator 旨在为其管理的资源提供强大的自动化功能,因此它还需要一些额外的支持性代码。 在这个示例中,代码将检查数据库是否正运行在旧版本上, 如果是,则创建 Job 对象为你升级数据库。
问题Deployment 、StatefulSet、DaemonSet、ReplicaSet 都有啥区别?
回答:如下
组件 | 作用 |
---|---|
replicaset | 管理pod副本的,部署无状态应用---k8s官方也不建议直接操作replicaset。应该使用deployment,deployment功能更多 |
deployment | 管理Pod和ReplicaSet,部署无状态应用,滚动升级等功能 |
statefulset | 部署有状态应用---比如mysql主从集群 |
Daemonset | 保每个node都运行某个pod。一般这种pod里面放的是一些守护进程。 |
No
-Number-
04
总结
考了CKA也不能直接就有offer,K8s的八股文还是不能少,做K8s开发的路更难。。。