8

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

 2 years ago
source link: https://segmentfault.com/a/1190000041272275
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

成为一名k8s专家需要掌握哪些知识

  • 在完整的阅读了k8s源码,梳理了160多篇文档之后我进行如下的总结:
  • 当然主要目的是罗列一些关键点:具体细节受限篇幅不会贴出来

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 :提供了镜像的配置和文件系统层定位信息,可以看作是镜像的目录,文件格式为 json 。
        • Image Layer Filesystem Changeset :序列化之后的文件系统和文件系统变更,它们可按顺序一层层应用为一个容器的 rootfs,因此通常也被称为一个 layer(与下文提到的镜像层同义),文件格式可以是 tar ,gzip 等存档或压缩格式。
        • Image Configuration :包含了镜像在运行时所使用的执行参数以及有序的 rootfs 变更信息,文件类型为 json。
      • 1个可选的

        • image-index : 图像索引是一种更高级别的清单,它指向特定的图像清单,非常适合一个或多个平台
  • 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中几种容器的关系

    • 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这个奇葩的存在

    • 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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK