暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes 的学习路线

元坑昊思迹 2021-10-04
2690

这几年有个词很火:云原生,而 Kubernetes 就是开启云原生之路最核心的组件服务。Kubernetes 是一个分布式容器化资源调度服务,是 Google 内部服务 Borg 的开源版本。技术方面还是不得不服人家 Google,总能开源出强大好用的组件。


我从2018年初开始接触 Kubernetes,到目前为止陆陆续续了解过 Kubernetes 一些相关的知识,但对 Kubernetes 也只懂皮毛。我并没有系统性地学习过 Kubernetes,基本都是因工作所需才去了解 Kubernetes 各方面的一点知识。要想对一个方向有深入了解,还是应该去系统性地学习一下。所以,我想整理一下系统性学习 Kubernetes 的路线,也分享给大家


事先说明下,以下内容基本从网上摘抄,主要是参考infoq的文章,原文更加详细,想要系统了解下的同学可以参考原文,本文只是从原文中摘抄一些关键点,便于后续学习,原文链接:https://www.infoq.cn/article/9dtx*1i1z8hsxkdrpmhk


原文对 Kubernetes 学习路径规划了 8-9 个月的时间,分成了七大阶段。我根据个人理解与后续学习指引,总结成了三个阶段:

  • 初步了解,在这个阶段需要对 Kubernetes 有个大体了解,知道一些 Kubernetes 中的一些基本概念和基本的使用方法。

  • 整体学习,在这个阶段需要对 Kubernetes 有整体全面的了解,知道 Kubernetes 所有核心组件的工作原理。

  • 加深学习,在这个阶段需要对 Kubernetes 的拓展生态进行了解,包括与 Kubernetes 相关的一些开源组件、持续关注 Kubernetes 社区与 CNCF 社区等。


我目前处于的阶段是初步了解阶段,只懂 Kubernetes 中的一些基本概念与基本用法。之后我还是要持续系统地学习下 Kubernetes,也会给大家带来多篇关于 Kubernetes 学习经验的文章。Kubernetes 这个生态真的很强大,如果你还没了解过 Kubernetes,至少应该了解一下。


第一阶段:初步了解

第一阶段的主要目标是

  • 了解 Kubernetes 基本概念和使用方法

  • 知道然后安装部署 Kubernetes 环境

  • 了解 Kubernetes 的基本架构以及容器调度的基本流程


