kubernetes的学习路线以及技能点路线规划

kubernetes的学习路线
第一阶段
kubernetes的背景
安装kubernetes环境
kubernetes基本概念和使用方法
第二阶段
kubernetes的基本架构
kubernetes的容器调度的基本流程
第三阶段
kubernetesapi结构
熟悉kubernetes各个子系统
熟悉kubernetes排错相关内容
第四阶段
加深对各个资源的理解
学习更多kubernetes概念知识
第五阶段
学习更多的kubernetes集群层面的功能
更加深入学习kubernetes架构和组件的能力
第六阶段
对kubernetes的扩展机制了如指掌
可以编写kubernetes控制器,能够基于扩展机制灵活的二次开发
第七阶段
了解kubernetes生态项目
跟踪kubernetes社区发展
跟踪CNCF社区发展

kubernetes的具体知识点

第一阶段

1、为甚么会出现kubernetes
2、他的出现解决了什么问题?
3、有没有类似的系统?
4、了解概念:pod node label event service configmap&secret deployment namesapce

第二阶段
1、master &node
2、知道什么是kubernetes master 什么是node
3、知道两者的关系,知道他们是如何通讯的
3、master组件
4、api server kubernetes如何接受请求,又如何将结果返回给客户端
5、etcd 了解etcd的主要功能机制
6、controller manager。 控制器的原理 list-watch的基本原理
7、kubernetes默认情况下大致包含哪些类型的控制器
8、shceduler 熟悉kubernetes的调度流程是怎样的
9、调度器在整个调度流程中的角色
10、node组件
11、kubelet 知道kubelet如何接受调度请求并启动容器的
12、kube-proxy 了解kube-proxy的作用 提供的功能是什么
13、container runtime 了解都有那些container runtime
14、主要了解docker一些基本操作与实现原理
15、核心addons & plugins
16、DNS DNS为集群的服务发现提供的支持,kubernetes开始默认使用coreDNS
17、network plugin kubernetes多节点环境需要部署网络插件才能使用,默认情况下使用flannel即可

第三阶段

1、kubernetes的api如何控制版本的
2、kubernetes的api是如何分组的
3、kubernetes对象的表示方法与设计理念
4、kubernetes api的访问控制

我们可以通过浏览 Kubernetes API 代码仓库来了解 Kubernetes API 组(Group)的信息。所有的资源定义代码都遵循 //types.go 的规范,例如上述 Deployment 资源是定义在 apps group 中。我们可以在 apps/v1/types.go 中查找到关于 Deployment 的定义。
接下来,我们可以通过浏览 Kubernetes/Community 代码仓库来了解各个兴趣小组(SIG),“SIG” 是 Special Interest Group 的简称。Kubernetes 的演进都是通过 SIG 来推动的,因此了解 SIG 的分工对我们理解 Kubernetes 非常重要。一般来讲,一个 SIG 对应着一个 Kubernetes 子系统,例如,sig-apps 负责决定是否引入新的 API,或者现有 API 是否需要升级等等。我们通过查看 Community 中带有 “sig-” 前缀的目录来了解 SIG 的工作内容、会议纪要等等。这里简单列举 Kubernetes 重要的子系统:

架构 Architecture
应用 Apps
存储 Storage
网络 Network
权限 Auth
节点 Node
调度 Scheduling
命令行 CLI
多集群 MultiCluster
云平台 CloudProvider
扩展性 Scalability
弹性伸缩 Autoscaling
监控日志 Instrumentation

(可选)细心的你可能会发现以 “wg-” 开头的目录,例如 “wg-resource-management”。“wg” 是 working group 的简称,是针对需要涉及多个 SIG 之间合作而展开的一种工作组,独立于任何 SIG 。例如 resource management 会涉及到 Node、Storage、Scheduling 等 SIGs。

第四阶段

1、计算
Pod Lifecycle & Healthcheck & RestartPolicy
Pod Init-Container
Horizontal Pod Autoscaler (HPA)
更多控制器:Job、CronJob、Daemonset、StatefulSet、ReplicaSet
2、网络
Service 实现,主要了解 iptables 的实现(可选:ipvs 模式)
Ingress 原理和常用的 nginx ingress 操作
DNS 服务的原理,以及 CoreDNS 方案
3、存储
Volume 以及底层存储类型
PV/PVC、StorageClass
4、安全
AuthN, AuthZ & Admission Control
NetworkPolicy
ServiceAccount
Pod/Container SecurityContext
Pod Security Policy (PSP)
5、调度
Pod/Node Affinity & Anti-affinity
Taint & Toleration
Priority & Preemption
Pod Disruption Budget

总结一下,1)本阶段我们接触到更多的资源,包括:HPA、Job、CronJob、DaemonSet、StatefulSet、Ingress、Volume、PV/PVC、StorageClass、NetworkPolicy、PSP。2)更加深入了解已学资源的使用,例如 Init-Container、SecurityContext、Affinity 等。这些能力最终都会体现在各个资源的 API 上,例如 Affinity 是 Pod API 结构的一个字段,Scheduler 通过解析这个字段来进行合理的调度。未来如果有更多的能力,我们都可以通过解读不同资源的 API 字段来一探究竟。

第五阶段

1、各个组件的功能以及作用
kube-api-server
kube-scheduler
kube-controller-manager
kube-proxy
kubelet
kubectl
同时,Kubernetes 提供了 FeatureGate 来控制不同的特性开关,我们可以通过 FeatureGate 来了解 Kubernetes 的新特性。

2、Master

Dynamic Admission Control
动态准入控制(在练虚期阶段需要更加深入的了解)
对应 API Server --admission-control-config-file 参数
Advanced Auditing
提供可动态配置的审计功能
对应 API Server 带有 --audit- 前缀的参数
Etcd Configuration
提供各种与 Etcd 相关的配置,例如 Kubernetes event TTL
对应 API Server 带有 --etcd- 前缀的参数
All Admission Controllers
列举所有 Kubernetes 所支持的 Admission Controllers,每个 Admission 都与 Kubernetes 特定的功能相关联
对应 API Server --enable-admission-plugins 参数,该参数注释列举了所有的默认 Admission Controllers
Garbage Collection
启用后,Kubernetes 会自动根据 OwnerReferences 来回收 API 资源
对应 Controller-Manager --enable-garbage-collector 参数
Concurrent Sync Limiting
避免过多的资源同步导致集群资源的消耗
对应 Controller-Manager 带有 --concurrent 前缀的参数
All Controllers
列举所有 Kubernetes 所支持的 Controllers,每个 Controller 都与 Kubernetes 特定的功能相关联
对应 Controller-Manager --controllers,该参数注释列举了所有的默认 Controllers

3、Node

Kubelet Eviction
当节点资源不足时,Kubernetes 通过驱逐 Pods 的方式确保节点的稳定性
对应 Kubelet 带有 --eviction- 前缀的参数,例如 --eviction-hard
Image GC
清理容器镜像占用的磁盘空间
对应 Kubelet 带有 --image-gc- 前缀的参数,以及 --minimum-image-ttl-duration 等参数
Resource Reserve
为系统资源预留一定的资源,确保节点的稳定性
对应 Kubelet --kube-reserved、–kube-reserved-cgroup 等参数
CPU Manager
提供更多的 CPU 管理能力,例如静态 CPU 亲和性
对应 Kubelet --cpu-manager-* 前缀的参数
Storage Limit
避免节点过度挂载数据卷
对应 FeatureGate AttachVolumeLimit

第六阶段

1、API 资源扩展能力

Annotation:保存少量非结构化第三方数据
Finalizer:资源删除时,用户调用外部系统的钩子
CustomResourceDefinition:自定义 Kubernetes API
API Aggregation:多个 API Server 聚合,适用于较大量的 API 定制
学习 API 资源扩展的一个重要方式是创建一个扩展资源,或者编写一个自己的控制器。强烈推荐自行编写一个控制器,这里列出几个常见的工具:

kubebuilder:来自 Kubernetes 官方的 API 扩展项目
sample-controller:来自 Kubernetes 官方的一个样例
operator-sdk:来自红帽的一个 operator 库
shell-operator:适合运维开发使用的 shell operator 库
meta-controller:来自 Google 的一个更加"傻瓜"式编写控制器的库
API 访问扩展能力

