第29节 CloudNative / Kubernetes 学习资源整理


❤️💕💕新时代拥抱云原生,云原生具有环境统一、按需付费、即开即用、稳定性强特点。Myblog:http://nsddd.topopen in new window


[TOC]

需求

提示

我们需要对 kubernetes 进一步的学习和深造,看源码是必须的道路。

与其重要的,是对 kubernetes 资源的收集。

⚠️ 所有资源均是采用外链连接,书本资源或不放连接,其他均为自己感受和总结。如有侵权请联系删除。

⚠️ **注意,这篇文章将永久保存在 notion,将会不断地更新下去,提供了可写通道,如果你有更好的资源,欢迎补充在notion上,地址是:https://nsddd.notion.site/CloudNative-2f278e98ed274999829333272415c72dopen in new window **

关于kubernetes:

**关于 CNCF 的贡献,你需要签署 CLA **

自己写作的一些资源:

都收纳到 awesome 仓库中,覆盖 📚 菜鸟成长手册🚀 CS系列 、云原生系列、区块链系列、web3系列🔥、Golang系列💡...... 访问 GitHub👀 https://github.com/cubxxw/awesome-cs-cloudnative-blockchain

最好需要什么

  1. 如果说第一步的话,那必须要了解 docker 容器底层原理和 Linux 内核基础相关。
  2. 先理解理解完架构了,读起来就比较快了。
  3. 学会使用它,不会使用,永远无法理解它的设计理念。
  4. 读源码还得带着问题去读,不然会很枯燥。一定要带着问题去读,不然就会很枯燥,然后陷入细节中去
  5. 读源码还得有一定积累量,比如你已经读过很多基础包的源码比如 net/http grpc-go 等等
  6. 要尝试着调试,要尝试着练习,要尝试着理解和分析产品理念,更要学会自己设计。

基础知识

基础概念:

我们需要知道 kubernetes 的基础概念,我们或许在前面有讲解过。

比如 Build-in 的 API Groups 和 API Objects 有什么,做什么用;

有一些很重要的工具库:gengo ,包括 informer 机制;

  • Cobra:命令行阿,docker、Kubernetes、sealos、sealer、ks 都具备的~
  • go-restfulopen in new window:REST 要求开发人员以与协议定义一致的方式显式使用 HTTP 方法。这个基本的 REST 设计原则在创建、读取、更新和删除 (CRUD) 操作和 HTTP 方法之间建立了一对一的映射。
  • etcd:和 fabric 一样采用 raft 共识机制的数据库,在 k3s 中很深的讲解和应用。

Restful 基础:

简单了解 Restful 概念,如果做过 Restful Service 那么最好了

熟悉一些常见的设计模式:

  • 参考:https://www.yuque.com/aceld/lfhu8y/rg6nsf

熟悉常用的算法,熟悉操作系统(尤其是 Linux 的基础知识),熟悉网络的一些协议和原理。

Kubernetes 有很多复杂的地方,尤其是网络和存储,希望以后可以成为 ×

阅读方法(其他开源项目类似)

  • 先整体,后局部(不钻牛角尖)
  • 深入局部中的学习中去
  • 耐心,多看代码~

学习方法

参考2022GSoC 谷歌开源之夏活动,对于学院的解答。

我是opensuse组织的GSoC'22贡献者,我想知道我可以如何学习和贡献k8s社区。我知道k8s的基础知识,但现在我想学习一些中级和高级概念,以便我可以在未来为k8s做出贡献。非常需要帮助

  1. Start learning each part of k8s.
  2. For example, start with Scheduler part.
  3. Go to k8s github and look into the code https://github.com/kubernetes/kubernetes
  4. It will be the best place to start
  5. Read about scheduler and find described logic in the source code.
  6. But first i think that you need to learn how each part is communicating and for what it is responsible.
  7. It is great that you wish to contribute.
  8. after that, learn everything about different Workloads (StatefulSet, ReplicaSet, DaemonSet etc.)
  9. then services and ingress
  10. then pv/pvc
  11. then go deeper and learn about Container Runtime Interface (CRI)
  12. and about Network Interface (CNI)
  13. and how they are communicating
  14. between themselves and with the host machine
  15. i guess that should give you a good grasp of how everything is working internally
  16. you can always check kubernetes api specification if you are looking for something what you have not learned yet

阶段型方法

  1. 第一阶段 先了解k8s,是什么,能做什么,架构,核心资源对象,设计理念,发展历程等等
  2. 第二阶段 开始使用k8s, 自己创建pod, deploy, job等资源。能够基于k8s开发一下组件,比如实现一个controller监听pod的创建删除等。【看山是山】
  3. 第三阶段 开始阅读源码,了解底层实现。这个过程会对k8s有一个更深的理解。比如创建一个pod的完成历程是什么样的,k8s gc 机制到底是怎么实现的。namespaces删除的时候怎么做到删除所有资源后在删除的。【看山不是山】 这里推荐源码阅读方式:理论+实践结合。
    1. 理论:通过 ide 之间各种跳转阅读源码
    2. 实践:自己动手在[关键代码]处增加日志,通过查看日志输出理解源码 (repo也介绍了如何二进制搭建一套K8s集群)
  4. 第四阶段 再排查问题中进一步深入k8s的理解

书籍推荐

视频资源

网站资源

推荐书籍

youtube 精选视频

GitHub 精选仓库

数据统计和收集

CNCF 数据

源码统计

Kubernetes 代码特别庞大,使用 cloc 统计 (⏱️ 2023-03-17)

image-20230317222140890

其他源码统计

⚠️ 数据截止到 2023 年 3 月 17 日

  • Istio : SUN:514910 (GO:339739)
  • Kind : 21060
  • Minikube: 178446
  • sealos: 116277

END 链接