栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

成为一名k8s专家需要掌握哪些知识?当我读完k8s源码之后总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

成为一名k8s专家需要掌握哪些知识?当我读完k8s源码之后总结


# 成为一名k8s专家需要掌握哪些知识
- 在完整的阅读了k8s源码,梳理了160多篇文档之后我进行如下的总结:

- 当然主要目的是罗列一些关键点:具体细节受限篇幅不会贴出来

# 教程地址
- [k8s底层原理和源码讲解之进阶篇](https://ke.qq.com/course/4236389?tuin=361e95b0)
- [k8s底层原理和源码讲解之精华篇](https://ke.qq.com/course/4093533?tuin=361e95b0)

# k8s知识图谱
## 01 容器底层知识
- 01 到底什么是容器:简单说就是受限制的进程,底层相关的两个技术是linux的namespace和cgrop
    - namespace 的分类和sandbox容器的关系,哪些ns是共享的,涉及到容器的隔离不彻底问题
    - cgroup v1 和v2 的区别,cpu/mem限制的原理,cpu绑核如何操作
- 02 容器镜像:镜像不是docker的专利
    - OCI(Open Container Initiative)规范是事实上的容器标准,已经被大部分容器实现以及容器编排系统所采用。
    - 任何实现了OCI规范的工具都可以打镜像
    -  规范要求镜像内容包括以下 几个 部分:
        - 3个必须的
            - [Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md) :提供了镜像的配置和文件系统层定位信息,可以看作是镜像的目录,文件格式为 json 。
            - [Image Layer Filesystem Changeset](https://github.com/opencontainers/image-spec/blob/main/layer.md) :序列化之后的文件系统和文件系统变更,它们可按顺序一层层应用为一个容器的 rootfs,因此通常也被称为一个 layer(与下文提到的镜像层同义),文件格式可以是 tar ,gzip 等存档或压缩格式。
            - [Image Configuration](https://github.com/opencontainers/image-spec/blob/main/config.md) :包含了镜像在运行时所使用的执行参数以及有序的 rootfs 变更信息,文件类型为 json。
        - 1个可选的
            - [image-index](https://github.com/opencontainers/image-spec/blob/main/image-index.md) : 图像索引是一种更高级别的清单,它指向特定的图像清单,非常适合一个或多个平台
        
- 03 容器联合文件系统:overlayfs 的理解

    - 容器run起来时对应的3个层:
        - image layer (只读),镜像的层
        - init layer  容器在启动时写入的一些配置文件,发生在 container layer之前
        - container layer  新增的可写层
        
    - copy on write技术 
        - 好处是减少镜像体积,提升启动速度,
        - 缺点就是写入的速度慢,所以在 container layer 中不适合进行大量的文件读写,应该使用Volume   
- 04 容器运行时 CRI主要包括两个 gRPC 服务,ImageService 和 RuntimeService

    - grpc服务分析
        - ImageService 服务主要是拉取镜像、查看和删除镜像等操作
        - RuntimeService 则是用来管理 Pod 和容器的生命周期,以及与容器交互的调用(exec/attach/port-forward)等操作
        - Exec等交互服务也可以单独出来做一个StreamService
    - low/high level容器运行时
        - 如runc、lxc、containerd、docker、libcontainerd 他们有什么区别
    - docker 的组件被拆分成什么样子了,它们都负责干什么    


## 02 k8s计算
- 01 内置资源的常规操作
    - deployment、statefulset、daemonset、job
    - 扩/缩容:慢启动slowBatchStart创建pod的实现和目的
    - 更新策略:滚动更新 vs 暴露重建
    - 删除策略:级联删除 vs 保留 pod
- 02  k8s-pod中几种容器的关系
![](/img/bVcXkXT)
    - sandbox都干了什么
    - init容器的目的和应用场景
    - app容器的启动过程:internal hook和给用户暴露的lifecycle hook
    - 三种探针的作用
    - 总结就是pod的生命周期,几种容器的启动顺序,几个hook的作用,最后还有探针
    
- 03 拓扑管理器 kubelet多种资源管理器独立分配资源缺乏统一的视角
    - 多种资源管理器在给pod分配设备时,都是独立工作的,不会有一个全局观念,这可能会造成资源分配不合理的问题
    - Topology Manager就是提供全局的视角,为了尽量将资源分配在同一个numa节点下,提升性能
- 04 pod的三种QOS 和cpu内存资源的关系
    - 不同qos oom_score_adj值的设置
    - qos和 资源共享池的关系,涉及到后面的cpu/mem manager的numa设置

- 05 kubelet调用CRI的流程和docker-shim这个奇葩的存在
![](/img/bVcXkXU)
    - k8s如何麻痹docker的
    - OCI标准的制定

## 03 k8s存储
- 01 常见volume类型 
- 02 configMap和secret的热加载原理
- 03 动静态pv和 StorageClass动态生成PV
    - PV和PVC之间的相互作用遵循这个生命周期 :供应-->绑定-->使用--> 释放--> 循环
    - 随着PV数量的增加,管理员需要不停的定义PV的数量,衍生了通过StorageClass动态生成PV
    - StorageClass通过PVC中声明存储的容量,会调用底层的提供商生成PV。
- 04 kubelet volume-manager挂载volume的过程
- 05 CSI插件
    - 动态 Provisioner机制

## 04 k8s网络
- 01 Kubernetes需要解决4种通信模式:
    1. 容器和容器之间的通信
    2. Pod和Pod之间的通信
    3. Pod和Service之间的通信
    4. Internet和Service之间的通信
- 02 svc 4种负载均衡模式:其实说白了就是流量由谁来转发
- 03 svc的服务发现 :dns 和环境变量
- 03 iptables是如何转发svc的流量的:
    - 几条KUBE-XXX的链的数据流转
- 04 svc的cluster-ip 能被ping通吗:
    - 需要分情况,比如iptables reject了icmp的报文
- 05 cni插件:calico和Flannel 的区别
- 06 ingress机制:原理可以简化为nginx+服务发现+热更新
    - traefik 源码解读
- 07 无头服务的真正生产用途

## 05 k8s的插件机制
- 01 准入控制器 :可以注入sidecar或者做vpa扩容
    - 数据请求流程是什么样的?
- 02 CRI 、CSI、CNI 就是k8s给第三方实现者提供的 计算存储网络插件机制
- 03 apiserver的聚合插件,方便扩展API:典型应用metrics.k8s.io和custom.metrics.k8s.io
    - 源码理解的如何?
- 04 kubelet 的 device-plugins设备插件机制,方便如nvidia GPU设备的接入 :grpc注册device和grpc server提供 device的管理
    - grpc哪里怎么注册和管理
- 05 严格说来crd+controller的 operator模式也算
    - reconcile调谐怎样写

## 06 k8s的控制平面源码理解
- 01 创建pod的流程在控制平面组件间的流转
- 02 informer机制的作用
    - 消息中间件? 降低etcd的压力
- 03 leaderelection选主机制
- 04 kubelet中的syncLoop大循环
    - 5类事件循环 7个chan
- 05 各个控制器的syncXXX流程 
    - 读写都混在一起的sync流程
- 06 kubelet中的各个资源manager
    - statusManger怎样同步状态的
    - containerManger 怎样限制 ephemeral storage 
    - EvictionManager源码中怎样工作的 
- 07 apiserver
    - 认证
    - 鉴权:rbac 源码
    - 准入: mutate vs validate ,当然还有webhook
    - 限速 
    - event broadcast 机制
    
## 07 k8s编排
- 01 基于cpu的hpa :快起慢缩
    - 怎样做到快起快缩
- 02 基于mem的hpa :怎么和metrics-server交互的,涉及到apiserver的聚合插件
- 03 基于prometheus-operator的 vpa
    - custom.metrics.k8s.io apigroup 的流程
    - 其中为什么需要准入控制器的接入
    - vertical-pod-autoscaler源码阅读之Recommender、updater、admission-controller源码解读
- 04 metrics-server的源码理解和 kubelet top的原理
    - 底层的数据来自哪里
    - 怎样存储的
    - cpu rate如何算出的
    
## 08 k8s crd开发
- 01 为什么要crd :封装基础对象来完成对分布式/有状态服务的快速部署
- 02 crd开发过程: 定义 CRD和实现 controller reconcile的 具体逻辑,其余交给代码生成工具

## 09 k8s 的监控
- 01 metrics ,那没的说肯定就是prometheus,那么prometheus on k8s那么方案也太多了
    - 存储怎么选
    - kube-prometheus 中的原理和提示又是什么
- 02 logging  
- 03 event 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号