认证 Webhook:用户认证时,调用外部服务,仅支持静态配置
鉴权 Webhook:用户鉴权时,调用外部服务,仅支持静态配置
动态访问控制 Webhook:请求访问控制时,调用外部服务,支持动态增加外部服务
Kubernetes API 访问扩展主要是通过 Webhook 来实现。注意只有访问控制支持动态增加外部服务,认证鉴权的外部服务在启动 API Server 的时候就注册完毕,无法在后续增加,主要原因是动态增加外部认证鉴权服务,带来的安全风险过大。

2、调度器扩展能力

扩展接口(Scheduler Extender):类似 Webhook,调用外部服务进行调度决策
多调度器:支持在 Kubernetes 运行多个调度器调度不同作业
调度器框架:定义一套 Go API,使用户无需 fork Kubernetes Scheduler 代码即可完成“代码级”的定制
针对简单场景,我们可以直接使用 Scheduler Extender 即可,例如按 GPU 型号调度。复杂调度场景可以使用多调度器或调度器框架,例如基于流图的调度器 poseidon,批处理调取器 kube-batch 等。一般而言,使用 Extender 即可满足大多数场景。

3、网络扩展能力

网络插件 CNI:使用 CNI 插件,可以选择任何我们需要的网络方案
自定义 Ingress 控制器:Ingress 定义了一套 API 接口,我们可以选择任意实现
自定义 NetworkPolicy 控制器:同上,可选实现包括 Calico、Cilium 等
自定义 DNS 控制器:Kubernetes 定义了一套 DNS 规范,我们可以选择任意实现
网络插件 CNI 是容器网络标准,Kubernetes 提供了良好的支持,常用插件包括 flannel、Calico 等等。对于 Ingress、NetworkPolicy、DNS,相信到目前为止大家应该可以理解,其本质上是 Kubernetes 定义的一套 API,底层实现可插拔,用户可以有自己的选择。

4、存储扩展能力

FlexVolume:Kubernetes 提供的一种动态对接存储方案,支持用户自定义存储后端
存储插件 CSI:使用 CSI 插件,可以选择任何我们需要的存储方案
FlexVolume 是 Kubernetes 自带的对接外部存储的方案,用户编写少量的代码即可加入自定义存储后端,适用于简单场景。存储插件 CSI 是容器网络标准,Kubernetes 提供了良好的支持,同时为方便第三方实现,还提供了一整套 SDK 解决方案。所有底层存储相关的能力都与 CSI 密切相关。

5、运行时扩展能力

运行时接口 CRI:使用 CRI 插件,可以选择任何我们需要的运行时方案
运行时接口 CRI 是 Kubernetes 提出,为解决支持多种运行时而提供的方案。任何运行时,只需实现 CRI 相关的接口,即可接入 Kubernetes 中,包括 Docker、Containerd、gVisor、Kata 等。

6、特殊硬件或资源扩展能力

扩展资源 Extended Resource:通过 Kubernetes 原生 API 方式支持添加自定义资源
设备插件 Device Plugin:使用 Device Plugin 插件,可以对接任何我们需要的硬件
对于简单场景,例如静态汇报资源数量,可以直接使用 Extended Resource 扩展 Kubernetes 所支持的硬件。Device Plugin 的核心是自动接入各种特殊硬件如 Nvidia、Infiniband、FPGA 等。在资源汇报层面 Device Plugin 目前也使用了 Extended Resource 的能力,但由于 Extended Resource 的局限性,Device Plugin 未来也可以与其他 API 对接。目前使用最多的 Device Plugin 主要是 Nvidia 的 GPU device plugin。

7、监控扩展能力

自定义监控:支持使用自定义监控组件如 Prometheus 提供监控指标
自定义监控包括 Custom Metrics 和 External Metrics,例如 Prometheus adaptor。

8、云供应商扩展能力

云控制器 Cloud Controller Manager:支持可插拔云服务提供商
云扩展能力的目标是使各个云供应商可以在不改变 Kubernetes 源码的情况下,接入其服务。每个云供应商都有独立的项目。

9、命令行插件

Kubectl Plugin:kubectl plugin 支持扩展 kubectl 子命令,与 API 扩展能力结合可以提供近乎原生的使用方法。

来源地址:https://zhuanlan.zhihu.com/p/81565088

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值