惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

又耳笔记

用AI挣钱之AI建站:二维码生成器工具 用AI挣钱之AI建站:https://markdowntopdf.top Cloudflare Workers实战番外一:用Static Assets托管网站,告别传统方案 Cloudflare Workers实战(五):不止JavaScript,拥抱Python与Rust Cloudflare Workers实战(四):托管和分发静态文件 Cloudflare Workers实战(三):实现认证、重定向与缓存 Cloudflare Workers实战(二):动态修改后端响应 Cloudflare Workers实战(一):随心所欲操作客户端请求 Cloudflare workers不完全指南 使用n8n创作短篇小说 水果风波:信任的代价 用Python将PDF文件转换成图片 rust网络框架Pingora源码阅读3 rust网络框架Pingora源码阅读2 rust网络框架Pingora源码阅读1 Pingora快速入门教程1之总览 Rust模板引擎askama快速入门引擎 使用Loco快速搭建自己的后台系统 用Rust发一封图文并茂的邮件 Rust小项目: 写一个简单的恶意流量阻断器 Rust小项目: 写一个简单的网页爬虫 Rust命令行库Clap快速入门教程 Rust小项目:用Rust写一个端口扫描器 Rust真全栈开发快速入门 rust声明宏快速入门教程 Rust文本处理快速入门教程 RUST web框架axum快速入门教程6之测试 白嫖免费的Rust在线运行时shuttle RUST web框架axum快速入门教程5之中间件 用Rust来做以太坊开发5之事件日志及签名
Kubernetes源码阅读大纲
About 又耳宁 关于技术与股票的一些零碎想法 · 2022-05-14 · via 又耳笔记

保姆级别的源码阅读,死扣各个细节和代码。

代码版本: release-1.22(b68064208b29e5956cdff79a94831b52dc50d89a)

本系列主要围绕k8s的各个部分的源码来阅读。适合深入k8s内部原理的童鞋阅读,暂时没有介绍基础概念及使用的打算。

整个kubenetes源代码的组件阅读顺序,由以下任务主线作为线索进行逐个击破。

创建一个deployment到底发生了什么事?

那么涉及的顺序如下

  1. kubectl
  2. kube-apiserver
  3. kube-scheduler
  4. kube-controller-manager
  5. kubelet
  6. kube-proxy

之所以是上面的这个顺序,那是因为在创建一个deployment的时候涉及的组件顺序大致如下(当然了,不可能完全单向的数据流,这里的数据流是为了简化)。

首先有一个deployment.yaml文件 -> 使用kubectl apply -f deployment.yaml创建该资源 -> kubectl会把文件处理之后发给api-server ->

api-server会把数据存在etcd -> kube-scheduler监控到了这个事件所以选择一个节点,然后发出一个事件 -> kube-controller-manager也监控到了这个事件 -> 最后kubelet收到事件就创建对应的容器 -> kube-proxy会设置对应的网络环境

这里的deployment.yaml如下, 之后的deployment对象都是来自于它。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: leader
        image: "docker.io/nginx:latest"
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80

kubernetes的代码结构如下

├── CHANGELOG
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── LICENSES
├── Makefile
├── Makefile.generated_files
├── OWNERS
├── OWNERS_ALIASES
├── README.md
├── SECURITY_CONTACTS
├── SUPPORT.md
├── api
├── build
├── cluster
├── cmd
│   ├── OWNERS
│   ├── clicheck
│   ├── cloud-controller-manager
│   ├── dependencycheck
│   ├── gendocs
│   ├── genkubedocs
│   ├── genman
│   ├── genswaggertypedocs
│   ├── genutils
│   ├── genyaml
│   ├── importverifier
│   ├── kube-apiserver
│   ├── kube-controller-manager
│   ├── kube-proxy
│   ├── kube-scheduler
│   ├── kubeadm
│   ├── kubectl
│   ├── kubectl-convert
│   ├── kubelet
│   ├── kubemark
│   ├── linkcheck
│   └── preferredimports
├── code-of-conduct.md
├── docs
│   └── OWNERS
├── go.mod
├── go.sum
├── hack
├── logo
├── pkg
│   ├── OWNERS
│   ├── api
│   ├── apis
│   ├── auth
│   ├── capabilities
│   ├── client
│   ├── cloudprovider
│   ├── cluster
│   ├── controller
│   ├── controlplane
│   ├── credentialprovider
│   ├── features
│   ├── fieldpath
│   ├── generated
│   ├── kubeapiserver
│   ├── kubectl
│   ├── kubelet
│   ├── kubemark
│   ├── printers
│   ├── probe
│   ├── proxy
│   ├── quota
│   ├── registry
│   ├── routes
│   ├── scheduler
│   ├── security
│   ├── securitycontext
│   ├── serviceaccount
│   ├── util
│   ├── volume
│   └── windows
├── plugin
│   ├── OWNERS
│   └── pkg
├── staging
│   ├── OWNERS
│   ├── README.md
│   ├── publishing
│   └── src
├── test
├── third_party
│   ├── OWNERS
│   ├── etcd.BUILD
│   ├── forked
│   ├── multiarch
│   └── protobuf

k8s所有组件都有对应的二进制执行文件,全部放在cmd目录,每个子目录对应一个组件。

文章列表:

  1. kubectl
    1. kubectl (一)
  2. kube-proxy
    1. kube-proxy源码阅读

番外篇