对于 Kubernetes 基本概念与使用方法,到官网学习就好,参考内容如下:

  • 官方 Tutorial:Learn Kubernetes Basics(https://kubernetes.io/docs/tutorials/kubernetes-basics/)

  • 官方 Guestbook 样例:Guestbook Example(https://kubernetes.io/docs/tutorials/stateless-application/guestbook/)


对于安装部署 Kubernetes 环境,参考如下

  • 个人电脑上的简单使用,可以用 minikube 或 kind 部署一个本地环境。

  • 集群模式的部署,可以用 kubeadm,参考部署教程:https://github.com/caicloud/kube-ladder/blob/master/tutorials/lab1-installation.md

强烈建议大家手动部署一遍各个组件,参考:https://github.com/caicloud/kube-ladder/blob/master/tutorials/lab3-manual-installtion.md。虽然工具很强大,但对于学习来说,手动部署各个组件,可以加深我们对 Kubernetes 各组件的了解。因为工作所需,我曾经在无网环境下编译了 Kubernetes,这让我对 Kubernetes 的了解更深了。


对于 Kubernetes 的基本架构,需要了解的内容如下

(1)Kubernetes 整体架构图,Kubernetes 是 Master & Node 架构,参考下图:

(图片来源:https://jimmysong.io/kubernetes-handbook/concepts/


(2)Master 需要了解的相关组件

  • API Server。Kubernetes 如何接收请求,又是如何将结果返回至客户端。

  • Etcd。了解 Etcd 主要功能机制。

  • Controller Manager。Kubernetes 控制器是其架构中最为核心的一环,我们需要了解控制器的原理,List-Watch 的基本原理,知道 Kubernetes 默认情况下大致包含哪些类型的控制器。

  • Scheduler。熟悉 Kubernetes 的调度流程是怎样的,调度器在整个调度流程中的角色。


(3)Node 需要了解的相关组件

  • Kubelet。知道 Kubelet 是如何接受调度请求并启动容器的。

  • Kube-proxy。了解 Kube-proxy 的作用,提供的能力是什么。

  • Container Runtime。了解都有哪些 Container Runtime,主要了解 Docker 一些基本操作与实现原理。虽然 Kubernetes 已经要抛弃 Docker 了,但目前来看还处于初步阶段,所以对 Docker 也需要有一定的了解。


(4)核心 Addons & Plugins

  • DNS。DNS 为集群的服务发现提供的支持,Kubernetes 1.13 开始默认使用 CoreDNS。

  • Network Plugin。Kubernetes 多节点环境需要部署网络插件才可以使用,默认情况下使用 flannel 即可。


以下是一些参考的学习资料:

  • 官方文档:Kubernetes Components(https://kubernetes.io/docs/concepts/overview/components/)

  • feisky 的博客:Kubernetes 指南之核心原理(https://kubernetes.feisky.xyz/he-xin-yuan-li/index)

  • kubectl run 的背后流程(难):What happens when I type kubectl run?(https://github.com/jamiehannaford/what-happens-when-k8s)

  • kubectl run 的背后流程中文版:kubectl 创建 Pod 背后到底发生了什么?(https://mp.weixin.qq.com/s/ctdvbasKE-vpLRxDJjwVMw)


第二阶段:整体学习

第二阶段的主要目标是:

  • Kubernetes API 结构

  • 深入学习 Kubernetes 架构与各个子系统

  • 加深 Kubernetes 各个资源的理解

  • 学习更多 Kubernetes 集群层面的功能


之所以单独把 Kubernetes API 作为一个主要学习目标,是因为 Kubernetes API 的设计很赞,学习后,对以后我们系统设计上有一定的参考意义。学习内容如下:

  • Kubernetes 的 API 是如何控制版本的

  • Kubernetes 的 API 是如何分组的

  • Kubernetes 对象的表示方法与设计理念(https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/)

  • Kubernetes API 的访问控制(https://kubernetes.io/docs/reference/access-authn-authz/controlling-access/)


Kubernetes 除了核心架构外,还有多个子系统可以学习,参考如下:

  • 架构 Architecture

  • 应用 Apps

  • 存储 Storage

  • 网络 Network

  • 权限 Auth

  • 节点 Node

  • 调度 Scheduling

  • 命令行 CLI

  • 多集群 MultiCluster

  • 云平台 CloudProvider

  • 扩展性 Scalability

  • 弹性伸缩 Autoscaling

  • 监控日志 Instrumentation


对 Kubernetes 各种资源的学习,分为计算、网络、存储、安全、调度这几个方面

(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


Kubernetes 集群层面更多的功能,学习内容参考如下

(1)Master 层面

a)Dynamic Admission Control 

  • 动态准入控制

  • 对应 API Server --admission-control-config-file 参数 

b)Advanced Auditing 

  • 提供可动态配置的审计功能 

  • 对应 API Server 带有 --audit- 前缀的参数 

c)Etcd Configuration 

  • 提供各种与 Etcd 相关的配置,例如 Kubernetes event TTL 

  • 对应 API Server 带有 --etcd- 前缀的参数 

d)All Admission Controllers 

  • 列举所有 Kubernetes 所支持的 Admission Controllers,每个 Admission 都与 Kubernetes 特定的功能相关联 

  • 对应 API Server --enable-admission-plugins 参数,该参数注释列举了所有的默认 

e)Admission Controllers Garbage Collection 

  • 启用后,Kubernetes 会自动根据 OwnerReferences 来回收 API 资源 

  • 对应 Controller-Manager --enable-garbage-collector 参数 

f)Concurrent Sync Limiting 

  • 免过多的资源同步导致集群资源的消耗 

  • 对应 Controller-Manager 带有 --concurrent 前缀的参数 

g)All Controllers 

  • 列举所有 Kubernetes 所支持的 Controllers,每个 Controller 都与 Kubernetes 特定的功能相关联 

  • 对应 Controller-Manager --controllers,该参数注释列举了所有的默认 Controllers


(2)Node 层面

a)Kubelet Eviction 

  • 当节点资源不足时,Kubernetes 通过驱逐 Pods 的方式确保节点的稳定性 

  • 对应 Kubelet 带有 --eviction- 前缀的参数,例如 --eviction-hard 

b)Image GC 

  • 清理容器镜像占用的磁盘空间 

  • 对应 Kubelet 带有 --image-gc- 前缀的参数,以及 --minimum-image-ttl-duration 等参数 

c)Resource Reserve 

  • 为系统资源预留一定的资源,确保节点的稳定性 

  • 对应 Kubelet --kube-reserved、--kube-reserved-cgroup 等参数 

d)CPU Manager 

  • 提供更多的 CPU 管理能力,例如静态 CPU 亲和性 

  • 对应 Kubelet --cpu-manager-* 前缀的参数 

e)Storage Limit 

  • 避免节点过度挂载数据卷 

  • 对应 FeatureGate AttachVolumeLimit


第三阶段:加深学习

第三阶段的主要目标是:

  • 掌握 Kubernetes 的扩展机制并可以编写 Kubernetes 控制器

  • 了解 Kubernetes 生态项目、社区发展以及 CNCF 社区发展


对于 Kubernetes 扩展机制,包括 API 、调度器、网络、存储、运行时、特殊硬件或资源、监控、云供应商、命令行插件。内容很多,我就不一一列举了,大家参考:https://www.infoq.cn/article/9dtx*1i1z8hsxkdrpmhk


对于 Kubernetes 需要了解与学习的生态组件,包括:

  • Helm:为 Kubernetes 提供了包管理能力,方便用户快速部署安装各种服务。

  • Harbor:作为云原生环境下最常用的镜像仓库解决方案,了解 Harbor 十分重要。

  • Prometheus:Prometheus 是云原生环境下最重要的监控组件。

  • Istio:Istio 是服务网格的关键项目,但较为复杂,可以尝试简单了解。


对于 Kubernetes 社区以及 CNCF 社区可以关注的内容如下

  • Kubernetes Enhancement:关注新特性的讨论

  • Kubernetes Community:关注社区组织情况

  • CNCF TOC:关注 CNCF 进展,各种新项目讨论等

  • Awesome Kubernetes:Kubernetes 项目之学不动系列


最后来个总结,今天花了一个小时来整理 Kubernetes 的学习路线,内容基本源自于 InfoQ 的参考文章,希望对大家也有帮助。通过上面列举的内容,我们可以看到想要学好 Kubernetes 确实不太容易,内容涉及很广。由此可见,Kubernetes 是多么强大,确实也值得我们去学习。后续我也会分享多篇在学习 Kubernetes 过程中的一些总结内容一起加油吧,各位



上一篇文章:富不过三代吗?

文章转载自元坑昊思迹,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论